Collisions 2D en DirectX 9

Collisions 2D en DirectX 9 - C#/.NET managed - Programmation

Marsh Posté le 13-01-2006 à 20:30:36    

Bonjour à tous.
Je code un petit shoot them up en 2D sous DirectX 9 et j'ai un problème pour gérer les collisions.
En fait je voudrais gérer les collisions par rapport au pixel, en effet, sur les bords de mes textures de vaisseau se trouvent des pixels transparent et je ne veux pas qu'il soient comptés lors de la détection de collision. Pour cela, j'ai besoin de connaitre la couleur du pixel d'une texture en fonction de ses coordonnées sur cette texture. Et mon problème c'est que je n'arrive pas à trouver comment la récupérer.  
Si quelqu'un pouvait éclairer ma lanterne ...
Merci d'avance ;)

Reply

Marsh Posté le 13-01-2006 à 20:30:36   

Reply

Marsh Posté le 13-01-2006 à 22:40:17    

il faut pouvoir locker la surface du vaisseau, ce qui te permet de la manipuler...

Reply

Marsh Posté le 13-01-2006 à 22:40:24    

enfin je supposes...

Reply

Marsh Posté le 13-01-2006 à 23:34:07    

Ouais ça y a des chances qu'il faille locker la surface. SEulement locker la surface ne donne pas la couleur des pixel. Ou du moins je ne vois pas comment. S'il suffit d'un lock je souhaiterais voir un source qui l'utilise. Merci d'avance ;)

Reply

Marsh Posté le 14-01-2006 à 13:11:08    

bin tu lock, tu connais le format de surface, t'adresses ton pixel...

Reply

Marsh Posté le 14-01-2006 à 13:58:17    

Bon voici mon code, qui ne marche pas.
J'ai une ArgumentException sur la ligne 15 et comme détails : {"Must provide at least one rank."}
 

Code :
  1. public static bool test(cSprite p_Sprite1, cSprite p_Sprite2)
  2.         {
  3.             bool bColl = false;
  4.             Rectangle Rect1 = new Rectangle((int)p_Sprite1.fPosX, (int)p_Sprite1.fPosY, (int)p_Sprite1.Image.iWidth, (int)p_Sprite1.Image.iHeight);
  5.             Rectangle Rect2 = new Rectangle((int)p_Sprite2.fPosX, (int)p_Sprite2.fPosY, (int)p_Sprite2.Image.iWidth, (int)p_Sprite2.Image.iHeight);
  6.            
  7.             Rect1.Intersect(Rect2);
  8.             Rectangle RectU = new Rectangle(Rect1.X, Rect1.Y, Rect1.Width, Rect1.Height);
  9.             int[] s1, s2;
  10.             if(!Rect1.IsEmpty)
  11.             {
  12.                 Rect1.X = (int)p_Sprite1.fPosX - RectU.X;
  13.                 Rect1.Y = (int)p_Sprite1.fPosY - RectU.Y;
  14.                 int [] size = {Rect2.Width, Rect2.Height};
  15.                 s1 = (int[])p_Sprite1.Image.Texture.LockRectangle(typeof(int[]), 0, Rect1, LockFlags.ReadOnly);
  16.                 p_Sprite1.Image.Texture.UnlockRectangle(0);
  17.                 Rect2.X = (int)p_Sprite2.fPosX - RectU.X;
  18.                 Rect2.Y = (int)p_Sprite2.fPosY - RectU.Y;
  19.                 s2 = (int[])p_Sprite2.Image.Texture.LockRectangle(typeof(int[]), 0, Rect2, LockFlags.ReadOnly);
  20.                 p_Sprite2.Image.Texture.UnlockRectangle(0);
  21.                 int i = 0, j = 0;
  22.                 while (!bColl && i < s1.GetLength(0))
  23.                 {
  24.                     while (!bColl && j < s2.GetLength(1))
  25.                     {
  26.                         if (s1[j * Rect1.Width + i] != Color.Transparent.ToArgb() && s2[j * Rect1.Width + i] != Color.Transparent.ToArgb())
  27.                             bColl = true;
  28.                         j++;
  29.                     }
  30.                     i++;
  31.                 }
  32.             }
  33.             return bColl;
  34.         }


 
Si quelqu'un comprend ...

Reply

Marsh Posté le 15-01-2006 à 14:03:17    

A l'aide ...
 

Reply

Marsh Posté le 15-01-2006 à 14:36:33    

là je peux plus trop t'aider...
tu peux aller voir sur gamedev...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed