JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Bitmaps Kollisionserkennung kollidieren mal und mal nicht...

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 21.11.2004, 22:56    Titel: Bitmaps Kollisionserkennung kollidieren mal und mal nicht... Antworten mit Zitat

Hallo,
ich habe ein kleines Progrämmchen gebastelt in dem zwei Bitmaps kollidieren sollen. Mal kollidieren diese und mal nicht.
Die Bitmap bewegt sich, die andere nicht. Wenn die sich Bewegende z.B. von links auf die andere trifft, kollidieren sie. Kommt sie nochmal gegen dann vielleicht nicht oder vielleicht doch. Das ist jedesmal anders.
Wenn sie von rechts kommt, genauso. Mal wird kollidiert und mal nicht. So wie sie gerade lustig sind.

Woran kann soetwas liegen??
Btw. Ich habe keine Werte o.ä. mit Zufallsgeneratoren versehen.

Das ist jedenfalls ziemlich ärgerlich!!! Evil or Very Mad

Gruß JkerryZ
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 21.11.2004, 22:58    Titel: Antworten mit Zitat

Am besten, du zeigst uns den wichtigen Code Wink
Sonst kann man so gut wie nix sagen.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 22.11.2004, 14:17    Titel: Antworten mit Zitat

Ok:

Code:
if (Collision_BMP(&ball, &mbl))     // mbl ist der linke Balken
{
   vx = 0;
   vx = -8;
}

if (Collision_BMP(&ball, &mbr))     // mbr ist der rechte Balken
{
   vx = 0;
   vx = 8;
}


vx ist die x-Koordinate des Balles. Der y Wert des Balles bleibt immer gleich. vx wird ganz oben im Quellcode mit 8 initialisiert.
Wenn dann der Ball gegen den Balken stößt, soll die x-Koordinate umgedreht werden.
Achso und der Ball fliegt Hauptsächlich an den unteren Enden der Balken durch. Seltener and den oberen Enden. Confused
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beni5
Super JLI'ler


Alter: 37
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 22.11.2004, 19:05    Titel: Antworten mit Zitat

Beachte dass du immer gleich nach dem Verschieben die Kollision prüfst. Wenn das wirklich so immer Zufällig ist könnte da auch was mit der Framerate sein, also wenn du mal was mit der Framerate verrechnet hast.

Was übergibst du für Variablen? 2D Vektoren oder Rect Strukturen? Beachte dass die Kollision mit dem Balken von rechts mit Balken.x+BalkenBreite berrechnet werden muss.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 22.11.2004, 19:20    Titel: Antworten mit Zitat

Falls Du Ahnung von Linearen Funktionen und Parabeln hast, kannst Du eine Kreis <-> Rechteck kollision bewerkstelligen, dann kommt etwas mehr Realismus rüber.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 22.11.2004, 19:31    Titel: Antworten mit Zitat

Der gepostete Code nütz irgendwie reichlich wenig. Die Collision_BMP sollte da schon aufschlussreicher aein, denn wenn der if Zweig manchmal aufgerfuen wird, ist er ja ok, aber die Funktion nicht, da sie manchmal eben nicht funktioniert.
Ich bin auch dafür, das es an der Framerate liegt, das also deine Kollisionsfunktion nicht mit allen bzw. verschiedene Frameraten zurechtkommt.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 22.11.2004, 21:27    Titel: Antworten mit Zitat

Also die Funktion Collision_BMP ist eine Funktion der Grafik-Engine. Man gibt die größe der beiden Bitmaps an (das wird beim Laden der Bitmaps eingestellt) und wenn sie sich dann überschneiden, kann irgendwas durch eine if-Abfrage in Gang gesetzt werden.

Eine Überlegung, die ich angestellt habe, war dass wenn der Ball von x = 0 kommt ja -8 gerechnet werden muss. Wenn er allerdings von x = Screen-width kommt, und es -8 gerechnet wird, der Ball einfach wie bisher weiter fliegt. Aus diesem Grunde habe ich einen zweiten Balken davorgesetzt. Jedoch fliegt der Ball auch da hindurch...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 22.11.2004, 21:43    Titel: Antworten mit Zitat

Fragen wir mal einfach: Was sagt der Debugger? Werden die Werte übergeben?
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 22.11.2004, 21:53    Titel: Antworten mit Zitat

Ist die bfrage Pixelgenau oder bloß auf Rechteckbasis? Evtl. könnte man nach gründlicher Recherche auch mal den Hersteller dieser Funktion befragen, da ich deinem Text irgendwie entnehmen, das du sie nicht selber gecodet hast.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 22.11.2004, 22:35    Titel: Antworten mit Zitat

Nein, ich habe die Engine nicht selber programmiert. Und die Kollisionserkennung ist wohl auf Rechtecksbasis. So siehts jedenfalls aus Very Happy

Ich habe einfach mal die Funktion aus der Engine rausgesucht. hier ist sie:
Code:
int Collision_BMPS(BMP_PTR bmp1, BMP_PTR bmp2)
{
// are these a valid bmps
if (!bmp1 || !bmp2)
   return(0);

// get the radi of each rect
int width1  = (bmp1->width>>1) - (bmp1->width>>3);
int height1 = (bmp1->height>>1) - (bmp1->height>>3);

int width2  = (bmp2->width>>1) - (bmp2->width>>3);
int height2 = (bmp2->height>>1) - (bmp2->height>>3);

// compute center of each rect
int cx1 = bmp1->x + width1;
int cy1 = bbmp1->y + height1;

int cx2 = bmp2->x + width2;
int cy2 = bmp2->y + height2;

// compute deltas
int dx = abs(cx2 - cx1);
int dy = abs(cy2 - cy1);

// test if rects overlap
if (dx < (width1+width2) && dy < (height1+height2))
   return(1);
else
// else no collision
return(0);

} // end Collision_BMPS


Vielleicht könnt ihr mir so besser helfen Surprised

mfg JkerryZ
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 22.11.2004, 22:54    Titel: Antworten mit Zitat

JkerryZ hat Folgendes geschrieben:
Code:
int Collision_BMPS(BMP_PTR bmp1, BMP_PTR bmp2)
{
//[...]
// get the radi of each rect
int width1  = (bmp1->width>>1) - (bmp1->width>>3);
int height1 = (bmp1->height>>1) - (bmp1->height>>3);

int width2  = (bmp2->width>>1) - (bmp2->width>>3);
int height2 = (bmp2->height>>1) - (bmp2->height>>3);
//[...]
} // end Collision_BMPS

Bist du dir sicher, dass das das gewünschte Ergebnis liefert? Wenn nicht, würde ich einfach mal ein bisschen debuggen.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 23.11.2004, 14:01    Titel: Antworten mit Zitat

also ansonsten hab ich mir mal ne kleine Funktion zum prüfen von Rehcteckkollisionen geschrieben. Die ist nicht perfekt, weil sie nur prüft, ob ein Eckpunkt im anderem Viereck liegt, aber meistens genau genug. Wenn du Lust hast könnt ich dir die ja mal übermitteln, du müstest ja an die Rechtecke der Bilder herankommen können.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 24.11.2004, 19:44    Titel: Antworten mit Zitat

Jonathan_Klein hat Folgendes geschrieben:
also ansonsten hab ich mir mal ne kleine Funktion zum prüfen von Rehcteckkollisionen geschrieben. Die ist nicht perfekt, weil sie nur prüft, ob ein Eckpunkt im anderem Viereck liegt, aber meistens genau genug. Wenn du Lust hast könnt ich dir die ja mal übermitteln, du müstest ja an die Rechtecke der Bilder herankommen können.


Das wäre sehr freundlich, vielleicht helfen sie mir ja...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum