problem mit kollisionen (erledigt)
Übersicht

![]() |
ChrisAttackBetreff: problem mit kollisionen (erledigt) |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
hehe...witzig.
Auf die Idee kam ich auch schon. tja, geht nicht. |
||
B3D
MSVC++ DX9SDK |
![]() |
Michi1988 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() Der Michi[/code] |
||
- Zuletzt bearbeitet von Michi1988 am Do, Apr 01, 2004 15:39, insgesamt einmal bearbeitet
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group