这是我的代码:
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。有时候球会在屏幕边缘冻结而只是振动。任何人都可以帮助我,我们将不胜感激。
答案 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
镜像。