Jump&Run: Player hakt

  • GM 8
  • Jump&Run: Player hakt

    So, ich hoffe das ist jetzt vorerst meine letzte Frage ;)

    Ich wollte meinen Player (einen Block) in ein Strichmännchen ändern...

    Ich habe also einen Player02, eine Gun02 (und die Sprites^^) erschaffen, um das zu testen und zur Not auf den alten Player zurückgreifen zu können...
    Das Problem ist jetzt:

    Mein Player spawnt und wenn ich <D> zum laufen drücke, kommt zwar die Animation, aber er rührt sich nicht von der Stelle... Wenn ich dann springe und laufe (es gibt noch keine Sprungani...) läuft er, bis zum Wechseln der Richtung ganz normal, aber dann hakt er wieder fest. Und das trotz überprüfter Bewegungsabläufe im (Press A/D)-Event...

    Ich hab's mal angehängt... Weiß jmnd. weiter?

    Das ganze File ist jetzt vielleicht ein wenig unübersichtlich... Relevant hierfür sind jetzt (hoffe und glaube ich) nur das Object Player02, Gun02 und der TestRoom, den ich zum schnellen Testen erstellt habe (nichts großes und vor dem Hauptmenü, damit man schneller testen kann :)

    MfG
    Jnthn
  • Ohne es mir an zugucken, schätze ich, dass der Player keine Mask zugewiesen bekommen hat.
    Du musst sicherstellen, dass bei Image- und Spritewechseln, nicht plötzliche Teile des Sprites in solide Objekte ragen.
    Das tust du entweder indem du jedem Sprite die selbe Boundingbox zuweist und "Precise collision checking" deaktivierst oder aber einfach eine Mask zu weist, welche ein viereckigen Sprite beinhaltet.
  • Das Problem ist die Kollisions erkennung!
    Wenn du unter Sprites mal auf Player02 oder Player_Stand klickst, siehst du das kleine kästchen "Precise Collision Checking".
    Das bedeutet, der Game Maker geht kontrollier jeden Pixel, ob eine Kollision stattfindet. Da dein vorheriger Block-Spieler ein Viereck war, ohne "unreinheiten" sag ich mal, war hat alles einfach funktioniert. Nun hast du vllt rechts oder links 1-2 Pixel die überstehen.
    Am Einfachsten ist es dies so zu beheben, das du ein neuen Sprite machst, und dort ein viereck Zeichnest, das sich ca. fast genau über den Player legt (am besten Playersprite duplizieren, und dann ein viereck drüber legen. Drauf achten das es aber wirklich keine überstehenden Pixel hat).
    Dann gehst du in dein Player-Objekt, und gibst unter Mask (linke Seite der Objekt Informationen) dieses Viereckige Sprite als Mask an. Nun legt sich dies "wie eine Maske", die man nicht sieht, über die Spieler Instanz. Die Kollisionserkennungen werden nun mit den Viereck Sprite durchgeführt, zu sehen ist aber der Spieler Sprite.

    Es gibt auch eine Lösung, das man im Sprite selbst unter dieses Precise Collision Checking auf Modify Mask klickt, und es darüber handelt, find ich bei sowas aber als Nachteil, wenn du mehrere Sprites für dein Spieler benutzt, da du dies bei jedem Spieler Sprite dann (gleich! Ansonsten kommen neue Fehler) einstellen müsstest.

    Mfg.,
    Mokuyobi
    木曜日 (Mokuyōbi)
  • tausend dank^^

    jetzt funktioniert es^^

    aber mir sind 2 schönheitsfehler in dem game aufgefallen... und zwar:

    Ich habe 2 verschiedene Feinde... Sie sollen immer in eine bestimmte Richtung schauen:

    Enemy01: Kann sich NICHT bewegen... soll also in Richtung des Spielers schauen
    Enemy02: Kann sich BEWEGEN... Soll immer in die Richtung schauen, in die er läuft...

    Wie funktioneirt das?

    thx im voraus

    MfG
    Jnthn