如何让精灵随着速度的变化而变化

本文关键字:变化 速度 精灵 | 更新日期: 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;