问题描述
|
这是我的代码:
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是一个sprite,ball_speed是CGPoint。有时会发生什么,球在屏幕边缘冻结并振动。谁能帮助我,将不胜感激。
解决方法
您正在应用逻辑“如果球在屏幕外,请沿相应轴反转其速度”,这是不正确的:可能是球在屏幕外但已经向右移动了。发生这种情况时,除了弹跳(例如重力或摩擦力)以外,您的速度很多都被改变。
解决方案的第一部分是显式设置方向:
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;
请注意,ѭ3基本上反映了ѭ5周围的pos
。