SpriteBatch传递后变为null? /在不同的类中绘制精灵?

时间:2014-07-19 15:25:42

标签: c# .net xna draw xna-4.0

在将此标记为重复问题之前,请先阅读。

源于此: How can I draw a sprite in it's own class?

关于上述问题,乔纳森帮我做了这件事,我解决了原来的问题。但是我想知道其他的事情并且我没有足够的代表发表评论,所以我开始提出一个新问题。


所以我有一个XNA游戏,我想添加命中数字(命中数字是一些东西出现损坏时出现的小数字),但我正在努力解决这个问题。我的EnemyTest类有一个名为Damage的int。当它们发生碰撞时,它会被传递给Player级,因此玩家知道健康起飞的程度。但是我需要再次将其传递给HitNumbers类,以便在DrawString中显示该数字。

我的问题是我在Draw()中有一个HitNumbers方法需要SpriteBatch spriteBatchDrawString()int Damage来显示该数字。但是Player类将Damage值发送到主类,然后主类将其传递给它SpriteBatchHitNumbers,这会抛出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);
}

1 个答案:

答案 0 :(得分:1)

因为你有两个spritebatch,并且你正在传递它没有被初始化。

在此代码中:

public void showHitNumber(int damage)
{
    hn.Draw(spriteBatch, damage);
}

将光标放在“spriteBatch”上并单击鼠标右键,然后选择“搜索所有引用”。这将显示您正在使用该spritebacth实例。

您将遇到两种情况:

  1. 该spritebatch实例从未初始化。
  2. 已初始化,但初始化它的方法永远不会被调用。