我想在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 tutorial我在这个主题上找到了,但是我不能完全转换它,因为它使用了Matrixes,它不被Cocoa支持。
有人可以给我几个关于如何开始这个指针吗?我一直在寻找代码示例,但我找不到任何代码。
EDIT下面 我纠正我的常数给出的注释后,我的轴距现在为50(子画面是50像素高),我的carWidth为30(子画面在宽度30PX)。
但是现在我遇到了这样的问题,即当我的赛车第一次“嘀嗒”时,旋转是正确的(也是位置),但在此之后计算看起来是错误的。
转动圈的中间移动而不是保持在原来的位置。我需要的(我认为)是在汽车的每个角度,我需要重新计算转弯圆圈的原始中心。我认为这很容易,因为我有半径和转弯角度,但我似乎无法弄清楚如何让赛车保持良好的循环。
任何更多的指针?
矩阵只是多维数组。你应该能够适应/工作的参考代码。 – EightyEight 2009-07-10 21:41:01