在将此标记为重复问题之前,请先阅读。
源于此: How can I draw a sprite in it's own class?
关于上述问题,乔纳森帮我做了这件事,我解决了原来的问题。但是我想知道其他的事情并且我没有足够的代表发表评论,所以我开始提出一个新问题。
所以我有一个XNA游戏,我想添加命中数字(命中数字是一些东西出现损坏时出现的小数字),但我正在努力解决这个问题。我的EnemyTest
类有一个名为Damage
的int。当它们发生碰撞时,它会被传递给Player
级,因此玩家知道健康起飞的程度。但是我需要再次将其传递给HitNumbers
类,以便在DrawString
中显示该数字。
我的问题是我在Draw()
中有一个HitNumbers
方法需要SpriteBatch spriteBatch
(DrawString()
和int Damage
来显示该数字。但是Player
类将Damage
值发送到主类,然后主类将其传递给它SpriteBatch
到HitNumbers
,这会抛出NullReferenceException(显然是Spritebatch)是null,但是当它绘制所有其他sprite时它怎么能为null?)
但我有点困惑,我知道有些不正确的事情让我盯着我,但我却无法看到它。这就像把手指放在眼睛附近并试图专注于它。也许我的大脑没有正确的心情,但我希望有人可以帮助我。
HitNumbers
public void Draw(SpriteBatch spriteBatch, int damage)
{
// print 'sbnull' to console if received spritebatch is null
if(spriteBatch == null)
{
Console.WriteLine("sbnull");
}
spriteBatch.DrawString(RPG.font, EnemyTest.Damage.ToString(), RPG.hn.PlayerPos, Color.Red);
}
Player
public void Damage(int damage)
{
Health -= damage;
main.showHitNumber(damage);
}
RPG
(主要类别)的相关部分public void showHitNumber(int damage)
{
hn.Draw(spriteBatch, damage);
}
答案 0 :(得分:1)
因为你有两个spritebatch,并且你正在传递它没有被初始化。
在此代码中:
public void showHitNumber(int damage)
{
hn.Draw(spriteBatch, damage);
}
将光标放在“spriteBatch”上并单击鼠标右键,然后选择“搜索所有引用”。这将显示您正在使用该spritebacth实例。
您将遇到两种情况: