如何让精灵随着速度的变化而变化
本文关键字:变化 速度 精灵 | 更新日期: 2023-09-27 18:31:37
好的,所以我是编码新手,我对 c# 有非常基本的了解,但我正在制作一个破砖游戏/砖块破坏者。但是,我遇到了这个问题,我需要在 10.0f 的速度后将球精灵从我的基本白球更改为我的另一个精灵。根据我在教程中看到的内容,我想出了这段代码
if (ballSpeed > 10f)
{
ballImage = Content.Load<Texture2D>("fireball");
}
我不知道这是否接近,但有什么想法的人吗?
编辑:当我去放球=新球(内容); 它带来了一个错误,它希望我将其更改为(内容:);
编辑2:感谢到目前为止试图提供帮助的每个人,但这不起作用 斯努克斯方法有效,除了最后(阅读上面的编辑)
其他人的方法是左右抛出异常。 更多想法
您仍然需要在 LoadContent()
或 Ball 构造函数中加载图像。因为您希望游戏在可能被使用之前将精灵放在其内存中。
因此,在 Ball.cs 构造函数中,您将加载精灵。
public Ball(ContentManager Content)
{
textureBall = Content.Load<Texture2D>("fireball");
...
}
您现在可以选择在 game2.cs 中执行逻辑,也可以在 ball 中创建一个单独的Draw
方法.cs您可以在主Draw
方法(位于 game2.cs 中)中调用该方法,这会给你带来更好的凝聚力。虽然你在小项目中并不真正要求,但最好从一开始就学习好习惯。
这就是球.cs中的新方法的样子。
public void Draw(GameTime gameTime, SpriteBatch spriteBatch)
{
...
if (ballSpeed > 10.0f)
{
spriteBatch.Begin();
spriteBatch.Draw(fireball, ballPosition, null, Color.White);
spriteBatch.End();
}
...
}
现在,如果您还没有,请在 game2 中声明球形游戏对象.cs
Ball ball = new Ball(Content);
现在,您只需在主游戏2.cs类的 Draw 循环中调用ball.Draw(gameTime, spriteBatch)
。围绕球的任何逻辑都将位于 Ball 中.cs
我唯一不清楚的是:"10帧的速度。我想你的意思是 10.0 浮动,因为以帧为单位测量速度将是一个完全不同的故事。最好找到一个适合您要求的速度浮动值,并以这种方式给球一个位置。
在 Draw() 或 Update() 期间加载内容可能会很有问题。最佳做法是先加载两个纹理,然后决定在运行时绘制哪个纹理
在 LoadContent() 中加载两个纹理
protected override void LoadContent()
{
//...
texture = Content.Load<Texture2D>("whiteball");
fireTexture = Content.Load<Texture2D>("fireball");
//...
}
根据球的速度在 Draw() 中绘制不同的纹理
protected override void Draw(GameTime gameTime)
{
spriteBatch.Begin();
// Draw things before ball ...
if (ballSpeed > 10f)
{
spriteBatch.Draw(fireTexture, ballPosition, null, Color.White);
}
else
{
spriteBatch.Draw(texture, ballPosition, null, Color.White);
}
// Draw the other things...
spriteBatch.End();
}
在您的情况下,您应该更改 Ball 的构造函数并传入对两个纹理的引用,例如
public Ball(Texture2D white, Texture2D fire, Rectangle screenBounds)
{
// ...
this.texture = white;
this.fireTexture = fire;
// ...
}
当然,您需要添加一个字段来存储引用
Texture2D fireTexture;