-1

最近のよくある質問 (回答済み; 助けてくれてどうもありがとう!) に続いて、もう少し先に進みましたが、別のレンガの壁にぶつかりました。私はC#にかなり慣れていないので、「'NullReferenceException was unhandled' Object reference not set to an instance of an object」というエラー メッセージを受け取っているようです。2秒ごとに1から50までゆっくりとカウントアップするある種のタイマーを作成しようとしています。私が使用しているコードは以下のとおりです。私が提供したものが十分でない場合は、お知らせください。編集します。

namespace RealTimeStrategyGame
{
    class ResourceCounter
    {
    Vector2 position;
    Texture2D sprite;
    Rectangle boundingbox;
    bool over, clicked;
    SpriteFont font;
    GameTime gameTime;
    int pSourceCount = 1;
    int limit = 50;
    float countDuration = 2f; //every  2s.
    float currentTime = 0f;



    public ResourceCounter(Vector2 pos, GameTime gameTime)
    {
        position = pos;
        over = false;
        clicked = false;
        gameTime = new GameTime();

        currentTime += (float)gameTime.ElapsedGameTime.TotalSeconds; //Time passed since last Update() 

        if (currentTime >= countDuration)
        {
            pSourceCount++;
            //any actions to perform
        }
        if (pSourceCount >= limit)
        {
            pSourceCount = 0;//Reset the counter;

        }


    }





}
}
4

1 に答える 1

3

GameTime gameTime をパラメーターとして関数に渡さないでください。したがって、初期化されていないため、gameTime にアクセスできません。

public ResourceCounter(Vector2 pos, GameTime gameTime)
{
    // stuff

     currentTime += (float)gameTime.ElapsedGameTime.TotalSeconds; //Time passed since last Update()

    // other stuff
}

編集:

コンストラクターに渡す場合は、一時変数を作成し、これをたとえば使用します

private GameTime gameTime;

次にコンストラクタで

this.gameTime = gameTime;

その後、初期化されます

于 2012-11-15T11:57:10.480 に答える