Dim Map - Kollisionsproblem die 150' zigste

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Blitzkrieg Bop

Betreff: Dim Map - Kollisionsproblem die 150' zigste

BeitragSo, Aug 15, 2004 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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! Crying or Very sad
-
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 Very Happy

*Edit* : Tilegröße beträgt 32*32
~ Hey Ho Let's Go ~
 

David

BeitragSo, Aug 15, 2004 18:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Aug 15, 2004 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Aug 15, 2004 19:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Aug 15, 2004 19:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Aug 15, 2004 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Aug 15, 2004 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Aug 15, 2004 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Aug 15, 2004 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Rolling Eyes
~ Hey Ho Let's Go ~
 

zocker2150

BeitragDo, Aug 19, 2004 13:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Poste doch mal deine Kolisionsabfrage.

DivineDominion

BeitragDo, Aug 19, 2004 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
https://www.blitzforum.de/viewtopic.php?t=5286
Einfache Tile-by-Tile Kollision
christian.tietze@gmail.com - https://christiantietze.de
macOS
 

Blitzkrieg Bop

BeitragDo, Aug 19, 2004 15:51
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Aug 19, 2004 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Smile
christian.tietze@gmail.com - https://christiantietze.de
macOS
 

Blitzkrieg Bop

BeitragDo, Aug 19, 2004 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Mad
~ Hey Ho Let's Go ~

BladeRunner

Moderator

BeitragDo, Aug 19, 2004 17:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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? Rolling Eyes
*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

BeitragDo, Aug 19, 2004 17:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Aug 19, 2004 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile Das Problem ist bei allen Seiten gegeben. Du hast ein Array, map(2,2), kannst dich aslo auf 3*3 feldern (0,1,2 sind 3 Felder) bewegen.
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 Smile
christian.tietze@gmail.com - https://christiantietze.de
macOS
 

Blitzkrieg Bop

BeitragDo, Aug 19, 2004 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Mühe Divine.
Werde mich dann nochmal dransetzen und es korrigieren!
Razz

Weiter Fragen werden nicht mehr folgen.
~ Hey Ho Let's Go ~

DivineDominion

BeitragDo, Aug 19, 2004 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
glaub ich dir nicht - spätestens bei pixel*pixel scrolling und entsprechender bewegung, gekoppelt mit animation bist du wieder hier Smile
christian.tietze@gmail.com - https://christiantietze.de
macOS
 

Blitzkrieg Bop

BeitragDo, Aug 19, 2004 18:16
Antworten mit Zitat
Benutzer-Profile anzeigen
LOL!
Naja wenn du meinst...wie gesagt, widme mich jetzt aber BB3D.
Trotzdem THX
~ Hey Ho Let's Go ~

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group