我试图产生敌人并用计时器从左到右移动它我该怎么办?
示例:
int count;
timer (every 1 sec)
{
Enemy somename+count = new Enemy();
count++;
}
timer (every 0.001 sec)
{
somename+count.x++;
}
答案 0 :(得分:1)
如果这是一项任务,并启动并运行。只需使用Timer类。 你不会像你希望的那样获得1000hz(1ms)的高分辨率。
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毫秒)。