Bonjour,
Je travaille actuellement sur un moteur 2D et j'ai quelques problèmes à créer un système de collisions pixel perfect. En effet, j'aimerais, lorsque j'initialise chaque sprite, créer une map, un tableau bidimensionnel contenant le masque de collision du sprite (alpha = 0 et autres = 1).
Comment procéder avec directx pour récupérer tout ça ?
Laurent Gomila :
Je m'inspire beaucoup de tes sources et documents. Dans la source du jeu ZeGame, tu crées ta Collision Map comme ça :
Serait-il possible d'avoir le code de ta classe CColor ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 //////////////////////////////////////////////////////////// // PRIVATE // // Construit la matrice de collision à partir du canal // alpha de la texture // //////////////////////////////////////////////////////////// void CTexture::BuildCollisionTable() { // Redimensionnement de la matrice de collision TBoolMatrix(m_iWidth, TBoolArray(m_iHeight, false)).swap(m_CollisionTable); // Verrouillage de la texture D3DLOCKED_RECT Rect; m_Texture->LockRect(0, &Rect, NULL, D3DLOCK_READONLY); unsignedlong* iPixels = reinterpret_cast<unsignedlong*>(Rect.pBits); unsignedint iPitch = Rect.Pitch >> 2; // Construction de la matrice à partir du canal alpha for (int i = 0; i < m_iWidth; ++i) for (int j = 0; j < m_iHeight; ++j) { m_CollisionTable[i][j] = ((Loulou::CColor(iPixels[i + j * iPitch])).GetAlpha() != 0x00); } // Déverrouillage de la texture m_Texture->UnlockRect(0); }
Partager