当使用AS3和Box2D创建一个玩家时,我们可以让玩家移动但是我们无法让玩家移动,就像它只是用AS3移动一样,例如x ++;而不是ApplyImpulse(新的b2Vec2(1,0),GetWorldCenter())。我们怎样才能让玩家更像闪存一样移动,我们也尝试过不能正常工作的ApplyForce和SetPosition!玩家非常漂浮或者不会立即响应控件,任何建议都会非常感激!
如果出现问题,请解释一下而不是停下来?
答案 0 :(得分:1)
为什么不尝试使用GetLinerVelocity,然后尝试使用ApplyImpulse,它可以使用这个属性,当然我之前使用正确的键创建了两个函数...我的意思是:
player_normal只是休息中的玩家(对象)。当然,player_max_speed和player_speed只是我喜欢移动的其他礼物......
player_speed = 2;
player_max_speed = 4;
player_normal = new b2Vec2(0, 0);
这是功能Main。 speed和max_speed将它们设置为Number var,而法线只是b2Vec2。
当您按下然后向上按键时,这是关键功能:
private function apreto(e:KeyboardEvent):void
{
switch (e.keyCode)
{
case 37:
left = true;
break;
}
private function suelto(e:KeyboardEvent):void
{
switch (e.keyCode)
{
case 37:
left = false;
break;
}
当然“左”是一个布尔值。我觉得很容易。你必须对每个键(右,上,下)做同样的事情,这取决于你想要的键。例如,数字37 =键盘中剩余的键。
然后是让玩家感动的代码(在更新中):
if (player_normal.x >= 0)
{
if (left)
{
if (player.GetLinearVelocity().x > -player_max_speed)
{
player.ApplyImpulse(new b2Vec2( -player_speed, 0), player.GetWorldCenter());
}
}
}
我希望它可以帮到你...如果不让我知道,我还有另一种方式可以更轻松。 如果我能回答你的任何问题,我将非常感谢你的帮助。