恒定角色运动 - AS3

时间:2014-05-23 13:11:01

标签: actionscript-3 flash box2d flashdevelop

我(我是吗?)如何使用Box2D进行角色移动?我需要玩家与地板和其他人发生碰撞,但是当涉及向右或向左移动时,冲动不是很方便。至少不是我现在所拥有的。

private function update(e:Event):void {
if (keys[Keyboard.RIGHT]) {
  impulse_x = 3;
  impulse_y = 0;
  mainChar.ApplyImpulse(new b2Vec2(impulse_x, impulse_y), mainChar.GetPosition());
} else {
  impulse_x = 0;
  impulse_y = 0;
  mainChar.ApplyImpulse(new b2Vec2(impulse_x, impulse_y), mainChar.GetPosition());
  }
}

如何以稳定的速度移动角色,而不是上面的代码在按下右键时加速mainChar的每次更新。

编辑:

所以那里有这个代码,但它是关于c ++的我认为 - 我很感激翻译,因为它太小了,因为我不知道浮点数在做什么,语法对我来说有点混乱。

b2Vec2 vel = body->GetLinearVelocity();
float desiredVel = 0;
switch ( moveState )
{
  case MS_LEFT:  desiredVel = -5; break;
  case MS_STOP:  desiredVel =  0; break;
  case MS_RIGHT: desiredVel =  5; break;
}
float velChange = desiredVel - vel.x;
float impulse = body->GetMass() * velChange; //disregard time factor
body->ApplyLinearImpulse( b2Vec2(impulse,0), body->GetWorldCenter() );

在AS3中

switch (moveState)
    {
        case "RIGHT": desiredVel = 1.4; break;
        case "LEFT": desiredVel = -1.4; break;
        case "STOP": desiredVel = 0; break;
    }

velChange = desiredVel - mainChar.GetLinearVelocity().x;
impulse.x = velChange;
impulse.y = 0.0;
mainChar.ApplyImpulse(impulse, mainChar.GetWorldCenter());

(我应该删除帖子的初始部分并留下答案吗?)

1 个答案:

答案 0 :(得分:0)

你应该使用武力。这里有很好的描述:http://www.iforce2d.net/b2dtut/forces