我在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];
答案 0 :(得分:7)
这是对anchorPoints如何工作的常见误解。 anchorPoint与节点的位置有 nothing 。相反,它是节点对象纹理的偏移量!
默认的anchorPoint为0.5,0.5,这意味着纹理以节点的位置为中心。如果将anchorPoint设置为0,0,则纹理的左下角与节点的位置对齐。有效地,纹理向右和向上移动。但是节点的位置没有改变。
由于形状与节点的位置对齐,因此在更改anchorPoint时它不会移动。解决此问题的最简单方法是更改图像,例如通过仅使用透明颜色将其尺寸增加到一侧。我希望这是可以理解的。