Collisione di oggetti in un gioco

AS3, Flash, Flex oscar Commenta l'articolo

Far collidere due oggetti è alla base della programmazione dei giochi e di norma si cerca di far collidere degli oggetti geometrici semplici come i cerchi o i quadrati.

Facendo una prova in as3 ho notato che far collidere due cerchi è più performante che far collidere due quadrati, a tal proposito potete ripete l’esperimento copiando i seguenti codici:
Quadrato:

var i:int = 0;
var x1:int = 44, y1:int = -12, w1:int = 100, h1:int = 100;
var x2:int = -20, y2:int = 27, w2:int = 100, h2:int = 100;

var time1 = new Date();
for(i = 0; i < 10000000; i ++)
{
   if(x1 + w1 > x2 && x1 < x2 + w2 && y1 + h1 > y2 && y1 < y2 + h2)
   {
      // Collision!
   }
}
var time2 = new Date();
trace(time2 - time1);

Cerchio:

var i:int = 0;
var x1:int = -68, y1:int = 26, r1:int = 100;
var x2:int = 151, y2:int = -44, r2:int = 60;

var time1 = new Date();
for(i = 0; i < 10000000; i ++)
{
   if((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1) < (r1 + r2) * (r1 + r2))
   {
      // Collision!
   }
}
var time2 = new Date();
trace(time2 - time1);

Una piccola nota è quella di separare gli "if" per migliorare le prestazioni:

var i:int = 0;
var x1:int = 44, y1:int = -12, w1:int = 100, h1:int = 100;
var x2:int = -20, y2:int = 27, w2:int = 100, h2:int = 100;

var time1 = new Date();
for(i = 0; i < 10000000; i ++)
{
   if(x1 + w1 > x2)
   {
      if(x1 < x2 + w2)
      {
         if(y1 + h1 > y2)
         {
            if(y1 < y2 + h2)
            {
               // Collision!
            }
         }
      }
   }
}
var time2 = new Date();
trace(time2 - time1);

Scrivi un Commento

Home | Graffiti e Disegni | Educazione | Chi siamo | Blog | Progetti | Contatti
RSS Feed Comments RSS Accedi