kollisionsbox
Übersicht

g4ndhiBetreff: kollisionsbox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du suchst vermutlich diesen Beitrag?
https://www.blitzforum.de/foru...gescollide |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
g4ndhi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja genau das wars... ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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) |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok alles klar!
Ja die Tests haben sich als sehr positiv erwiesen... ![]() 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.. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group