我在form上画一个球的运动,就是使用timer画这个球的运动轨迹。但是如果我要画多个球体的运动轨迹呢?
是否是在timer中来一次循环,将每个球的运动轨迹都描述一下?如果是这样的话,那么几个还好,几十个,几百个绝对出问题,CPU都受不了。请问,有没有什么好点的办法,让我的界面上可以画出很多很多的球在运动(考虑碰撞)?

解决方案 »

  1.   

    ...是否是在timer中来一次循环,将每个球的运动轨迹都描述一下...
    是这样。
    int lastTick;
    void timer1_Tick(object sender, EventArgs e)
    {
       int elasped = Environment.TickCount - lastTick;
       lastTick = Environment.TickCount;   foreach( Ball ball in balls)
       {
          ball.Position += ball.Direction * elapsed / 1000.0f;
       }
       
       CollisionDetection();
       Invalidate();
    }
    如果碰撞判断算法作的好的话,不说几百个,成千上万都没问题。
      

  2.   

    用一个线程就行了,许多游戏的多个npc的运动也是在一个线程里面,cpu受的了,不提倡多线程