我有一个大炮,一个球和一个触发器。按下扳机时,球会施加线性冲击。
short int direction = [level.cannon cannon].rotation;
short int power = 24.8;
b2Vec2 force = b2Vec2(direction, power);
[level.ball body]->ApplyLinearImpulse(force, [level.ball body]->GetWorldCenter());
我的问题是,当按下扳机时,线性冲量被施加到球上,但是球实际上并没有从炮精的顶部出来。
这样做的原因(我认为)是因为我已经为大炮设置了锚点(0.5,0)。
cannon.anchorPoint = ccp(0.5, 0);
我已经发现,对于每加入5度的大炮,需要将2的倍数加到/减去旋转。
E.G。
0到55度
0到5从旋转中减去2 从旋转中减去4到5到10 从旋转中减去6到10到15 等
0至-55度
0到-5为旋转添加2 -5到-10加4旋转 -10到-15为旋转添加6
目前,我正在使用此代码来完成此任务。
if (_cannon.rotation == 0)
{
direction = _cannon.rotation;
} else if (_cannon.rotation >= 1 && _cannon.rotation < 6)
{
direction = _cannon.rotation - 2;
} else if (_cannon.rotation >= 6 && _cannon.rotation < 11)
{
direction = _cannon.rotation - 4;
} else if (_cannon.rotation >= 11 && _cannon.rotation < 16)
{
direction = _cannon.rotation - 6;
} else if (_cannon.rotation >= 16 && _cannon.rotation < 21)
{
direction = _cannon.rotation - 8;
} else if (_cannon.rotation >= 21 && _cannon.rotation < 26)
{
direction = _cannon.rotation - 10;
} else if (_cannon.rotation >= 26 && _cannon.rotation < 31)
{
direction = _cannon.rotation - 12;
} else if (_cannon.rotation >= 31 && _cannon.rotation < 36)
{
direction = _cannon.rotation - 14;
} else if (_cannon.rotation >= 36 && _cannon.rotation < 41)
{
direction = _cannon.rotation - 16;
} else if (_cannon.rotation >= 41 && _cannon.rotation < 46)
{
direction = _cannon.rotation - 18;
} else if (_cannon.rotation >= 46 && _cannon.rotation < 55)
{
direction = _cannon.rotation - 20;
} else if (_cannon.rotation <= -1 && _cannon.rotation > -6)
{
direction = _cannon.rotation + 2;
} else if (_cannon.rotation <= -6 && _cannon.rotation > -11)
{
direction = _cannon.rotation + 4;
} else if (_cannon.rotation <= -11 && _cannon.rotation > -16)
{
direction = _cannon.rotation + 6;
} else if (_cannon.rotation <= -16 && _cannon.rotation > -21)
{
direction = _cannon.rotation + 8;
} else if (_cannon.rotation <= -21 && _cannon.rotation > -26)
{
direction = _cannon.rotation + 10;
} else if (_cannon.rotation <= -26 && _cannon.rotation > -31)
{
direction = _cannon.rotation + 12;
} else if (_cannon.rotation <= -31 && _cannon.rotation > -36)
{
direction = _cannon.rotation + 14;
} else if (_cannon.rotation <= -36 && _cannon.rotation > -41)
{
direction = _cannon.rotation + 16;
} else if (_cannon.rotation <= -41 && _cannon.rotation > -46)
{
direction = _cannon.rotation + 18;
} else if (_cannon.rotation <= -46 && _cannon.rotation > -55)
{
direction = _cannon.rotation + 20;
}
我知道必须有一种更简单的方法来做到这一点,但我还在学习。有人可以帮助我吗?
答案 0 :(得分:0)
short int val, val2;
val = _cannon.rotation/5;
val2 = _cannon.rotation%5; //remainder of the division
//it will be zero when rotation is a multiple of 5.
if(val2 > 0)
val += 1;
direction = _cannon.rotation - 2*val;
我不确定这是不是你想要的,我也没有测试过。刚刚进行了一些心理测试,看它是否适用于您所放置的案例。
但我希望您可以将此作为缩小代码的起点。