所以我试图用C#和XNA绘制一些文本。我已经加载了SpriteFont
,代码中没有错误,也没有编译时警告或错误。执行期间不会抛出任何错误。
当我从我的主游戏类中绘制文本时,它工作正常。但是,我有一个单独的课,我试图从中抽取。我已经创建了一个它的实例,称为构造函数和它的Draw()
函数,但它仍然不起作用。
这是主要的游戏类(无论如何相关位):
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Turquoise);
if (!startScreen.hasRun)
{
// Works fine
spriteBatch.Begin();
spriteBatch.DrawString(spaceAge, "Score 0", new Vector2(50, 50), Color.Black);
spriteBatch.End();
// Fails to draw
startScreen.Draw(spriteBatch);
}
else
{
}
base.Draw(gameTime);
}
以下是引用的Draw()
实例的startScreen
函数(从另一个文件中的单独StartScreen
类创建):
public Boolean Draw(SpriteBatch spriteBatch)
{
if (this.hasRun == false)
{
spriteBatch.Begin();
spriteBatch.Draw(this.background, new Rectangle(0, 0, this.screenWidth, this.screenHeight), Color.White);
spriteBatch.DrawString(this.font, "DevBuild: 001", new Vector2(this.textStart, 50), Color.Black);
spriteBatch.End();
/* Console.WriteLine("hasRun: " + hasRun);
Console.WriteLine("screenWidth: " + Convert.ToString(screenWidth));
Console.WriteLine("screenHeight: " + Convert.ToString(screenHeight));
Console.WriteLine("dimensions.X: " + Convert.ToString(stringDimensions.X));
Console.WriteLine("dimensions.Y: " + Convert.ToString(stringDimensions.Y));
Console.WriteLine("textStart: " + Convert.ToString(textStart)); */
// All the logs above give the right output
this.hasRun = true;
Console.WriteLine("hasRun: " + hasRun);
return true;
}
else return false;
}
那么为什么,当这个函数有正确的屏幕坐标来绘制文本时((textStart, 50)
textStart
计算到800宽屏幕上的312),以及调用{{ 1}}是相同的格式,文本没有显示?
如果有必要,请随时提出更多代码。
(N.B。这里对DrawString
的调用也不起作用,图像没有被绘制 - 也许这是同一个问题?)
spriteBatch.Draw
和Begin()
,并在游戏的End()
函数中调用了startScreen.Draw()
Draw()
和Begin()
。仍然没有画出来。
答案 0 :(得分:1)
而不是让你的draw方法成为一个公共bool使它成为一个公共空白并且有一个变量bool然后它应该工作,你的代码应该是这样的:
bool drawn = false;
// defined at the top of your class so that the draw method doesn't need to be a bool
public Void Draw(SpriteBatch spriteBatch)
{
if (this.hasRun == false)
{
spriteBatch.Begin();
spriteBatch.Draw(this.background, new Rectangle(0, 0, this.screenWidth,this.screenHeight), Color.White);
spriteBatch.DrawString(this.font, "DevBuild: 001", new Vector2(this.textStart, 50), Color.Black);
spriteBatch.End();
/* Console.WriteLine("hasRun: " + hasRun);
Console.WriteLine("screenWidth: " + Convert.ToString(screenWidth));
Console.WriteLine("screenHeight: " + Convert.ToString(screenHeight));
Console.WriteLine("dimensions.X: " + Convert.ToString(stringDimensions.X));
Console.WriteLine("dimensions.Y: " + Convert.ToString(stringDimensions.Y));
Console.WriteLine("textStart: " + Convert.ToString(textStart)); */
// All the logs above give the right output
this.hasRun = true;
Console.WriteLine("hasRun: " + hasRun);
drawn = true;
}
else
{
drawn = false;
}
}
为什么你的Draw方法需要从你给它的代码中得到一个bool并不像你在任何地方使用过它