Verstehe die Kollision bei JNR nicht.

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Razor1994

Betreff: Verstehe die Kollision bei JNR nicht.

BeitragMi, Mai 05, 2010 14:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Mai 05, 2010 14:59
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Mai 05, 2010 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist die einfachste Methode Very Happy Rechne das ganze einfach mal auf Papier wie es der Computer machen würde:

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 Very Happy Einfach vorstellen oder aufmalen (das habe ich bei meinem ersten Jump'n Run gern gemacht wenns um so Geschichten ging) wo der Bezugspunkt der Grafik ist und von Hand rechnen. Nach ein paar mal machst Du das mit verbundenen Augen Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Razor1994

BeitragMi, Mai 05, 2010 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Mai 06, 2010 1:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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" Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Midimaster

BeitragDo, Mai 06, 2010 8:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Mai 06, 2010 8:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Mai 06, 2010 9:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Mai 06, 2010 11:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke jetzt hab ichs ganz kapiert. Ihr wart mir wirklich eine grosse Hilfe.
User posted image
kommt in meinen Runescape clan

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group