X und Y Breiche Eingrenzen ? (kollision)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Freeman

Betreff: X und Y Breiche Eingrenzen ? (kollision)

BeitragSo, Mai 02, 2004 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

ich mache grad meine kollision für meine Tilemap , bisher klappt alles sehr gut, nur an kanten bsp:


#### ####
# #
# #

kann mein Charakter aus mir nicht bekanntem Grund zwischen den Tiles laufen.

ich habe das ganze Kollisionssystem so gemacht , das geprüft ob wenn man nach oben läuft und dann gibt es ein bestimtes Tile wo der Char nicht gegenlaufen kann.

Das gleiche hab ich noch für links & rechts gemacht mit einem Tile
siehe Bild :
Bild1

so, jetzt gibt es aber das problem das mein char irgendwie zwischen den Tiles läuft.... (also sprich per kombination der Richtungstasten) wenn er richtig steht .

Bild2

jetzt dachte ich mir grenzte den X/Y Breich einfach ein wo er sich nach links bzw. nach rechts bewegen kann und wo nicht. Allerdings hab ich keinen Plan wie man X/Y Breiche angibt bsp:

von y = 45 bis 56 und x= 34 kann der char sich nicht nach links bzw rechts bewegen .
Achso, das ganze soll in einer If abfrage rein ....

edit : ich weis die Bildqualli is mies, und die Dächer sehn nich soo schlimm aus, lalso bitte keine Kommentare zu dem Pic, sie sollten ja nur als Beispiel dienen

Danke
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28

Buddha

BeitragSo, Mai 02, 2004 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Also mit dem eingrenzen würde ich das nicht machen ist jawohl auch ne drecksarbeit, mach doch so :

wenn tilenr < 1 dann move = 0
wenn tilenr > 1 dann move = 1

wenn move = 1 und taste rechts gedrückt dann
x = x + 1

nur en beispiel
Bei fragen im GFX bereich jeder zeit an mich Wink

Freeman

BeitragSo, Mai 02, 2004 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
ich will ja nicht alles mit X/Y Abgrenzen, nur ein paar stellen, von daher lass die arbeit mal meine sorge sein Wink

ps: ich mach die Kollision so

Code: [AUSKLAPPEN]


;bsp für links

If KeyDown(200) And  Y >= 0.01   And map(x/16,(y+16)/16) <>899  And map(x/16,(y+16)/16) <>897



wobei Y / X die Koordinaten des Helden sind und das mit dem Y >= 0.01 ist ne abgrenzung für die Map
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28

Freeman

BeitragSo, Mai 02, 2004 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry wegen doppelpost aber es ist sehr wichtig für mich, also


*Push*
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28

rambo256

BeitragMo, Mai 03, 2004 17:05
Antworten mit Zitat
Benutzer-Profile anzeigen
offtopic: @freeman: könnte ich vll dein Tileset bekommen (währe seeehr nett) oder kannste mir Tipps geben woher ich sowas inner art noch bekomme?
THX

Freeman

BeitragMo, Mai 03, 2004 20:13
Antworten mit Zitat
Benutzer-Profile anzeigen
rambo256 hat Folgendes geschrieben:
offtopic: @freeman: könnte ich vll dein Tileset bekommen (währe seeehr nett) oder kannste mir Tipps geben woher ich sowas inner art noch bekomme?
THX


tut mir leid, weil die sind zu 99% selbstgemalt, und mein grafiker würds nich so gut finden wenn ich die verschenken würde, I'm so sorry , aber vielleicht findet sich ja jemand der dir sowas machen kann. Ich bin selbst heilfroh das ich jemanden wie Dark ryu(grafiker) hab. 8)

die tiles sind auch nur 16*16...also nich so gut.

außerdem habn er und ich zu viel Zeit investiert als das wir die einfach vergeben würden, deshalb geht es nicht. Tut mir echt leid, und soll auch nicht bös gemeint sein

@Topic : problem is gelöst, war zu einfach , bin soo gegen den Wind das ich auf sowas nich draufgekommen bin....
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28

rambo256

BeitragMo, Mai 03, 2004 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok,dann kann ich das verstehen.
Würd ich auch nicht gerne Tun wenn man das selber,bzw. der Grafiker,dass zu 99% selbst gemacht hat.
Dann werde ich wohl doch das entweder alleine hinpixeln oder mal googlen,hab ich zwar schon gemacht,aber wer weiß.....
THX für deine schnelle Antwort

BladeRunner

Moderator

BeitragDi, Mai 04, 2004 11:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Also: erstmal auf einzelne Richtungstasten überprüfen:
Code: [AUSKLAPPEN]
moveY=keydown(208)-keydown(201) ;liefert 1 für runter, -1 für hoch
moveX=keydown(205)-keydown(203) ;dito, rechts1, links -1
 

Jetzt weisst du, auf welchem Feld dein Player zum stehen kommen würde:
Code: [AUSKLAPPEN]

-1,-1 |  0,-1  |  1,-1
-1, 0 | Player |  1, 0
-1, 1 |  0, 1  |  1, 1

Du kannst also mit:
Code: [AUSKLAPPEN]
if map(playerX+moveX,playerY+moveY)= tilenummer der Verbotenen tiles ;Pseudo-code,mach hier eine Schleife in der alle unpassierbaren Tiles abgefragt werden

formschön prufen ob das tile passierbar ist und wenn nein Die bewegung blockieren.
Du könntest (mit etwas grüblerei) auch bei blockiertem Weg auf die Einzelnen Bewegungsanteile prüfen und somit deinen Player an Wänden "entlangrutschen" lassen. Hope it works for U.
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

Garfield

BeitragDi, Mai 04, 2004 12:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde das ganze mit ImageCollide machen.
Falls du nicht eh schon mit Types arbeitest, würde ich den Tiles, die nicht durchkreuzt werden können, als Types kreieren (z.B. Type Block, Field x, Field y ein Field (Field \Sperre )mit z.B. dem Index 1 geben
in der Hauptschleife des Programms nach einer Bewegung alle Types abfragen:
Code: [AUSKLAPPEN]

For bl.Block = Each Block
   If ImagesCollide(Figur,X,Y,0,bl\Block,bl\x,bl\y,0)
                         if \Sperre = 1 then -> Bewegung rückgängig (abhängig von deiner Bewegungsart)

   End If
Next

Mit dem Index Sperre kannst du dann auch noch andere Bewegungsabläufe abfragen, z.B. wenn der Spieler gegen eine Gummiwand (Index 2, Bewegung rückwärts um 4 Felder) läuft, dass er dann zurückgeschleudert wird nur so als Beispiel

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group