B2D : Kollisionsprobleme -_-

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

klausklapper

Betreff: B2D : Kollisionsprobleme -_-

BeitragDi, Jul 17, 2007 22:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, hallöchen erstmal. Ich habe zwei Spieler erstellt, mit dieser schönen Steuerung:

Code: [AUSKLAPPEN]
If KeyDown(203) Then winkel=winkel-1
If KeyDown(205) Then winkel=winkel+1

If KeyDown(30) Then p2winkel=p2winkel-1
If KeyDown(32) Then p2winkel=p2winkel+1

If KeyDown(200)
   posx#=posx#+Cos(winkel)*(3+nitro_acc)
   posy#=posy#+Sin(winkel)*(3+nitro_acc)
EndIf

If KeyDown(208)
   posx#=posx#-Cos(winkel)*(2-nitro_acc)
   posy#=posy#-Sin(winkel)*(2-nitro_acc)
EndIf

If KeyDown(17)
   p2posx#=p2posx#+Cos(p2winkel)*(3+p2nitro_acc)
   p2posy#=p2posy#+Sin(p2winkel)*(3+p2nitro_acc)
EndIf

If KeyDown(31)
   p2posx#=p2posx#-Cos(p2winkel)*(2-p2nitro_acc)
   p2posy#=p2posy#-Sin(p2winkel)*(2-p2nitro_acc)
EndIf

If winkel>359 Then winkel=0
If winkel<0 Then winkel=359

If p2winkel>359 Then p2winkel=0
If p2winkel<0 Then p2winkel=359

DrawImage ImPlayer(winkel),posx#,posy#
DrawImage ImPlayer2(p2winkel),p2posx#,p2posy#




So: Nun wollte ich, dass wenn die Spieler kollidieren, sie in die Richtungen, aus denen sie kommen zurückgeschmissen werden [und da es sich dabei um Rasenmäher handelt, sollen sie gleich 5 Pixel zurückgeschmissen werden]

Hier der Code für die Kollission:

Code: [AUSKLAPPEN]
If ImagesCollide(ImPlayer(winkel),posx#,posy#,frame1,ImPlayer2(p2winkel),p2posx#,p2posy#,frame2)
   If (posx#-p2posx#)<0 Then posx#=posx#+Cos(winkel)*5 Else posx#=posx#-Cos(winkel)*5
   If (posx#-p2posx#)<0 Then p2posx#=p2posx#-Cos(p2winkel)*5 Else p2posx#=p2posx#+Cos(p2winkel)*5
   If (posy#-p2posy#)<0 Then posy#=posx#+Sin(winkel)*5 Else posy#=posy#-Sin(winkel)*5
   If (posy#-p2posy#)<0 Then p2posy#=p2posx#-Sin(p2winkel)*5 Else p2posy#=p2posy#+Sin(p2winkel)*5
   
EndIf



Das funktioniert auch so ziemlich in 50% der Fälle. Aber manchmal hängen sie sich ineinander fest und verharken sich, obwohl das doch (logischerweise?) nicht mehr passieren sollte. Also schätze ich dass hier in meinem Code ein schwacher Punkt ist, allerdings komme ich selber nicht drauf.


konstruktive vorschläge? ^__^


MfG,
KlausK.

Eingeproggt

BeitragMi, Jul 18, 2007 13:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Beim Drüberfliegen fragte ich mich, was frame1 und frame2 sind. Die erscheinen mir ein wenig undefiniert. Hast die einfach aus der OH abgeschrieben, ohne zu wissen, wofür "frame" steht? In diesem Fall ersetz es durch 0.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

klausklapper

BeitragMi, Jul 18, 2007 14:21
Antworten mit Zitat
Benutzer-Profile anzeigen
ehrlich gesagt habe ich BB von nem freund gelernt. Der hats mittlerweile noch weniger drauf als ich, allerdings habe ich nie von der urform

imagescollide(bild1,bx,by,frame1,bild2,b2x,b2y,frame2)

abgelassen. Sollte es funktionieren, wenn ich die beiden durch 0 ersetze???
 

Lador

BeitragMi, Jul 18, 2007 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, du hast also einfach, wie Eingeproggt fragte, das "frame1" und "frame2" von der OnlineHilfe kopiert? Wenn ja, dann ersetze beide durch 0, ja, das sollte dann funktionieren, weil du ja offensichtlich nur einen "Frame" (Einzelbild einer Animation) hast. Ansonsten kann ich dir leider nicht helfen, da er meines Wissens nach funktionieren sollte.

MFG Lador
 

Dreamora

BeitragMi, Jul 18, 2007 14:52
Antworten mit Zitat
Benutzer-Profile anzeigen
wieso sollten sie genau nicht mehr verharken?

Dein Code basiert auf einer annahme, dass du mit der dort angegebenen bewegung aus dem anderen objekt draussen bist.
Das ist gefährlich und meistens wohl auch falsch.

Am besten speicherst du eine alte position und eine aktuelle und im falle einer kollision wird das objekt an die alte Position gesetzt
Alternativ kannst du auch mit kollisionstest zwischen der alten und der neuen position (beide gleichermassen bewegen) versuchen rauszufinden wann sie sich genau berühren, also in Pixelkollision versuche swept collision nachzuahmen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

mb

BeitragMi, Jul 18, 2007 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Rasen-mäher verhaken sich bestimmt weil du
abfragst ob pos1-pos2 kleiner als 0 ist nicht kleiner als null.
oder erzähle ich blödsinn?
mb

Eingeproggt

BeitragMi, Jul 18, 2007 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab nochmal schnell nachgedacht.
Ich hab Blödsinn geredet. Die Variablen frame1 und frame2 können durch 0 ersetzt werden, es ändert aber nichts am Problem, da sie ja Blitz-intern den Wert 0 enthalten.

Ich würd sagen, der Fehler liegt darin, dass bei Kollission posx-p2posx>0 sein kann. (Ebenso posy)
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

klausklapper

BeitragDo, Jul 19, 2007 11:23
Antworten mit Zitat
Benutzer-Profile anzeigen
AAAAHHHH !!!!

Ja wie kommen denn da VIER! < zeichen hin? O__o
das war dann natürlich das problemchen ^__^

MfG,
KlausK

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group