我正在制作Lular Lander游戏。我有一个Lander对象,为简单起见,我们想象它是简单的方形。
当我点击屏幕时,我将力施加到所述方格,默认为CGVectorMake(0,40)
这使得方块缓慢向上移动。
现在我想基于加速度计旋转精灵,我这样做:
// update method
CGFloat updatedAccelX = accelerX;
CGFloat updatedAccelY = -accelerY;
CGFloat angle = vectorAngle(CGPointMake(updatedAccelX, updatedAccelY)) - 1.61;
self.lander.zRotation = angle;
// end of update
static inline CGFloat vectorAngle(CGPoint v){
return atan2f(v.y, v.x);
}
现在我的旋转已经改变,我想要相对于新方向应用力。 所以,例如,如果我的Lander旋转是向右90度我想要应用(40,0)冲动。
如何计算应用于物理机构的新力矢量?
将Box2d添加为标签,因为它下面是Box2d physics。
答案 0 :(得分:2)
考虑到你有轮换
float rotation = lander.zRotation;
您可以按如下方式计算着陆器的矢量:
rotation += M_PI_2;
float intensity = 40.0;
CGVector newVec = CGVectorMake(intensity * cosf(rotation), intensity * sinf(rotation));
[lander.physicsBody applyForce:newVec];