1

Microsoft XNA で簡単なゲームを作成しておりEnemy.cs、プロパティで構成されるクラスがありますenemyMoveSpeed

public class Enemy
{
    float enemyMoveSpeed { get; set }
}

更新セクションではGame1.cs、次のプロパティを常に変更するタイマーを配置しました。

protected override void Update(GameTime gameTime)
{
    float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;
    timer -= elapsed;
    if (timer < 0)
    {
        foreach (Enemy E in enemies)
        {
            E.enemyMoveSpeed += 1;
        }

        timer = TIMER; //Reset Timer
    }
}

Enemy のすべての新しいインスタンスは、変更後に影響を受けます。誰かがこれを実装する方法を教えてもらえますか?

4

3 に答える 3

1

新しい速度には静的プロパティを使用し、Enemy コンストラクターでこれに一致するようにインスタンス プロパティを設定できます。

何かのようなもの

class Enemy
{
    public static int NewEnemySpeed { get; set;}

    public int Speed {get; set;}

    public Enemy()
    {
        Speed = NewEnemySpeed;
    }

}

Game1.Update から、これを行うことができます

Enemy.NewEnemySpeed = ..//some new speed
于 2013-06-06T13:12:20.467 に答える
0

たぶん、このようなものがあなたを助けるでしょう。

public class Enemy
{
    public Enemy()
    {
        EnemyState = new EnemyState { IsDirty = true, Position = Vector2.Zero };
        Speed = 3.0f;
    }

    public EnemyState State { get; set }
    public float Speed { get; set; }
}

public class EnemyState
{
    public bool IsDirty { get; set }
    public Vector2 Position { get; set; }
}

protected override void Update(GameTime gameTime)
{
    float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;

    // If should spawn enemy
    // var enemy = new Enemy();
    // enemy.State.Position = // TODO insert starting position
    // enemies.Add(enemy);
    // Find all enemies that should be moved
    // Set IsDirty = true;

    // Move each enemy that IsDirty
    timer -= elapsed;
    if (timer < 0)
    {
        foreach (Enemy enemy in enemies.Where(e => e.State.IsDirty))
        {
            enemy.State.Position.X += enemy.Speed;
            enemy.State.IsDirty = false;
        }

        timer = TIMER; //Reset Timer
    }
}
于 2013-06-06T13:39:28.123 に答える