0

わかりました、私は本当に奇妙な問題を抱えています。私は今、C#/MonoGame (Linux 上) で簡単なゲームを書いています。をプレイしようとしていSoundEffectます。私が呼び出すときPlay()(メソッドに適切にロードされていてもLoadContent())。NullReferenceExceptionメッセージで を投げていますObject Reference not set to an instance of an object

コードの構造は次のとおりです

public class MyGame : Game
{
    // ..
    private SoundEffect _sfx;

    public PingGame ()
    {
        // ...
    }

    protected override void Initialize ()
    {
        // ...
    }

    protected override void LoadContent ()
    {
        // ...

        // No errors here on loading it
        _sfx = Content.Load<SoundEffect>("noise.wav");
    }

    protected override void Update (GameTime gameTime)
    {
        // ...

        if (playSound)
        {
            // This is where the error is thrown
            _sfx.Play();
        }

        // ...
    }

    protected override void Draw (GameTime gameTime)
    {
        // ..
    }
}
4

3 に答える 3

0

私の盲目的な推測は次のとおりです(コードが含まれていないため):

  • GraphicsDeviceManagerコンストラクター内では作成されません (base.Initialize() が呼び出される前に作成する必要があります)
  • base.Initialize()または、メソッド内でメソッドを呼び出すのを忘れていますInitialize
于 2016-08-21T21:48:57.893 に答える
0

エラーメッセージはそれをすべて言います。Update (GameTime gameTime)オブジェクトを呼び出した時点_sfxでは初期化されていません。

ゲームをどのように設計したいかを知ることはできませんが、以下のようにコードを変更することでこれをテストでき、null 参照例外はもう発生しません。これは、コードを設計する方法ではないかもしれませんが、どこで問題が発生し、どのように修正するかがわかります。以下のコードを参照してください。

protected override void Update (GameTime gameTime)
{
    // ...

    if (playSound)
    {
        // This is where the error is thrown
        // THIS ENSURES WHEN THIS METHOD IS INVOKED _sfx is initialized.

        _sfx = Content.Load<SoundEffect>("noise.wav");
        if(_sfx != null){
          _sfx.Play();
        }
    }
    // ...
}
于 2016-08-21T21:30:35.423 に答える