Cocos2d iphone 花栗鼠物理:平稳旋转身体

Cocos2d iphone 花栗鼠物理:平稳旋转身体,cocos2d-iphone,game-physics,chipmunk,Cocos2d Iphone,Game Physics,Chipmunk,在清理论坛之后,我还没有找到这个。我想实现这样的东西。。。主角总是朝着它所面对的方向移动。当玩家触摸屏幕时,角色将转向该触摸位置,这将导致身体向不同方向移动 我可以让角色面对触摸位置,如下所示: CGPoint diff = ccpSub(location, self.position); CGFloat targetAngle = atan2f(diff.y, diff.x); self.body->a = targetAngle; 我想要这样的东西。获取角色所面对的当前角度。将该角度

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

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

CGPoint diff = ccpSub(location, self.position);
CGFloat targetAngle = atan2f(diff.y, diff.x);
self.body->a = targetAngle;
我想要这样的东西。获取角色所面对的当前角度。将该角度转换为单位向量。将该单位向量乘以最大速度,并将其应用于角色。这在理论上应该以恒定的速度将角色移动到它所面对的方向

这似乎给了我想要的:

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

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

听起来你想在花栗鼠的坦克演示中做这样的事情:

// 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);
通过变换相对于身体当前旋转的方向向量,相对于身体当前旋转计算“旋转”。演示使用了你可能想在这里考虑的约束来平滑旋转,但是你也可以在“回合”上使用CPFLRPNCOST来获得最大的角速度。

< P>使用CPBODYSETE扭矩设置目标扭矩使其旋转/旋转该如何?< /P>