0

XNA ゲームに単純なカウンターを実装しようとしています。これは十分に簡単だと思いました。次のコードがあります。

    elapsed = gameTime.ElapsedGameTime.TotalMilliseconds;
        timer -= (int)elapsed;

        if (timer <= 0)
        {
            timer = 10;   //Reset Timer
        }

しかし、経過時間は 0.0 から変化しません。ここで明らかな何かが欠けていますか?私はそうだと思います。私は gameTime を上部で宣言し、通常どおり初期化しました。

尋ねられたように、ここにもう少しコードがあります:

public class Game1 : Microsoft.Xna.Framework.Game {

private GameTime zombieTime; 



    public Game1()
    {
        zombieTime = new GameTime();
        // Other (unrelated) stuff here
    }



    protected void AddZombie()
    {
        elapsed = zombieTime.ElapsedGameTime.TotalMilliseconds;
        timer -= (int)elapsed;

        if (timer <= 0)
        {
            timer = 10;   //Reset Timer
            Zombie zombie = new Zombie(ScreenWidth, ScreenHeight, random);
            zombie.LoadContent(this.Content, "ZombieSprites/ZombieLeft1");
            zombies.Insert(0, zombie);
        }
     }

    protected void Update()
    {
        AddZombie();
        // Other game update stuff here
    }
}

申し訳ありませんが、元のコード スニペットで十分だと思いました。人々がタイマーの例を投稿し、上記で使用した方法を使用したいくつかのページをオンラインで読みました。経過時間が常に 0 になるように更新が十分に高速であることについて、ここで行われたコメントのいくつかを理解しています。

4

2 に答える 2

5

正しい GameTime を使用していません。zombieTime は何によっても更新されることはないため、常にゼロになります。使用する GameTime は、すでに Update() 関数に渡されています。

それを行う正しい方法は次のようになります。

protected void AddZombie(GameTime gameTime)
{
    float elapsed = gameTime.ElapsedGameTime.TotalMilliseconds;
    timer -= (int)elapsed;

    if (timer <= 0)
    {
        timer = 10;   //Reset Timer
        // Rest of stuff goes here
    }
}

protected void Update(GameTime gameTime)
{
    AddZombie(gameTime);
}
于 2013-02-05T19:29:06.787 に答える
2

http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.gametime_members.aspx

ゲームの経過時間は、最後の更新からの時間です。累積ゲーム時間の合計ゲーム時間...

したがって、表示されていない多くの作業を行っていない限り、更新にまったく時間がかからないため、値 0 は非常に賢明です

そこにスリープステートメントを押し込んで、経過時間が上がるかどうかを確認してください。

于 2013-02-05T19:16:21.613 に答える