球冻结在屏幕的底部并振动

时间:2011-06-23 22:08:15

标签: iphone objective-c cocos2d-iphone

这是我的代码:

if (ball.position.y  < 0 || ball.position.y > size.height) {
    ball_speed.y *= -1;
}
    if (ball.position.x  < 0 || ball.position.x > size.width) {
    ball_speed.x *= -1;
}

我在cocos2d制作游戏,ball是精灵,ball_speed是CGPoint。有时候球会在屏幕边缘冻结而只是振动。任何人都可以帮助我,我们将不胜感激。

1 个答案:

答案 0 :(得分:2)

你正在应用逻辑“如果球在屏幕之外,沿着相应的轴反转它的速度”,这是不正确的:也许球在屏幕之外,但已经正确地移动。这种情况会发生很多,你的速度会被反弹以外的东西改变(例如重力或摩擦力)。

解决方案的第一部分是明确设置方向:

if (ball.position.y < 0) 
  ball_speed.y = fabs(ball_speed.y);

if (ball.position.y > size.height)
  ball_speed.y = - fabs(ball_speed.y);

这将确保球确实将移回屏幕,因此边缘不可能振荡。

第二部分是可选的,但如果你想要正确的物理学,它仍然是有用的,那就是当它离开时将球移回屏幕:

if (ball.position.y < 0)
  ball.position.y = 2 * 0 - ball.position.y ;

if (ball.position.y > size.height)
  ball.position.y = 2 * size.height - ball.position.y;

请注意pos = 2 * limit - pos基本上pos围绕limit镜像。