Dim Map - Kollisionsproblem die 150' zigste
Übersicht

Blitzkrieg BopBetreff: Dim Map - Kollisionsproblem die 150' zigste |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Huhu..
Also, ich habe zum Thema Tile Kollision (beim Jump'n'Run), die Forumsuche durchwühlt und einiges gefunden(z.B. die Berechnung, die Hubsi oft anschlägt), doch hatte irgendwie kein Erfolg beim anpassen auf meinen Source. Also net böse sein, weil ich weiß das es schon oft durchgekaut wurde, aber ich weiß net mehr weiter - hab schon viel versucht! ![]() - Zum Problem: Ich habe mir nen Mapeditor gecodet und lasse nun im Spiel eine Map laden und anzeigen. Das läuft nach diesem Muster: Code: [AUSKLAPPEN] For i = 1 To map_x For j = 1 To map_y If map(i,j) > 0 ;Hier wird jedes Tile gemalt - klappt super EndIf Next Next Okay, soweit so gut. Nun habe ich ne Figur platziert und Scrolling eingebaut. So wie man es optisch warnimmt, sieht es gut und in Ordnung aus. Doch nun Frage ich euch, wie ich die Tilekollision hinbekomme - also: Auf nem Tile drauf stehen bleiben, nicht durchlaufen, nicht durchfallen. Bei mehr Infos etc.: einfach melden. Dickes Danke im Voraus ![]() *Edit* : Tilegröße beträgt 32*32 |
||
~ Hey Ho Let's Go ~ |
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Du könntest z.B. jedem Tile entsprechende Flags zuweisen. Code: [AUSKLAPPEN] Durchläßig Undurchläßig Spieler stirbt Spieler bekommt +100 zum Leben Hintergrund Hinter Spieler Vor Spieler Auf Höhe von Spieler usw... Dann musst du, anhand der Spielerposition, die Tiles errechnen mit denen der Spieler kolidieren (könnte) und die Flags auswerten. Alle Hintergrundlayer musst du übrigens garnicht beachten. grüße |
||
http://bl4ckd0g.funpic.de |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ehm, ich habe es simpel gehalten! D.h, bis ich das mit der kollision richtig verstanden habe, setze ich nur einen Layer. Deine Tipps mit der Zuweisung sind mir aber klar und das ist nicht das Problem, sondrn die Kolli an sich. Also bei mir gilt im mom(zur Verständniss): Ist die Tilenummer > 1 (also alle Tiles, die es in meinem noch simplen Beispiel gibt) gibt es ne Kollision. Sollte jetzt klar sein. | ||
~ Hey Ho Let's Go ~ |
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Dann prüf mit ImagesCollide eben auf Kollision. Falls das zutrifft musst du selbst die Kollisionsseite, deines Spielers und des Objektes, rausfinden und darauf basierend entscheiden, was zu passieren hat. An dieser Stelle wäre es evtl. angepasst, verschiedenen Tiles unterschiedliche Typen zuzuweisen: Code: [AUSKLAPPEN] Mauer = Von allen Seiten undurchdringlich Graß = Nur von unten durchdringlich Wasser = Immer durchläßig grüße |
||
http://bl4ckd0g.funpic.de |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hatte es einmal mit einer Simpel Images Abfrage gemacht, aber geht da kein Weg dran vorbei? Weil da kamen teilweise höchst ungenaue Ergebniss! (Bin auf ein Tile gesprungen und stand auf ihm, bevor ich richtig gelandet bin!) | ||
~ Hey Ho Let's Go ~ |
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Der Befehl "ImagesCollide" durchläuft eine pixelgenaue!! Kollisionsroutine. Also so ungenau kann dein Ergebniss garnicht sein, evtl. liegts ja garnicht an der Kollision. grüße |
||
http://bl4ckd0g.funpic.de |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja, mir kams anders vor. - Aber darum gehts nicht. Es gibt auch andere Methoden, zu prüfen, ob ein Tile nun durchgänglich ist, oder nicht. Außerdem besteht meine Spieler Animation aus 4 verschiedenen Datein! Sollte ich da Imagescollide nehmen, ist das viel schreiberei! | ||
~ Hey Ho Let's Go ~ |
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Bitte? Wieso aus viel Schreiberei? Entweder du verwendest eine Bildserie (LoadAnimImage), dann gibst du bei ImagesCollide die aktuelle Framenummer an oder du testest immer nach der Bildvariable des aktuellen Animationsframes. Is überhaupt kein Aufwand. grüße |
||
http://bl4ckd0g.funpic.de |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
He? Ich meine ich habe 4 verschieden Bitmap Datein!
Und Lust habe ich nicht, alle einzelnen zusammenzufügen, weil die Animationsfunktion fertig ist und ich sie nicht neuschreiben möchte. Man, das geht doch auch ohne Imagescollide. ![]() |
||
~ Hey Ho Let's Go ~ |
zocker2150 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Poste doch mal deine Kolisionsabfrage. | ||
![]() |
DivineDominion |
![]() Antworten mit Zitat ![]() |
---|---|---|
https://www.blitzforum.de/viewtopic.php?t=5286
Einfache Tile-by-Tile Kollision |
||
christian.tietze@gmail.com - https://christiantietze.de
macOS |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, nur ich bekomme immer den Fehler, Arra out of bounds und die Zeile wird angezeigt:
Code: [AUSKLAPPEN] KollisionOben = map(spy-1,spx) <<< KollisionRechts = map(spy,spx+1) KollisionUnten = map(spy+1,spx) KollisionLinks = map(spy,spx-1) |
||
~ Hey Ho Let's Go ~ |
![]() |
DivineDominion |
![]() Antworten mit Zitat ![]() |
---|---|---|
Logisch.
spy = 0 Wenn du dann auf das Arrayelement "spy-1" zugreifen willst, müsste es bei map(-1,spx) sein. Das gibts nicht. Bau dann vorher ne Abfrage rein, und setze KollisionOben auf True wenn spy=0. Dann kann man die KArte auch nicht verlassen. Du hast bürigens X und Y in deinem array vertauscht, das ist sehr seltsam. ![]() |
||
christian.tietze@gmail.com - https://christiantietze.de
macOS |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich versteh nicht ganz, was du meinst.
Was habe ich vertauscht? So steht es doch in deinem FAQ auch. Irgendwie klappt das mit der Abfrage net, dann kommt der Fehler bei KolliRechts ![]() |
||
~ Hey Ho Let's Go ~ |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
könnte es sein dass auch kolli rechts werte ausserhalb des arrays annehmen kann? und die anderen Abfragen auch? Und das dir die Lösung schon gezeigt wurde und du dennoch nicht verstanden hast wo der Fehler liegt? Du aber gern über die "Noobs" ablästerst? ![]() *no comment, da fällt mir echt nix mehr zu ein* |
||
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 |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja das ist ja ganz toll.
Kaum sagt man mal was, gegen Newbies, die keine Eigeninitiative zeigen und schon wird man, sobald man mal was nicht hinkriegt nieder gemacht. Ich wusste das das kommt. Das sollte hier echt nicht so sein, das man Angst haben muss, Fragen zu stellen. Und du kannst mir glauben, das ich mich damit beschäftigt habe und alles mögliche ausprobiert habe... |
||
~ Hey Ho Let's Go ~ |
![]() |
DivineDominion |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du hast map(Y, X). Gewöhnlich (müsstest du auch aus dem Matheunterricht kennen) ist aber zuerst die X-, dann die Y-Koordinate zu speichern. Wie man es in den Shcleifen dann abfragt ist ja egal.
BladeRunner hat's schön gesagt ![]() Jetzt fragst du aber mit der Methode die ich skizziert habe ab, ob beim Feld über dem Spieler (spy-1) der entsprechende Wert steht. Stell dir vor, du stehst auf Tile Position (0,0) und fragst jetzt das Tile über dem Spieler ab. Die Positionen vom Spieler sind, in Variablen: x = 0 y = 0 Nun fragst du y-1 ab. 0 minus 1 ist -1. Leuchtet hoffentlich ein. Du musst eben eine If abfrage einbauen, ob spy-1 < 0 ist. Ebenso für spy+1 > MAP_HEIGHT und das selbe für die andere Achse. Verstanden? Mehr will ich aber echt nicht mehr sagen, wird ja langsam schwerer als das selber zu schreiben ![]() |
||
christian.tietze@gmail.com - https://christiantietze.de
macOS |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die Mühe Divine.
Werde mich dann nochmal dransetzen und es korrigieren! ![]() Weiter Fragen werden nicht mehr folgen. |
||
~ Hey Ho Let's Go ~ |
![]() |
DivineDominion |
![]() Antworten mit Zitat ![]() |
---|---|---|
glaub ich dir nicht - spätestens bei pixel*pixel scrolling und entsprechender bewegung, gekoppelt mit animation bist du wieder hier ![]() |
||
christian.tietze@gmail.com - https://christiantietze.de
macOS |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
LOL!
Naja wenn du meinst...wie gesagt, widme mich jetzt aber BB3D. Trotzdem THX |
||
~ Hey Ho Let's Go ~ |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group