我有一个关于 cocos2d 和 box2d 的问题。我必须创建一个简单的轮子,它可以根据用户触摸 Ipad 应用程序的轮子的方式旋转。我希望根据一定的触摸动作,轮子以一定的速度开始,经过一些旋转后开始降低速度直到它停止。(就像一个经典的幸运轮)。
我需要一些提示。您认为仅使用 cocos2d 就可以做到这一点吗?还是我必须使用 Box2D?我已经开始使用Box2d了,它很强大,但是是否可以给一个物体一定的起始速度旋转,然后让世界模拟停止物体?
非常感谢!奔萨
我有一个关于 cocos2d 和 box2d 的问题。我必须创建一个简单的轮子,它可以根据用户触摸 Ipad 应用程序的轮子的方式旋转。我希望根据一定的触摸动作,轮子以一定的速度开始,经过一些旋转后开始降低速度直到它停止。(就像一个经典的幸运轮)。
我需要一些提示。您认为仅使用 cocos2d 就可以做到这一点吗?还是我必须使用 Box2D?我已经开始使用Box2d了,它很强大,但是是否可以给一个物体一定的起始速度旋转,然后让世界模拟停止物体?
非常感谢!奔萨
你现在可能已经想通了,但是有任何方法......你可以创建轮子并从一些初始旋转和触摸速度开始。然后根据您的需要启用摩擦,一段时间后会显示对象。希望能帮助到你
当我在 Android 上开发完全相同的东西时,我也找不到任何有用的示例/文章来实现它,所以我这样做了:
当用户触摸屏幕并进行滑动/滑动(将手指移过屏幕并将其从屏幕上移开)时,您会以像素/秒为单位计算 speedX 和 speedY(在 android 中,您有一个方法 onFling(float velocitY,float velocitX ))。
然后,您将以像素/秒为单位的速度转换为转数/秒。这意味着如果用户手指在 1 秒内移动了 1500 像素,您的轮子将旋转 X 次。例如,如果投掷/滑动速度 X 和速度 Y 为 1500 像素/秒,并且您的轮子的半径为 150 像素,您可以像这样计算轮子弧长:
arc = r * PI. (r=150)
然后你计算每秒转数的速度,如下所示:
spinSpeed = Math.sqrt((speedX*speedX)+(speedY*speedY))/arc)*360
一旦你有了速度,你可以每 T 毫秒(我使用 40 毫秒)改变车轮旋转角度,如下所示:
wheel.angle += spinSpeed;
您还必须实现拖动,因此轮子最终会减慢速度,如下所示:
spinSpeed -= drag_value;
wheel.angle += spinSpeed;
您必须将 drag_value 调整为您想要的效果(它减慢的速度)。您可能还想将 spinSpeed 乘以一个常数,以便获得更高的速度(我使用 40)。
此实现不包括跟随用户手指的滚轮。为此,您必须计算自上次触摸屏幕后用户手指移动了多少(对于 X 和 Y 坐标)。所以你需要 2 个坐标(lastTouchX、lastTouchY、newTouchX、newTouchY)。当你有坐标时,你可以计算通过这个坐标的线的斜率或梯度(斜率/梯度在这个公式中是 K:y = kx +n - 标准线公式)。然后你必须计算这两条线之间的交角并将其应用于车轮。像这样的东西:
tg = ((k1-k2)/(1+(k1*k2))); // k1 is the slope of the previous touch coordinate; k2 is the slope of the current touch coordinates
angle = Math.toDegrees(Math.atan(Math.abs(tg)));
wheel.angle += angle; // to implement spinning in the other way use wheel.angle -= angle;
希望你能明白