花栗鼠物理:顺畅地旋转身体

时间:2013-04-11 00:00:29

标签: cocos2d-iphone game-physics chipmunk

在清理论坛后我无法找到这个。我想实现这样的东西......主角总是沿着它面向的方向移动。当玩家触摸屏幕时,角色将转向面向触摸位置,这将导致身体向不同方向移动。

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

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);

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

2 个答案:

答案 0 :(得分:0)

听起来你想从Chipmunk的坦克演示中做出类似的事情:

// 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);
通过相对于身体当前旋转变换方向向量,相对于身体的当前旋转计算

'turn'。该演示使用约束来平滑旋转(你可能也想在这里考虑),但你也可以在'turn'上使用cpflerpconst()以获得最大角速度。

答案 1 :(得分:0)

如何使用cpBodySetTorque设置物体扭矩以使其旋转/旋转?