2013-04-11 78 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來設置物體扭矩以使其旋轉/旋轉?