Problem bei Kollision

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

toddy

Betreff: Problem bei Kollision

BeitragDo, Sep 09, 2010 12:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin!

Ich schreibe gerade ein Jump 'n' Run, die Kollision des Spielers funktioniert, und auch die eines Gegnertypes,
jetzt, beim zweiten, gibt es ein Problem... Der Gegner läuft zwar auf dem Boden aber durch alle Wände =)

In fi (fields) sind Gegner und später mal Items gespeichert. imgkoopa ist das Bild des Gegners, in zwei Richtungen (fi\direct). In map sind alle Blöcke gespeichert.
fi\spdx ist die x-Geschwindigkeit.
fi\ani ist die aktuelle Animationssequenz.

BlitzBasic: [AUSKLAPPEN]

x = fi\x/32
y = fi\y/32

If map(x+1,y) > 0 And fi\spdx > 0 And ImagesCollide(imgkoopa[fi\direct],fi\x,fi\y,fi\ani,imgtiles, (x+1)*32,y*32,map(x+1,y)) Then ;Wand
fi\spdx = 0
fi\x = x*32 -32
fi\direct = 2
ElseIf map(x-1,y) > 0 And fi\spdx < 0 And ImagesCollide(imgkoopa[fi\direct],fi\x,fi\y,fi\ani,imgtiles,(x-1)*32,y*32,map(x-1,y)) ;Wand
fi\spdx = 0
fi\x = x*32 +32
fi\direct = 1
End If


Danke schon mal, hoffe mal, dass jemand helfen kann Smile
toddy
t:soft Homepage

Hubsi

BeitragFr, Sep 10, 2010 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
ImagesCollide ist meiner bescheidenen Meinung nach die ganz falsche Richtung. Erstens ist es rechenintensiv, zum anderen haben manche Grafikkarten arge Probleme damit. ich verwende seit Jahren mit Erfolg dieses System:
BlitzBasic: [AUSKLAPPEN]
    u=map((p\x+16)/32,(p\y-2)/32,0)  ; oben / up
r=map((p\x+32)/32,(p\y+16)/32,0) ; rechts / right
d=map((p\x+16)/32,(p\y+32)/32,0) ; unten / down
l=map(p\x/32,(p\y+16)/32,0) ; links / left
m=map((p\x+16)/32,(p\y+16)/32,1) ; mitte / middle


Die Spielfigur sowie die Tiles sind dabei 32*32 Pixel groß. Für andere Größen müsste man halt die Werte anpassen. Zurückgegeben wird dabei die Nummer des Tiles rund um bzw. "hinter" der Spielfigur, siehe Kommentare eben. p\x bzw. y sind die absoluten Koordinaten der Spielfigur, ich habs nur schnell aus einem alten Projekt rauskopiert.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

das wurgel

BeitragFr, Sep 10, 2010 21:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast da ganzschön viele Bedingungen mit And hintereinandergehängt. Schonmal geprüft welche davon False sind wenn der Gegner durch die Wand läuft?
1 ist ungefähr 3

toddy

BeitragSa, Sep 11, 2010 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ich nur gucke ob irgendwo um den Gegner herum was ist, das ginge, aber ich will halt, dass er komplett an die Wand ranläuft. Wenn das nicht geht dann muss ich das dann doch so machen Smile
Wenn ich einen Gegner habe, der nur eine Richtung hat (man sieht ihn immer von vorne), dann gibt es keine Probleme... Neutral

Also alles passt, bis auf die Kollision, weil das Bild keine Kollision meldet... Also immer 0.
Dasselbe passiert beim Spieler wenn das Bild für ihn nicht groß genug ist...

Danke schon mal! Smile
t:soft Homepage

das wurgel

BeitragSo, Sep 12, 2010 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Angenommen der Gegner schwebt auch nur ein pixel über der nächsten 32er Rasterlinie, tritt folgendes Szenario auf:
user posted image
Der Kasten ist der Gegner, das rote darin seine Kollisionsmaske, das grüne die Kollisionsmaske der Tiles. x und y ist das, was bei x = fi\x/32 y = fi\y/32 herauskommt und die Felder mit den Kreuzen sind die, die demnach geprüft werden. Gehe am besten mit einer For-Next schleife alle Felder durch, mit denen der Gegner kollidieren könnte.
1 ist ungefähr 3

toddy

BeitragSo, Sep 19, 2010 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hat leider nicht so ganz geklappt, es gab dann einige Fehler... Neutral
Ich habe das erstmal rausgelassen, vielleicht baue ich es später wieder ein Smile

Danke an alle!
t:soft Homepage

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group