尝试传递Object时出现System.NullReferenceException

时间:2014-10-09 11:20:20

标签: c# object xna parameter-passing

对于练习,我们必须制作俄罗斯方块,我们获得了一个模板项目,可以在Visual Studio中使用(使用XNA)。现在我们得到了它的要点,我正试图引入声音。但是,soundengine声明在GameWorld类中,但实际游戏事件在TetrisGrid中触发,同样是一个单独的类。

现在一个解决方案是将它的整个初始化移动到TetrisGrid对象,但我们有时也希望在GameWorld中播放声音,例如在菜单屏幕中。同时拥有音乐控件也会更加实用,因为TetrisGrid可能会在失去/赢得比赛后重置。

soundengine从这里产生:

namespace tetrisXNA
{
    class SfxHelper
    {
        private SoundEffect[] sfxLibrary;
        public SfxHelper(ContentManager Content)
        {
            this.sfxLibrary = new SoundEffect[2];
            this.sfxLibrary[0] = Content.Load<SoundEffect>("pop");
            this.sfxLibrary[1] = Content.Load<SoundEffect>("latch");
        }

        public void popRow()
        {
            this.sfxLibrary[0].Play();
        }

        public void latchBlock()
        {
            this.sfxLibrary[1].Play();
        }
    }
}

在初始化它的对象中使用它时可以正常工作,但是尝试将它传递给tetrisgrid对象(使用ref和normal)。所有类都在同一名称空间内。

public GameWorld(int width, int height, ContentManager Content)
        {
            [...]
            this.soundengine = new SfxHelper(Content);
        }

分配了soundengine的构造函数(在gameworld中)。

tetrisGrid对象构造函数:

public TetrisGrid(Texture2D texture, SfxHelper soundEngine)
        {
...
            this.random = new Random(System.DateTime.Now.Millisecond);
            this.soundengine = soundEngine;
...
        }

soundengine在上面声明为public SfxHelper soundengine;。那么如何让不同对象/层可以访问它的相同实例,如何正确传递它?我已经尝试过调查静态修改器,但我还没有正确实现,因为它确实适合这项工作,因为实际上只需要一个声音引擎。

0 个答案:

没有答案