2013-04-11 46 views
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); 

现在,所有我需要的是随着时间的推移慢慢地转动人物的方向的方式。我该怎么做?

回答

0

听起来像是你想从花栗鼠的坦克演示做这样的事情:

// 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'上使用cpflerpconst()来获得最大角速度。

0

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