2D-Kollisonsabfrage - BITTE HELFT MIR!!
Übersicht

BadDeathBetreff: 2D-Kollisonsabfrage - BITTE HELFT MIR!! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi! Ich habe vor rund 4 Tagen mit Blitz angefangen und möchte gerne ein RPG-Spiel basteln. Läuft bis jetzt auch alles ganz gut. Ich habe auch kein Problem, sondern eher eine Frage an euch "alten Hasen".
Geht ImagesCollide übersichtlicher?!? Oder muss ich das tatsächlich für jedes Objekt mit in die If-Abfrage einbauen? Hier der vorläufige Code: Code: [AUSKLAPPEN] Global up_key = 200, down_key = 208, left_key = 203, right_key = 205
FrameTimer = CreateTimer (30) Graphics 1024, 768, 32, 1 SetBuffer BackBuffer() Type Spieler Field PosX Field PosY Field PosXold Field PosYold Field Bild Field Richtung End Type Global Spieler.Spieler = New Spieler Spieler\PosX = 50 Spieler\PosY = 50 Spieler\Bild = LoadAnimImage("GFX\Alle3.bmp",63,73,0,12) Baum = LoadImage("GFX\Baum2.bmp") Brunnen = LoadImage("GFX\Brunnen.bmp") Bg = LoadImage("GFX\Rasen2.bmp") MaskImage Brunnen, 255, 0, 255 MaskImage Baum, 255, 0, 255 While Not KeyHit(1) Spieler\PosXold = Spieler\PosX Spieler\PosYold = Spieler\PosY TileImage Bg If MilliSecs() > ms+ 75 ms = MilliSecs() i = (i+1) Mod 3 End If Spieler\Richtung = 0 If KeyDown(down_key) Then Spieler\Posy = Spieler\Posy + 4 Spieler\Richtung = 1 End If If KeyDown(up_key) Then Spieler\Posy = Spieler\Posy - 4 Spieler\Richtung = 2 End If If KeyDown(right_key) Then Spieler\Posx = Spieler\Posx + 4 Spieler\Richtung = 3 End If If KeyDown(left_key) Then Spieler\Posx = Spieler\Posx - 4 Spieler\Richtung = 4 End If MaskImage Spieler\Bild, 255, 0, 255 DrawImage Baum, 200, 50 DrawImage Brunnen, 700, 600 Select Spieler\Richtung Case 0 If ImagesCollide(Spieler\Bild, Spieler\Posx, Spieler\Posy, 0, Baum, 200, 50, 0) Or ImagesCollide(Spieler\Bild, Spieler\Posx, Spieler\Posy, 0, Brunnen, 700, 600, 0) Then Spieler\PosY = Spieler\PosYold Spieler\PosX = Spieler\PosXold DrawImage Spieler\Bild,Spieler\PosX,Spieler\PosY, 8 Else DrawImage (Spieler\Bild, Spieler\PosX, Spieler\PosY,8) End If Case 1 If ImagesCollide(Spieler\Bild, Spieler\Posx, Spieler\Posy, 0, Baum, 200, 50, 0) Or ImagesCollide(Spieler\Bild, Spieler\Posx, Spieler\Posy, 0, Brunnen, 700, 600, 0) Then Spieler\PosY = Spieler\PosYold Spieler\PosX = Spieler\PosXold DrawImage Spieler\Bild,Spieler\PosX,Spieler\PosY,i + 6 Else DrawImage (Spieler\Bild, Spieler\PosX, Spieler\PosY,i + 6) End If Case 2 If ImagesCollide(Spieler\Bild, Spieler\Posx, Spieler\Posy, 0, Baum, 200, 50, 0) Or ImagesCollide(Spieler\Bild, Spieler\Posx, Spieler\Posy, 0, Brunnen, 700, 600, 0) Then Spieler\PosY = Spieler\PosYold Spieler\PosX = Spieler\PosXold DrawImage Spieler\Bild,Spieler\PosX,Spieler\PosY,i + 0 Else DrawImage (Spieler\Bild, Spieler\PosX, Spieler\PosY,i) End If Case 3 If ImagesCollide(Spieler\Bild, Spieler\Posx, Spieler\Posy, 0, Baum, 200, 50, 0) Or ImagesCollide(Spieler\Bild, Spieler\Posx, Spieler\Posy, 0, Brunnen, 700, 600, 0) Then Spieler\PosY = Spieler\PosYold Spieler\PosX = Spieler\PosXold DrawImage Spieler\Bild,Spieler\PosX,Spieler\PosY,i + 3 Else DrawImage (Spieler\Bild, Spieler\PosX, Spieler\PosY,i + 3) End If Case 4 If ImagesCollide(Spieler\Bild, Spieler\Posx, Spieler\Posy, 0, Baum, 200, 50, 0) Or ImagesCollide(Spieler\Bild, Spieler\Posx, Spieler\Posy, 0, Brunnen, 700, 600, 0) Then Spieler\PosY = Spieler\PosYold Spieler\PosX = Spieler\PosXold DrawImage Spieler\Bild,Spieler\PosX,Spieler\PosY,i + 9 Else DrawImage (Spieler\Bild, Spieler\PosX, Spieler\PosY,i + 9) End If End Select WaitTimer FrameTimer Flip 0 Wend End PS: wenn ihr die Bilder braucht, sagt mir Bescheid! |
||
- Zuletzt bearbeitet von BadDeath am Fr, Jan 04, 2008 0:58, insgesamt einmal bearbeitet
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kollisionen in einem so grossen Stil sind eindeutig eine Aufgabe für Types und "for t.typename = each typename ... imagecollide t\bildhandle, t\x, .... .... next" | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
BadDeathBetreff: Danke |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey, danke für die Blitz-Antwort xD
Also soll ich den Brunnen, den Baum... alles z.B. als Typ "Gegenstand" deklarieren und dann mit einer Schleife alle Abfragen? Oder wie? Danke schonmal! |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Apropos an die alten Hasen, suche mal im Codearchiv nach dem Scrollingcode von "DerHase", er hat auch Kollisionen in dem Thread gepostet.
MfG |
||
BadDeath |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ Nici: meinst du das hier? https://www.blitzforum.de/foru...hp?t=18589 | ||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein das: https://www.blitzforum.de/foru...147#209147 | ||
BadDeath |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ah, danke
kann man das ganze auch etwas was kürzen? also bei dem, den ich oben gepostet hatte |
||
BadDeathBetreff: 2D-Kollison - Ich kriegs nicht hin!!! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ja, also ich versuche seit gestern abend die objekte, wie baum und brunnen als types zu machen und die kollisons als schleife abzufragen (siehe Post von Dreamora).
Aber ich bekomme das nicht hin! Der Fehler "object not found" tritt beim starten auf und er makiert mir die Zeile, wo Test\Bild gezeichnet wird. Und im Debug-Fenster unter Globals ist Type=0, nicht mal als Knoten zum aufklappen wie Spieler!! Kann mir bitte jemand helfen? Wäre echt nett, wenn mir jemand dieses Beispiel so macht, dass der Brunnen auch gleich mit in den Typ gezogen wird. DANKE SCHONMAL, BADDEATH Code: [AUSKLAPPEN] Global up_key = 200, down_key = 208, left_key = 203, right_key = 205
FrameTimer = CreateTimer (30) Graphics 1024, 768, 32, 1 SetBuffer BackBuffer() Type Spieler Field PosX Field PosY Field PosXold Field PosYold Field Bild Field Richtung End Type Global Spieler.Spieler = New Spieler Spieler\PosX = 50 Spieler\PosY = 50 Type Test Field PosX Field PosY Field Bild End Type Global Test.Test = New Test Test\PosX = 200 Test\PosY = 50 Spieler\Bild = LoadAnimImage("GFX\Alle3.bmp",63,73,0,12) Test\Bild = LoadImage("GFX\Baum.bmp") Brunnen = LoadImage("GFX\Brunnen.bmp") Bg = LoadImage("GFX\Rasen2.bmp") MaskImage Brunnen, 255, 0, 255 While Not KeyHit(1) Spieler\PosXold = Spieler\PosX Spieler\PosYold = Spieler\PosY Spieler\Richtung = 0 TileImage Bg DrawImage Test\Bild, Test\PosX, Test\PosY MaskImage Test\Bild, 255, 0, 255 If MilliSecs() > ms+ 75 ms = MilliSecs() i = (i+1) Mod 3 End If If KeyDown(down_key) Then Spieler\Posy = Spieler\Posy + 4 Spieler\Richtung = 1 End If If KeyDown(up_key) Then Spieler\Posy = Spieler\Posy - 4 Spieler\Richtung = 2 End If If KeyDown(right_key) Then Spieler\Posx = Spieler\Posx + 4 Spieler\Richtung = 3 End If If KeyDown(left_key) Then Spieler\Posx = Spieler\Posx - 4 Spieler\Richtung = 4 End If MaskImage Spieler\Bild, 255, 0, 255 DrawImage Brunnen, 700, 600 Select Spieler\Richtung Case 0 For Test.Test = Each Test If ImagesCollide(Spieler\Bild, Spieler\PosX, Spieler\Posy, 0, Test\Bild, Test\PosX, Test\PosY, 0) Then Spieler\PosY = Spieler\PosYold Spieler\PosX = Spieler\PosXold DrawImage Spieler\Bild,Spieler\PosX,Spieler\PosY, 8 Else DrawImage (Spieler\Bild, Spieler\PosX, Spieler\PosY,8) End If Next Case 1 ;For Test.Test = Each Test If ImagesCollide(Spieler\Bild, Spieler\PosX, Spieler\Posy, 0, Test\Bild, Test\PosX, Test\PosY, 0) Then Spieler\PosY = Spieler\PosYold Spieler\PosX = Spieler\PosXold DrawImage Spieler\Bild,Spieler\PosX,Spieler\PosY, i + 6 Else DrawImage (Spieler\Bild, Spieler\PosX, Spieler\PosY,i+6) End If ;Next Case 2 ;For Test.Test = Each Test If ImagesCollide(Spieler\Bild, Spieler\PosX, Spieler\Posy, 0, Test\Bild, Test\PosX, Test\PosY, 0) Then Spieler\PosY = Spieler\PosYold Spieler\PosX = Spieler\PosXold DrawImage Spieler\Bild,Spieler\PosX,Spieler\PosY, i Else DrawImage (Spieler\Bild, Spieler\PosX, Spieler\PosY,i) End If ;Next Case 3 ;For Test.Test = Each Test If ImagesCollide(Spieler\Bild, Spieler\PosX, Spieler\Posy, 0, Test\Bild, Test\PosX, Test\PosY, 0) Then Spieler\PosY = Spieler\PosYold Spieler\PosX = Spieler\PosXold DrawImage Spieler\Bild,Spieler\PosX,Spieler\PosY, i + 3 Else DrawImage (Spieler\Bild, Spieler\PosX, Spieler\PosY,i+3) End If ;Next Case 4 ;For Test.Test = Each Test If ImagesCollide(Spieler\Bild, Spieler\PosX, Spieler\Posy, 0, Test\Bild, Test\PosX, Test\PosY, 0) Then Spieler\PosY = Spieler\PosYold Spieler\PosX = Spieler\PosXold DrawImage Spieler\Bild,Spieler\PosX,Spieler\PosY, i + 9 Else DrawImage (Spieler\Bild, Spieler\PosX, Spieler\PosY,i+9) End If ;Next End Select WaitTimer FrameTimer Flip 0 Wend End ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group