Verstehe die Kollision bei JNR nicht.
Übersicht

Razor1994Betreff: Verstehe die Kollision bei JNR nicht. |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe jetzt 2 mal die beiden Jump 'n' run tutorials der robsite durchgeackert. Und verstehe die Kollisions abfrage immer noch nicht. (Ja ich habe auch im Forum gesucht)
Könnte mir das mal einer Erklären Code: [AUSKLAPPEN] If KeyDown(links) Then
If map(Player_pos_x /32,(Player_pos_y +16) /32)=0 Then ;diese Zeile versteh ich nicht Player_pos_x = Player_pos_x -4 If Player_pos_x =< 0 Then Player_pos_x = 1 EndIf Und falls es eine einfachere Methode gibt könnt ihr es natürlich auch sagen. |
||
User posted image
kommt in meinen Runescape clan |
![]() |
Progger93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
mit Code: [AUSKLAPPEN] If map(Player_pos_x /32,(Player_pos_y +16) /32)=0 Then wird überprüft, ob im Array map (in welchem die MapInformationen sind) auf den Feldern Player_pos_x/32 (X Position des Spielers im Array, wenn er einen Schritt nach links macht) und (Player_pos_y +16) /32) (Y Position des Spielers im Array, wenn er einen Schritt nach links macht) kein Hindernis Vorhanden ist (=0 -> kein Hindernis). Wenn keines da ist wird der Spieler um 4 Pixel nach links bewegt.
|
||
MfG Pascal
Win 7|T7250@2.0Ghz|3GB RAM|M8600GT |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist die einfachste Methode ![]() Spielerposition X = 100 als Beispiel 100 / 32 = 3,125 Da wir aber mit Integern rechnen wird gerundet, in unserem Fall wäre also das Ergebniss 3. Das ganze wenden wir jetzt auf die Tilemap an: If map(3,bla) > 0 Then links_ist_was_im_weg Simpel ![]() ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Razor1994 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja so ungefähr hab ich das auch schon kapiert.(glaub ich^^) Aber ich weiss nicht von wo jetzt die Zahlen kommen. Z.B. ist das geteilt durch 32 die grösse des tiles oder des Spielers? Und was ist das 16?
Vielleicht stehe ich auch nur auf dem Schlauch. |
||
User posted image
kommt in meinen Runescape clan |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die 32 ist die Tilegröße. Die 16 ist die Hälfte des Spielers (der ist auch 32 Pixel hoch). Skizzier Dir das wirklich einfach auf ein Blatt Papier. Eine kleine Map mit 32x32'er Tiles und einen Spieler der auch 32x32 Pixel hat. Dann hast Du es "Face to Face" vor Dir, das macht es wesentlich einfacher. Nimm beim ersten Mal vielleicht einfach angenommene Positionen die durch 32 teilbar sind, dann machts schon beim aufskizzieren "Bing" ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich denke, es geht bei den 16, die dazugezählt werden, um die Mitte der Tiles.
Ein Tile ist 32x32 Pixel groß. Seine linke Ecke liegt bei (0/0), sein Zentrum aber bei (16/16). Da beim Teilen durch 32 ja nur der Integerteil zurückbehalten wird und die Nachkommastellen keine Berücksichtigung finden, kann es nun zu Situationen kommen, wo sich gerade aus der Berechnung der linke Ecke ein Rundungsfehler ergibt. Berechnest Du das Ganze aber mit dem Zentrum des Tiles wird die korrekte Position errechnet. Beispiel: der Spieler steht optisch gerade so auf dem 2.Tile von links z.B. mit seinem Zentrum auf (34,16). Seine linke Ecke (x/y-Malpunkt) ist also erst (18/0) . Willst du nun wissen, auf welchem Feld er steht, und berechnest es aus dieser x-Koordinate 18, dann ergibt sich 18/32=0.55=0, also scheinbar auf der 1.Tile-Reihe. Berechnest du aber (18+16)/32=1.05=1, also bereits 2.Tilereihe. |
||
Razor1994 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Aha jetzt hats "klick" gemacht.
danke Zur kontrolle ob ichs auch verstanden habe, dann wäre bei einer figur von 64*64 und einer tile grösse von 32*32 der Code: [AUSKLAPPEN] If KeyDown(links) Then
If map(Player_pos_x /32,(Player_pos_y +32) /32)=0 Then Player_pos_x = Player_pos_x -4 ; X-Position -4 If Player_pos_x =< 0 Then Player_pos_x = 1 EndIf ElseIf KeyDown(rechts) Then If map((Player_pos_x +32) /32,(Player_pos_y +32) /32)=0 Then Player_pos_x = Player_pos_x +4 If Player_pos_x => 608 Then Player_pos_x = 607 EndIf EndIf Und noch ne Frage sollte man es also vermeiden(oder zumindest als Anfänger?) Tiles oder Figuren mit "komischen" ungeraden Grössen zu nehmen? |
||
User posted image
kommt in meinen Runescape clan |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das spielt keine Rolle...Theoretisch kannst Du sogar deinen Player "hautnah" an die Objekte heranlassen, indem Du die wirklichen Ausmaße des Playerumrisses statt der Tile-Größe verwendest.
Also, ist der Player in seiner Tile nach unten (oben) bis zum letzten Pixel an den Randgemalt, dann testest Du in diese Richtung... Zitat: (PlayerY+64-0)/32
Sind dort noch 5 Pixel "Luft", dann wäre auch... Zitat: (PlayerY+64-5)/32
...noch denkbar. Das kannst Du für jede Seite individuell gestalten. Es hängt ja auch davon ab, wie die "Kollisions-Tiles" gemalt sind. Füllt. z.b. eine Mauer ihren Tile komplett, dann wäre bei einer Bewegung nach rechts Zitat: (PlayerX+64)/32
...schon das Maximum. Steht die Mauer erst ab der Mitte ihres Tiles (so macht man das normalerweise), dann... Zitat: (PlayerX+64-16)/32
In den Beispielen bin ich jetzt davon ausgegangen, dass die PlayerTile 64/64 ist und die Playerkoordianten sich auf seine linke obere Ecke beziehen. Handelt es sich bei den Player-Koordinaten um das Zentrum des Player so gilt z.b für das letzten Beispiel: Zitat: (PlayerX-32+64-16)/32
Folgende vier Seiten-Tests sind möglich: (Voraussetzung: Hindernisse beginnen immer ab der halben Tile) Zitat: links (PlayerXMitte - HalbePlayerGröße + HalbeTileGröße + PlayerRandLinks) / TileGröße rechts (PlayerXMitte + HalbePlayerGröße - HalbeTileGröße - PlayerRandRechts) / TileGröße Oben (PlayerYMitte - HalbePlayerGröße + HalbeTileGröße + PlayerRandOben) / TileGröße Unten (PlayerYMitte + HalbePlayerGröße - HalbeTileGröße - PlayerRandUnten) / TileGröße Das ganze ist aber theoretisch und keine Garantie auf Richtigkeit, aber beim Testen würde man ja merken, ob er an Objekte dann zu nahe herankommen kann... |
||
Razor1994 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke jetzt hab ichs ganz kapiert. Ihr wart mir wirklich eine grosse Hilfe. | ||
User posted image
kommt in meinen Runescape clan |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group