[英]C# sprite movement pos-x double
我正在研究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);
}
如果我使用double,它会说:无法将double类型隐式转换为int
而且我无法将cloudX更改为double,因为spriteBatch函数仅需要int!
有什么帮助吗?
我的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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.