一旦物体与物体碰撞,加速/减慢物体的速度

时间:2015-04-10 18:40:52

标签: xna 2d collision

我目前正在制作2D平台游戏,我想知道我是否可以获得有关如何在物体与另一个物体碰撞后提高物体移动速度几秒的任何提示。

2 个答案:

答案 0 :(得分:0)

首先你需要一个名为velocity

的变量
Vector2 velocity = new Vector2(0.0f, 0.0f);

每次更新时,都会按速度更改精灵的矩形。

rectangle.X += (int)velocity.X;
rectangle.Y += (int)velocity.Y;

然后,你可以随意改变速度,它会改变速度。

//slow down
velocity.X -= 10;
velocity.Y -= 10;
//speed up
velocity.X += 10;
velocity.Y += 10;

您还可以单独更改力度的X和Y值,如下所示:

velocity.Y += 10;

这将使精灵在输入时向下移动。 希望这有帮助!如果您需要任何澄清,请告诉我!

答案 1 :(得分:0)

首先,您希望让它对碰撞做出反应,因此在您用于检测碰撞的方法中,添加对对象中新方法的调用。我们称之为SpeedUp()。看起来应该是这样的:

public void SpeedUp()
{
    _speedUpTimer = 0;
    IsSpedUp = true;
    _maxVelocity.X = SpedUpVelocity.X;
}

其中_speedUpTimer是对象类中的变量(或任何组件处理移动),_ maxVelocity是保持对象最高速度的任何变量,而SpedUpVelocity是保持更快速度的常量或变量。 IsSpedUp应初始化为false。您还需要一个常量或变量来保持您希望对象更快的时间,例如SpeedUpTime。

然后,在对象的Update()中添加行

_speedUpTimer += gameTime.ElapsedGameTime.Milliseconds;
if (IsSpedUp && _speedUpTimer > SpeedUpTime)
{
    _maxVelocity.X = UsualMaxVelocity.X;
    IsSpedUp = false;
}

UsualMaxVelocity将保持你的对象之前的非加速最大速度,你的对象将在计时器启动后返回使用。

当然,你总能让你的Y速度增加,但我假设你只想要水平速度。