B2D : Kollisionsprobleme -_-
Übersicht

klausklapperBetreff: B2D : Kollisionsprobleme -_- |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
AAAAHHHH !!!!
Ja wie kommen denn da VIER! < zeichen hin? O__o das war dann natürlich das problemchen ^__^ MfG, KlausK |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group