0

我正在花栗鼠中创建一个静态形状(使用 SpaceManager)并将 cpCCSprite 附加到它。

但是,我需要精灵的锚点偏离中心,但是当我更改精灵的锚点时,形状和精灵不再对齐。

所以如果我像这样改变锚点

[sprite setAnchorPoint:ccp(0.5, 0.3)];

相应地绘制了精灵,但我希望形状会随之“移动”。这是我的意思的图片。

大炮的外观 http://www.tomelders.com/bin/cannon.png

左边是正确对齐的形状和精灵。我没有改变锚点。

右边是带有锚点的精灵ccp(0.5, 0.3)

我也在每帧重新散列静态形状。

这是它的创建方式

// create the sensor
sensor = [spaceMgr addRectAt:pPoint mass:STATIC_MASS width:53 height:81 rotation:0];
  sensor->sensor = YES;
  sensor->collision_type = 2;

  //Create the sprite
  CCTexture2D *texture = [[CCTextureCache sharedTextureCache] addImage:@"bownce-sprites-comic-sized.png"];

  barrel = [[cpCCSprite node] initWithShape:sensor texture:texture rect:CGRectMake(3, 428, 53, 82)];
  [self addChild:barrel];

  // set the ancor point
  [barrel setAnchorPoint:ccp(0.5, 0.3)];
  [barrel setPosition:pPoint];
4

1 回答 1

7

这是对锚点如何工作的常见误解。anchorPoint与节点的位置无关。相反,它是节点对象纹理的偏移量!

默认锚点在 0.5,0.5 表示纹理以节点位置为中心。如果将 anchorPoint 设置为 0,0,则纹理的左下角与节点的位置对齐。实际上,纹理向右和向上移动。然而,节点的位置没有改变。

由于形状与节点的位置对齐,因此在更改锚点时它不会移动。解决此问题的最简单方法是更改​​图像,例如将其尺寸增加到一侧,仅使用透明颜色。我希望这是可以理解的。

于 2010-07-30T20:32:33.183 回答