1

翻遍论坛后没找到这个。我想实现这样的东西......主角总是朝着它所面对的方向移动。当玩家触摸屏幕时,角色会转向该触摸位置,这会导致身体朝不同的方向移动。

我可以让角色面对触摸位置,如下所示:

CGPoint diff = ccpSub(location, self.position);
CGFloat targetAngle = atan2f(diff.y, diff.x);
self.body->a = targetAngle;

我想要一些类似的东西。获取角色当前面对的角度。将该角度转换为单位向量。将该单位向量乘以 max_velocity,并将其应用于角色。这应该(理论上)将角色以恒定速度朝其面对的方向移动?

这似乎给了我想要的东西:

cpVect rotatedVel = cpvmult(ccpForAngle(self.body->a), MAX_VELOCITY);
self.body->v = cpvlerpconst(self.body->v, rotatedVel, ACCELERATION * dt);

现在我需要的只是一种随时间缓慢旋转角色方向的方法。我该怎么做?

4

2 回答 2

0

听起来你想从 Chipmunk 的 Tank 演示中做这样的事情:

// turn the control body based on the angle relative to the actual body
cpVect mouseDelta = cpvsub(ChipmunkDemoMouse, cpBodyGetPos(tankBody));
cpFloat turn = cpvtoangle(cpvunrotate(cpBodyGetRot(tankBody), mouseDelta));
cpBodySetAngle(tankControlBody, cpBodyGetAngle(tankBody) - turn);

通过转换相对于身体当前旋转的方向向量,相对于身体的当前旋转计算“转”。该演示使用约束(您可能也想在这里考虑)平滑旋转,但您也可以在“转弯”上使用 cpflerpconst() 来获得最大角速度。

于 2013-04-30T18:50:49.553 回答
0

使用cpBodySetTorque设置对象扭矩以使其旋转/旋转怎么样?

于 2015-12-24T06:47:57.443 回答