C#如何产生敌人并移动他们?

时间:2014-02-09 11:10:08

标签: c# timer point

我试图产生敌人并用计时器从左到右移动它我该怎么办?

示例:

int count;
timer (every 1 sec)
{
    Enemy somename+count = new Enemy();
    count++;
}

timer (every 0.001 sec)
{
    somename+count.x++;
}

3 个答案:

答案 0 :(得分:1)

如果这是一项任务,并启动并运行。只需使用Timer类。 你不会像你希望的那样获得1000hz(1ms)的高分辨率。

Documentation: Timer class

        var timerCreate = new Timer {Interval = 1000};
        timerCreate.Tick += delegate(object o, EventArgs args)
        {
            // create them 
        };

        var timerAction = new Timer {Interval = 50};
        timerAction.Tick += delegate(object o, EventArgs args)
        {
            // move them            
        };

答案 1 :(得分:0)

当您创建时,本地范围内的敌人,一旦您离开循环,就无法访​​问它们。相反,有一个列表,并将您新产生的敌人添加到此列表中。 保持两个线程来完成两个任务。 1)线程 - 1将添加产生的敌人添加添加敌人到我们的列表。 2)线程-2将移动我们的衍生列表中的敌人。 但是,由于out列表是两个线程之间的共享资源,因此始终使用“locks”访问列表。

答案 2 :(得分:0)

你的基本问题似乎缺乏一种方法来存储你所有敌人的引用。 Generics and collections为此类问题提供了解决方案。我将使用List<T>,这是最基本的此类集合。然而,还有许多其他的,每个都有自己的有用属性。

考虑一下:

private class Enemy
{
    public int position;
}

private List<Enemy> enemyList = new List<Enemy>();

private void timer1_Tick(object sender, EventArgs e)
{
    enemyList.Add(new Enemy());  
}

private void timer2_Tick(object sender, EventArgs e)
{
    foreach(Enemy enemy in enemyList)
    {
        enemy.position++;
    }
}

还要考虑每0.001秒更新一大堆可视对象是没用的,也是浪费的。一毫秒更新对应于1000fps。没有视频设备会快速更新,没有人能够快速看到。通常,对于实时更新,您应该在30-60fps之间更新。这相当于不超过约0.016秒(16毫秒)。