0
我有一个大炮,一个球和一个触发器。当你按下触发器时,线性脉冲被施加到球上。线性脉冲 - Cocos2d/Objective-C/Box2d
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从旋转 5至10减去4从旋转从旋转 等
对于0 10〜15减6 - 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;
}
我知道必须有一个更简单的方法来做到这一点,但我仍然在学习。有人可以帮帮我吗?
大声笑...哇。非常感谢。我不能相信(约)40行代码变成了6,这对于正整数来说是完美的,但是我怎样才能解释负整数呢?例如。 0到-55 – Jonathan 2012-01-11 14:05:43
我是个白痴。我从来没有试过把旋转除以2直到我看到你的答案。我所要做的只是int r = cannon.rotation/2,它适用于正整数和负整数 – Jonathan 2012-01-11 14:30:30
我认为这适用于负整数,您只需检查val2的绝对值即可。如: if(abs(val2)> 0) – 2012-01-11 15:25:22