xcode阻止一个精灵离开屏幕cocos2d

时间:2011-08-26 15:29:47

标签: xcode cocos2d-iphone screen sprite boundary

我正在使用下面的代码,但即使代码构建,似乎也不会阻止精灵离开屏幕。任何人都可以告诉我如何更改它,以便当精灵沿x坐标到达屏幕边缘时停止。

-(void)applyJoystick:(SneakyJoystick *)aJoystick toNode:(CCNode *)tempNode forTimeDelta:(float)deltaTime
{
CGPoint scaledVelocity = ccpMult(aJoystick.velocity, 1024.0f);
CGPoint newPosition = ccp(tempNode.position.x + scaledVelocity.x * deltaTime, tempNode.position.y);
CGSize screenSize = [CCDirector sharedDirector].winSize;
CGFloat spriteWidth = vikingSprite.contentSize.width;
CGFloat x = tempNode.position.x + scaledVelocity.x * deltaTime;
if (x < 0 + (spriteWidth/2)) {
    x = 0 + (spriteWidth/2);
} else if (x > screenSize.width - (spriteWidth/2)) {
    x = screenSize.width - (spriteWidth/2);

}
[tempNode setPosition:newPosition];
if (jumpButton.active == YES) {
    CCLOG(@"Jump button is pressed.");
}
if (attackButton.active == YES) {
    CCLOG(@"Attack button is pressed.");
}
}

感谢

3 个答案:

答案 0 :(得分:2)

修改后,您永远不会将更改后的变量x重新分配给vikingsprite。

所以你需要做一些事情:

if (x < 0 + (spriteWidth/2)) {
    x = 0 + (spriteWidth/2);
} else if (x > screenSize.width - (spriteWidth/2)) {
    x = screenSize.width - (spriteWidth/2);

}
CGPoint vikingPos = cpp(x, vikingsprite.position.y);
[vikingsprite setPosition:vikingPos];

我的语法可能有问题我没有写很多objective-c,但我使用cocos2d-x这是cocos2d的C ++版本

答案 1 :(得分:0)

设置edge as boundary

 boundary.SetAsEdge(b2Vec2(0,0), b2Vec2(winSize.width/PTM_RATIO, 0));

别忘了给Ray Wenderlich送啤酒。

答案 2 :(得分:0)

我认为你忘了重置它的位置?

if (x < 0 + (spriteWidth/2)) {
x = 0 + (spriteWidth/2);
tempNode.position.x = x;
} else if (x > screenSize.width - (spriteWidth/2)) {
x = screenSize.width - (spriteWidth/2);
    tempNode.position.x = x;


}