Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

DarthB

Treue Seele

  • »DarthB« ist der Autor dieses Themas

Beiträge: 265

Beruf: Schüler

  • Private Nachricht senden

1

29.12.2002, 04:25

2D - Pixelgenaue Kollisions Abfrage

Hi!
Also ich hab ne Frage...
bei DX mit Hilfe von D3DXSprite rendere ich 2D Sprites.... (soll nen 2D-Weltraum-Shooter werden) ich mache ne Pixelgenaue Kollisions Abfrage aber funzt nicht! Erst dachte ich Logik Fehler! Aber ist nicht! Irgendwie weiß ich, wie doof das jetzt klingen mag, den Wert des Colorkeys nicht aufjedenfall ist er nicht so wie ich ihn bei D3DXCreateTexturFromFileEx angegeben hab! Das ist er nämlich Lila D3DCOLOR_XRGB(255,0,255) bzw. 0xFFFF00FF;
Ich locke die Textur mit LockRect und mache dann if Abfragen! Und irgendwie ist jeder Wert in den Texturen != Colorkey

Mal nen Code beispiel:

Quellcode

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
28
29
// Locken ect. (Speicher ADD holen)
    lpTexOne->LockRect(0, &d3dlockrect, NULL, D3DLOCK_READONLY);
    Zeilenbreite1   = (int)(d3dlockrect.Pitch>>1);
    VRam1           = (USHORT*)d3dlockrect.pBits;

    lpTexTwo->LockRect(0, &d3dlockrect, NULL, D3DLOCK_READONLY);
    Zeilenbreite2   = (int)(d3dlockrect.Pitch>>1);
    VRam2           = (USHORT*)d3dlockrect.pBits;


    // Schleife durchlaufen (Überprüfung ob sich 2 Pixel überlappen die nicht transparent sind).
    for(i=0; i<Breite; i++)
    {
        for(j=0; j<Hoehe; j++)
        {
            if( xOffset1 + i < xg1 && yOffset1 + j < yg1 &&
                xOffset2 + i < yg2 && yOffset2 + j < yg2)   // Noch im zutestenden Bereich?
            {
                // Sind die Beiden Pixel != Colorkey dann ist es collide!
                if( VRam1[rOne.left + xOffset1 + i +(rOne.top + yOffset1 + j) * Zeilenbreite1] != Colorkey &&
                    VRam2[rTwo.left + xOffset2 + i +(rTwo.top + yOffset2 + j) * Zeilenbreite2] != Colorkey)
                {
                    lpTexOne->UnlockRect(0);
                    lpTexTwo->UnlockRect(0);
                    return true;
                }
            }
        }
    }


Ich denke mal das es daran liegt das D3DCOLOR ja ein DWORD ist und das man auf 16Bit Texturen USHORT benutzen muss bzw soll!

Wäre für Hilfe echt Dankbar!
Ciao DarthB

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

29.12.2002, 10:31

Also, erstmal Willkommen im Forum!
Wenn Du beim Laden einer Textur mit den D3DX-Funktionen einen Color-Key angibst, dann bedeutet das, dass die Ladefunktion diese Farbe in der Textur durch transparentes Schwarz ersetzt, also durch die Farbe 0. Von daher ist es kein Wunder, dass Du in der Textur nirgendwo mehr die Color-Key-Farbe findest.

DarthB

Treue Seele

  • »DarthB« ist der Autor dieses Themas

Beiträge: 265

Beruf: Schüler

  • Private Nachricht senden

3

29.12.2002, 14:26

Danke! ;)
Hehe! Und doch die Pixelgenaue Kollsion funzt! *freu*
Bist du eigentlich im ICQ auch online? Ich wollte dich mal was spezielles fragen zu deinem Buch ist eine etwas kritische Frage!

MFG DarthB

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

29.12.2002, 15:37

Meine ICQ-Nummer steht in meinem Profil: 49048683

Werbeanzeige