【发布时间】:2023-03-06 13:39:01
【问题描述】:
在将此问题标记为重复问题之前,请先阅读。
由此而来: How can I draw a sprite in it's own class?
关于上述问题,乔纳森帮助我做到了这一点,我解决了我原来的问题。但我想知道其他一些事情,但我没有足够的代表发表评论,所以我开始了一个新问题。
所以我有一个 XNA 游戏,我想在其中添加命中数(命中数是在某物损坏时出现一秒钟的小数字),但我正在努力解决它。我的EnemyTest 类有一个名为Damage 的int。当它们发生碰撞时,它会传递给Player 类,以便玩家知道需要多少生命值。但是我需要再次将它传递给HitNumbers 类以在DrawString 中显示该数字。
我的问题是我在HitNumbers 中有一个Draw() 方法,它采用SpriteBatch spriteBatch(用于显示DrawString() 和int Damage 的数字。但Player 类发送Damage值传递给主类,然后主类将它传递给SpriteBatch 到HitNumbers,它会抛出一个 NullReferenceException(显然 Spritebatch 为空,但是当它绘制所有其他精灵时它怎么可能为空呢?强>)
但我有点困惑,我知道有些不正确的东西正盯着我看,但我就是看不到。这就像把你的手指真正靠近你的眼睛并试图专注于它。也许我的大脑情绪不太好,但我希望有人能帮助我。
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);
}
【问题讨论】:
-
在代码中插入一个断点并单步执行,看看是否一切如你所愿。也许,
Player有一个不同的RPG实例。您也可以考虑将 sprite 批处理作为游戏服务。 -
感谢您的回复,我是 XNA 的初学者,所以我什至不确定游戏服务的作用或如何创建游戏服务。我稍后会研究它。我也会通过它。