如何以速度

时间:2016-01-24 18:04:18

标签: c# xna monogame

好的,所以我是编码的新手我对c#有一个非常基本的了解,但我正在制作一个破砖游戏/砖块破坏者。但是,我有这个问题,我需要在10.0f的速度之后将球精灵从我的基本白球改为我的另一个精灵。根据我在教程中看到的内容,我想出了这段代码

if (ballSpeed > 10f)
    {
      ballImage = Content.Load<Texture2D>("fireball");
     }

我不知道这是否接近,但人们有什么想法?

编辑:当我去放球球=新球(内容);它会出现错误,它要我将其更改为(content :);

edit2:感谢大家到目前为止试图提供帮助,但这不是有效的snooks方法,除了结束(阅读上面的编辑)

其他人的方法是左右抛出异常。更多的想法

2 个答案:

答案 0 :(得分:1)

您仍然需要在LoadContent()或Ball构造函数中加载图像。因为你希望游戏在可能被使用之前将精灵放在其内存中。

所以在Ball.cs构造函数中,你将加载精灵。

public Ball(ContentManager Content)
{
    textureBall = Content.Load<Texture2D>("fireball"); 
    ...
}

您现在可以选择在game2.cs中执行逻辑,或者您可以在ball.cs中创建一个单独的Draw方法,您可以在主Draw方法中调用该方法(位于game2中)。 cs),它会给你一些更好的cohesion。虽然你不是真的需要在小项目中,但从一开始就学习好习惯会更好。

所以这就是ball.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);

现在你可以在主game2.cs类的Draw循环中调用ball.Draw(gameTime, spriteBatch)。围绕球的任何逻辑都将位于Ball.cs

我唯一不清楚的是:&#34;速度为10帧。&#34;我认为你的意思是浮动,因为测量帧速度将是一个完全不同的故事。最好找到一个适合你要求的速度浮动值,并给球定位。

答案 1 :(得分:1)

在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;