簡體   English   中英

更改所有實例的類屬性

[英]Changing class properties for all instances

我用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
    }
}

更改后,每個新的敵人實例都會受到影響。 有人可以告訴我如何實施此方法嗎?

建立清單

List<Enemy> MyEnemyList;
//of course you will have to add Enemies to this list somehow. Probably you already have a list or an array, wich behaves the same for this purpose.

foreach (Enemy E in MyEnemyList)
{
    E.enemyMoveSpeed += 1; //if you are incrementing the speed of everyone by 1.
    //or any other option you think is better
}

為新速度使用靜態屬性,並且在您的Enemy構造函數中,您可以設置instance屬性以匹配該屬性。

就像是

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

    public int Speed {get; set;}

    public Enemy()
    {
        Speed = NewEnemySpeed;
    }

}

在您的Game1.Update中,您可以執行此操作

Enemy.NewEnemySpeed = ..//some new speed

也許這樣的事情會幫助您。

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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM