附加到静态主体时更改CCSprite锚点

时间:2010-07-14 15:26:16

标签: cocos2d-iphone chipmunk

我在chipmunk中创建一个静态形状(使用SpaceManager)并将cpCCSprite附加到它上面。

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

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

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

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

how the cannon should look 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];

1 个答案:

答案 0 :(得分:7)

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

默认的anchorPoint为0.5,0.5,这意味着纹理以节点的位置为中心。如果将anchorPoint设置为0,0,则纹理的左下角与节点的位置对齐。有效地,纹理向右和向上移动。但是节点的位置没有改变。

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