球在屏幕底部冻结并振动

问题描述

| 这是我的代码
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
。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...