Grid

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hi

    Als ich so bei einem andern Forum (von mir) ein Gamebeispiel bekommen habe, stiess ich auf ein anderes Problem, oder eher eine Gelegenheit.
    Ich dachte das ist ein föllig anderes thema; deswegen das neue Forum

    Ich hab bei dem Beispiel gesehen, dass man so ein Gitter machen kann, dass heisst, dass der Spieler wenn er z.B. "A" (kurz) klickt 16px nach links geht, und wenn ich "A" halte der einfach weiter... geht.

    Jetzt hab ich das (alles was mir zum Gitter gehörend erschien) grösstenteils übernommen, es ein wenig angepasst, aber es funktioniert nicht recht:

    Wenn ich jetzt "A" klicke geht mein Spieler nicht 16px nach links sondern (5x16=...) 80px.


    Wieso?

    Der Spieler ist 16x16px, Visible und Solid.

    Ich hab bei diese Actions:
    mit snap hor: 16 und snap vert: 16
    mit obj_up, -_down, -_left, -_right*
    mit rauf, runter, links, rechts und Speed: 8

    *bei den Objects ist nichts drin, visible ON, solid OFF, kein Sprite

    Ich hab die Actions bei genau so angeordnet wie beim Beispiel.


    Bei <no key> hab ich:

    mit snap hor: 16 und snap vert: 16
    mit "mitte" und Speed: 8

    Bei A-key bzw. D-key, S-key, W-key hab ich:

    mit snap hor: 16 und snap vert: 16
    mit links bzw. rechts, rauf, runter und Speed: 5
    mit subimage: 0, speed: 1
    image_speed=1/6

    Bei hab ich noch image_speed=1/6


    Hmm ich glaube nicht, dass alles hier jetzt sehr wichtig war, aber man kann ja nie wissen...

    Gruss und schon mal Danke

    Goldendragon
    Schul-Abschlussarbeit: Gamesammlung

    Made with: Game Maker 8 Pro
    Fertigstellung: Frühling 2011


    Fortschritt:
    Games: 5/20 (voraussichtlich 20)
    Gameübersicht-Fortschritt: 0%

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Goldendragon ()

  • Off-Topic: Also ich glaube das bei einem Rechtschreibfehler bereits in der Überschrift keiner sogern hier antwortet!

    Also am einfachsten wäre es den Room_speed runter zu drehen oder aber einfach sagen das er im :event_keyrelease: Event die Position auf den Raster auf 16 runded also: :action_grid:

    Im :event_keypress: links oder rechts, oder wie auch immer, sagste dann :action_code: ( x-=16 ) leider weis ich jetzt nicht wie das in d&d ist!

    hoffe ich konnt ein bisschen helfen :)
    Whiterock
  • Oder noch einfacher

    Goldendragon schrieb:

    Bei A-key bzw. D-key, S-key, W-key hab ich:

    mit snap hor: 16 und snap vert: 16
    mit links bzw. rechts, rauf, runter und Speed: 5
    mit subimage: 0, speed: 1
    image_speed=1/6
    Speed anstatt auf 5, auf 8 zu setzten.
    Dann sollte das Problem eigentlich laufen.

    Das Problem ist, dass sich das Objekt in einem 16px Gitter befindet, jedoch 5px läuft. Somit hält dein Objekt erst, wenn es eine Position erreicht die mod16=>0 ergibt.
    Und die erste gemeinsame Stelle die sowohl mod16=0 als auch mod5=0 ergibt, ist nunmal 80 (16x5=80).

    Gruß,
    Mokuyobi
    木曜日 (Mokuyōbi)
  • Hmm also ich hab jetzt mal alles auf "Speed: 8" gestellt und es funktioniert. Allerdings sehe ich jetzt das das ziemmlich zu schnell ist... Wenn ich jetzt alles ( beim :event_step: und bei den :event_keyboard: Events) auf 5 stelle, geht das aber nicht mehr.

    Wieso?

    Ich hab doch nur die Geschwindigkeit geändert!
    Schul-Abschlussarbeit: Gamesammlung

    Made with: Game Maker 8 Pro
    Fertigstellung: Frühling 2011


    Fortschritt:
    Games: 5/20 (voraussichtlich 20)
    Gameübersicht-Fortschritt: 0%
  • Du verstehst anscheinend nicht wie der Code arbeitet.
    Wenn du überprüfst ob der Spieler sich in einem 16x16 Gitter befindet, wird eigentlich nichts anderes gemacht als geguckt, ob die Position des Spielers durch 16 Teilbar ist, ohne einen Rest zu haben (ebend mod16=>0).

    Befindet sich dein Spieler also an dem Punkt (160|160), und du hast einen Speed von 8 nach rechts ist die nächste Position (168 |160)
    X: 168/16=10,5
    Y: 160/16=10
    => X Position ist keine ganze Zahl, sondern hat einen Kommateil => Böse böse Objekt befindet sich nicht im Gitter -> Spieler geht weiter
    Der nächste Schritt wäre dann logischerweiße wieder 8px weiter nach rechts also (176|160)
    X: 176/16=11
    Y: 160/16=10
    => Beide Ergebnisse haben keinen Nachkommateil => das Objekt befindet sich im Raster.

    Was passiert wenn du bei einem 16x16 Raster eine Geschwindigkeit von 5px pro Step nimmst?
    Nehmen wir das obige Beispiel wieder:
    Es befindet sich also dein Spieler wieder an dem Punkt (160|160), und hat diesesmal einen Speed von 5px nach rechts ist die nächste Position (165 |160)
    X: 165/16=10,3125
    Y: 160/16=10
    => Oh my god . .. es gibt ein Nachkommateil => das Objekt befindet sich nicht im Raster, sprich also es bewegt sich somit weiter
    .
    .
    .
    dies geht solange weiter bis das Ergebnis wieder keinen Nachkommateil hat. Dies ist also 80px später (160+80=240/16=15).

    Was du dagegen machen kannst, das es langsamer geht aber sich das Objekt trotzdem in einem 16x16 Raster befinden muss? Der Speed muss multipliziert mit einem bestimmten Faktor 16 ergeben ohne Komma. Also 1,2,4,8,16
    1*16=16
    2*8=16
    4*4=16
    8*2=16
    16*1=16

    Dann Funktioniert es auch.

    Habe mal einen alten Thread gesucht und gefunden, wo ich damals ein Beispiel dazu gemacht hatte, vielleicht hilft es dir ja weiter:
    GM 8 objekte im raster bewegen

    Saludos,
    Mokuyobi
    木曜日 (Mokuyōbi)
  • Viiielen dank an Mokuyobi hat echt geholfen...
    Problem gelöst: Ich habs jetzt einfach auf 4 gestellt, und jetzt funktionierts.
    Hab aber trotzdem noch eine Frage: Wenn ich jetzt den Player, die Wände usw. auf 15x15px gemacht hätte, könnte ich auch ein grid 15x15px machen, und dann den Speed auf 5 stellen oder?
    Schul-Abschlussarbeit: Gamesammlung

    Made with: Game Maker 8 Pro
    Fertigstellung: Frühling 2011


    Fortschritt:
    Games: 5/20 (voraussichtlich 20)
    Gameübersicht-Fortschritt: 0%