kollisionsbox

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

g4ndhi

Betreff: kollisionsbox

BeitragDi, März 10, 2015 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
HI!

Aktuell hab ich ja immer Imagescollide benutzt.

Hatte Hier schon mal was gefunden.. Wo es darum ging Kollisionsboxen zu zeichnen...

War so eine Mario Figur und so ne Röhre abgebildet um das mit den Boxen zu demonstrieren..

Finde das leider nicht mehr, vielleicht kennt hier jemand den "beitrag" und kann mir den verlinken?


mfg

BladeRunner

Moderator

BeitragDi, März 10, 2015 17:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine Kollisionsbox ist nichts anderes als ein (virtuelles) Rechteck was Du um dein Objekt (z.B. den Mario) spannst und schaust ob es sich mit anderen Boxen (zB der Röhre) überschneidet.

Die Mathematik dahinter ist eher trivial, google mal nach "prüfung rechtecke schneiden sich"
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Eingeproggt

BeitragDi, März 10, 2015 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Du suchst vermutlich diesen Beitrag?

https://www.blitzforum.de/foru...gescollide
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

g4ndhi

BeitragMi, März 11, 2015 0:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja genau das wars... Wink


Hierzu hab ich aber eine Frage.. Dazu konnte ich nichts finden in der Hilfe..

Was machen UnlockBuffer lockBuffer und wofür ist das gut?

Und was macht imagebuffer bzw wofür ist das gut...?

Hab bisher nur mit setbuffer backbuffer gearbeitet...

DAK

BeitragMi, März 11, 2015 8:36
Antworten mit Zitat
Benutzer-Profile anzeigen
ImageBuffer: erlaubt dir mit den normalen Grafikbefehlen in ein Bild zu zeichnen, statt auf den Bildschirm.

Lock/UnlockBuffer: Solange der Buffer gelockt ist, kannst du Read/WritePixelFast ausführen.
Gewinner der 6. und der 68. BlitzCodeCompo
 

g4ndhi

BeitragMi, März 11, 2015 8:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay Dankeschön!


Also zeichne ich quasi mein virtuelles Rechteck um die Grafiken locke dann den buffer, prüfe dann ob
eine Kollision vorhanden ist und unlocke den buffer wieder und mach flip...? Hab ich da so richtig verstanden?

Und was soll das bedeuten..? And $00FFFFFF

Eingeproggt

BeitragMi, März 11, 2015 10:26
Antworten mit Zitat
Benutzer-Profile anzeigen
So kompliziert muss es gar nicht sein.
Es ist im Grunde wie BladeRunner geschrieben hat: Du prüfst die "virtuellen" Rechtecke "rein mathematisch". Die Mathematik beschränkt sich auf etwas in der Art:

Code: [AUSKLAPPEN]
if box1_x > box2_x and box1_x < box2_x + box2_w usw...


Damit würde geprüft werden, ob die "linke Seite" der ersten Box in horizontaler Richtung mit der 2. Box sich überschneidet. Dasselbe für die anderen Eckpunkte / Seiten und in vertikaler Richtung noch und fertig. Klingt wahnsinnig kompliziert, aber wenn du es dir mal auf ein Blatt Papier aufmalst hast das in 5Minuten Wink

Außerdem wird es noch einfacher mit der Funktion RectsOverlap.

Dazu muss der ImageBuffer nicht manipuliert werden.

mfG, Christoph
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

g4ndhi

BeitragMi, März 11, 2015 12:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Also quasi So:

Die Boxen kann ich ja verkleinern indem ich z.B. X1 = posx1 - ImageXHandle(objekt1) + 5 mache und
width1 = ImageWidth(objekt1)-10



und rectsoverlap ist nicht von diesen mav's betroffen?

BlitzBasic: [AUSKLAPPEN]
Function Kollision(objekt1,posx1,posy1,objekt2,posx2,posy2)


X1 = posx1 - ImageXHandle(objekt1)
Y1 = posy1 - ImageYHandle(objekt1)

width1 = ImageWidth(objekt1)
height1 = ImageHeight(objekt1)


x2 = posx2 - ImageXHandle(objekt2)
y2 = posy2 - ImageYHandle(objekt2)

width2 = ImageWidth(objekt2)
height2 = ImageHeight(objekt2)

Kollision = RectsOverlap (x1,y1,width1,height1,x2,y2,width2,height2)

If kollision = 1 Then

Text 10,10, "Kollision"

End If


End Function

Eingeproggt

BeitragMi, März 11, 2015 12:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, vom "einfach mal drüber schauen" denk ich so sollts gehn. Hast du es schon ausprobiert?
Kleine Anmerkung zwischendurch: Achte ein wenig auf Groß / Kleinschreibung bei den Variablen. BlitzBasic sieht da drüber hinweg, aber wenn du der Programmierung treu bleibst wirst du früher oder später eine Sprache verwenden die darauf Wert legt. Und dann ist x1 und X1 nicht mehr dasselbe.

mfG, Christoph
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

g4ndhi

BeitragMi, März 11, 2015 13:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok alles klar!


Ja die Tests haben sich als sehr positiv erwiesen... Wink

gibt es da zu meiner Variante und der anderen "komplizierten" einen herben Unterschied?

Außer das man die Funktion vll eher in einer anderen Sprache verwenden kann, da der Befehl rectsoverlap nicht
genutzt wird..?

Oder war das andere unnötig kompliziert.. so zu sagen..

BladeRunner

Moderator

BeitragMi, März 11, 2015 13:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Rectsoverlap macht im Endeffekt genau das was wir dir hier verklickert haben, sollte also sonst keine Unterschiede machen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group