好的,所以我是编码的新手我对c#有一个非常基本的了解,但我正在制作一个破砖游戏/砖块破坏者。但是,我有这个问题,我需要在10.0f的速度之后将球精灵从我的基本白球改为我的另一个精灵。根据我在教程中看到的内容,我想出了这段代码
if (ballSpeed > 10f)
{
ballImage = Content.Load<Texture2D>("fireball");
}
我不知道这是否接近,但人们有什么想法?
编辑:当我去放球球=新球(内容);它会出现错误,它要我将其更改为(content :);
edit2:感谢大家到目前为止试图提供帮助,但这不是有效的snooks方法,除了结束(阅读上面的编辑)
其他人的方法是左右抛出异常。更多的想法
答案 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;