problem mit kollisionen (erledigt)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

ChrisAttack

Betreff: problem mit kollisionen (erledigt)

BeitragMi, März 31, 2004 21:54
Antworten mit Zitat
Benutzer-Profile anzeigen
ich habe eine frei bewegbare figur, auf einer tilemap. wie kann ich eine kollision testen?

das level ist in level$(20,20) gespeichert.
B3D
MSVC++
DX9SDK
  • Zuletzt bearbeitet von ChrisAttack am Mi, März 31, 2004 23:08, insgesamt einmal bearbeitet

Travis

BeitragMi, März 31, 2004 22:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist doch ganz einfach. Wenn du eine TileMap hast, kannst du die Prüfung direkt mit den Variablen machen.

Ich weiss ja nicht, genau was du prüfen willst, aber wenn du z.B. Prüfen willst, ob du neben einer Mauer stehst, dann schreibst du einfach:

If Map(SpielerX, SpielerY+1) = Mauer Then Spieler steht über einer Mauer
If Map(SpielerX, SpielerY-1) = Mauer Then Spieler steht untereiner Mauer
If Map(SpielerX-1, SpielerY) = Mauer Then Spieler steht links von einer Mauer
If Map(SpielerX+1, SpielerY) = Mauer Then Spieler steht rechtsvon einer Mauer

Dabei ist Map(x,y) jetzt deine TileMap und Mauer wäre der Zahlenwert, den du für die Mauer benutzt hast.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

ChrisAttack

BeitragMi, März 31, 2004 22:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Das funktioniert aber nicht.
die figur ist freibewegbar, das heißt sie befindet sich z.B. auf der position 300,200. das feld Level() hat aber nur 20*20 einträge.
B3D
MSVC++
DX9SDK

Michi1988

BeitragMi, März 31, 2004 22:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie wärs ei8nfach mit:

If imagescollide(Player,x,y,0,Tile(mapx,Mapy),Mapx,Mapy,0) then
speicher.move=bvefore move
x=speihcer\x
y=speicher\y
end if

so schwer kanns nich unbedingt sein. Wenn man das nicht hinbekommt (tut mir echt leid) ist man echt noch nen Noob. Nicht besonders ernst gemeint. Aber das is echt unterste Stufe. 8)

ChrisAttack

BeitragMi, März 31, 2004 22:52
Antworten mit Zitat
Benutzer-Profile anzeigen
hehe...witzig.
Auf die Idee kam ich auch schon. tja, geht nicht.
B3D
MSVC++
DX9SDK

Michi1988

BeitragMi, März 31, 2004 23:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Na denn. Ich habs bei meiner jetzigen Tile Engine so gemacht:

Code: [AUSKLAPPEN]
For Mapx=0 To 39
For Mapy=0 To 29
If ImagesCollide(player,x,y,0,tiles,Mapx*20,Mapy*20,Map(Mapx,Mapy)) And Map(Mapx,Mapy)>=1 Then speicher.move=Before speicher:x=speicher\x:y=speicher\y
Next
Next


Wobei das >=1 der Images entspricht, die nicht durchlafen werden können.

Naja weißt hoffentlich das der Kram nicht ernst gemeint war. Very Happy

Der Michi[/code]
  • Zuletzt bearbeitet von Michi1988 am Do, Apr 01, 2004 15:39, insgesamt einmal bearbeitet

Hubsi

BeitragDo, Apr 01, 2004 9:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Nachdem das ja immer wieder mal gefragt wird, sollte man vielleicht mal was ins Codearchiv posten. Aber zu Deinem Problem:

Ich gehe von einer Tilegröße 32*32 Pixel und einer Spielergröße 32*32 Pixel aus. Die Variablen sind halt noch anzupassen. (map entspricht level z.B.)
Code: [AUSKLAPPEN]
Oben=map((player_x+16)/32,(player_y-2)/32)
Rechts=map((player_x+32)/32,(player_y+16)/32)
Unten=map((player_x+16)/32,(player_y+32)/32)
Links=map(player_x/32,(player_y+16)/32)
Mitte=map((player_x+16)/32,(player_y+16)/32)

Diesen Code gleich am Anfang Deiner Hauptschleife ausführen (hinter Repeat oder While). Damit weißt Du ob und vor allem mit was das Männicken gerade rundum kollidiert. Das ist wichtig für Powerups, Leitern, Sprungbretter, Fallen, wasweißich...

Und jetzt noch dieser Code. Einzufügen nach dem obigen und vor dem malen der Figur:
Code: [AUSKLAPPEN]
If Unten<>0 And Unten<100
  temp=player_y/32
  player_y=temp*32
EndIf

Ich gehe hier davon aus das alle Tiles von 1-99 nicht durchlaufen werden können und ab 100 die Powerups etc. kommen. Der Code läßt das Männicken nicht mitten im Tile stehen, wenn er mal irgendwo runterfällt oder nach dem springen.

Ich hoffe das war jetzt alles klar soweit Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group