1

我正在做一个 XNA 项目。我画了一个背景(天际线),我想从左到右移动一朵云。每当我使用 int 时这都有效,但是运动太快了,所以我想使用双精度。是否可以用 double 移动 x 上的云?

public int GetRandomSpeedX() // Random speed pos-x
{            
        int speedX = r.Next(1, 100);
        return speedX;
}

protected override void Update(GameTime gameTime)
{
        if (cloudX <= 500)
        {
            cloudX += GetRandomSpeedX();
        }
        else
        {
            cloudX = 0;                
        }

        base.Update(gameTime);
}

如果我使用双精度,它会说:不能将双精度类型隐式转换为 int

而且我不能将 cloudX 更改为 double,因为 spriteBatch 函数只需要 int !

有什么帮助吗?

4

1 回答 1

1

我的 XNA 可能有点生疏了,但您需要两个变量用于 Cloud、Position 和 Speed。您将更改每次更新的速度以增加云的位置。

这是一个基本的实现。您需要在游戏初始化中设置初始位置和速度。

private float NextRandomFloat(double max, double min)
{
    var number = r.NextDouble() * (max - min) + min;

    return (float) number;
}

private Vector2 GetRandomSpeed(float dx, float dy)
{
    var speedX = NextRandomFloat(2.0, 0.5) * dx;
    var speedY = NextRandomFloat(2.0, 0.5) * dy;
    var vector = new Vector2(speedX, speedY);

    return vector;
}

private Vector2 cloudSpeed;
private Vector2 cloudPosition;

protected override void Update(GameTime gameTime)
{
        if (cloudPosition.X <= 500)
        {
            // Tinker with the dx to manage acceleration
            // Consider using MathHelper.Clamp for a maximum speed.
            cloudSpeed += GetRandomSpeed(1.0f, 0);
        }
        else
        {
            cloudSpeed.X = 0;
        }

        cloudPosition += cloudSpeed;

        base.Update(gameTime);
}

private void DrawCloud()
{
    spriteBatch.Draw(cloudTexture, cloudPosition, Color.White);
}
于 2013-05-17T13:00:24.617 回答