我正在使用下面的代码,但即使代码构建,似乎也不会阻止精灵离开屏幕。任何人都可以告诉我如何更改它,以便当精灵沿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.");
}
}
感谢
答案 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)
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;
}