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

gar*_*uan 0 chipmunk cocos2d-iphone

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

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

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

[sprite setAnchorPoint:ccp(0.5, 0.3)];
Run Code Online (Sandbox Code Playgroud)

相应地绘制了精灵,但我预计形状会随之"移动".这是我的意思的图片.

大炮应该如何看待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];
Run Code Online (Sandbox Code Playgroud)

Lea*_*s2D 7

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

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

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