我想在 iPhone 上使用 Cocos2d 来绘制一辆 2D 汽车,让它以自然的方式从左向右转向。
这是我尝试过的:
计算轮子的角度,然后将其移动到轮子指向的目标点。但这会产生一种非常不自然的感觉。汽车漂移了一半
之后,我开始研究如何获得汽车的转弯圆,这意味着我需要一些常数,比如轴距和汽车的宽度。
经过大量研究,我创建了以下代码:
float steerAngle = 30; // in degrees
float speed = 20;
float carWidth = 1.8f; // as in 1.8 meters
float wheelBase = 3.5f; // as in 3.5 meters
float x = (wheelBase / abs(tan(steerAngle)) + carWidth/ 2);
float wheelBaseHalf = wheelBase / 2;
float r = (float) sqrt(x * x + wheelBaseHalf * wheelBaseHalf);
float theta = speed * 1 / r;
if (steerAngle < 0.0f)
theta = theta * -1;
drawCircle(CGPointMake(carPosition.x - r, carPosition.y),
r, CC_DEGREES_TO_RADIANS(180), 50, NO);
前几行是我的常数。carPosition 是 CGPoint 类型。之后我尝试画一个圆圈来显示我的车的转弯圈,但它画的圆圈太小了。我可以让我的常数更大,让圆圈更大,但是我仍然需要知道如何在这个圆圈上移动我的精灵。
我尝试按照我在该主题上找到的.NET 教程进行操作,但我无法真正完全转换它,因为它使用了 Cocoa 不支持的矩阵。
有人可以给我一些关于如何开始的指示吗?我一直在寻找示例代码,但我找不到。
编辑在下面给出的评论之后, 我更正了我的常量,我的轴距现在是 50(精灵高 50 像素),我的 carWidth 是 30(精灵宽 30 像素)。
但是现在我有一个问题,当我的车第一次“滴答”时,旋转是正确的(还有位置),但之后的计算似乎是错误的。
转弯圆的中间移动而不是保持在原来的位置。我需要(我认为)是在汽车的每个角度我需要重新计算转弯圆的原始中心。我认为这很容易,因为我有半径和转弯角度,但我似乎无法弄清楚如何让汽车在一个漂亮的圆圈内移动。
还有更多指针吗?