Hack n' Slay Ansatz gesucht

  • GM 7

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

  • Hack n' Slay Ansatz gesucht

    Hallo zusammen!

    Seit einigen Tagen spiele ich mit der Beta von GM8 herum, habe aber auch etwas Erfahrung mit GM7 (ich schreibe das, weil ich eher selten hier bin). Nun dachte ich mir, ich mache mal aus Spaß was in Richtung Hack n' Slay. Nun habe ich einen netten Boden, eine Figur die in ISO Perspektive steht (ein Bild) und 8 Animationen (je 15 Frames) damit die Figur in alle Richtungen laufen kann. Gewollt ist, dass ich irgendwo hin klicke und meine Figur mit der korrekten Animation da hin geht.

    Das dumme ist, ich weiß nicht, wie ich da anfangen soll. Kennt jemand ein einfaches Beispiel dafür? Ich habe grundsätzlich folgende Probleme.

    1.) Abfrage der Position der Maus, egal wie groß die Welt ist.
    2.) Figur bewegt sich mit der richtigen Animation da hin und schaltet am Ende in das stehen Bild.
    3.) Was ist mein "Master" Objekt? Die Maus selber oder die Figur?

    Mir fehlt vor allem der Ansatz. Man glaubt es kaum, aber bis jetzt habe ich, wenn überhaupt, nur in Menüs eine Maus gebraucht. ;(
  • Danke, damit konnte ich schon viel anfangen. Meine Figur bewegt sich nun dort hin, wo ich hin klicke und umkurvt auch noch Hindernisse. Das Problem welches ich jetzt noch habe ist mit den Animationen, also dass er je nach dem wie er sich bewegt (8 Richtungen) die richtige Animation abspielt.

    Kann mir da noch jemand einen Wink mit dem Zaunpfahl geben? :D
  • also dieser post soll möglichst erklären und beinhaltet am anfang keinerlei codes die man 1 zu 1 kopieren kann(und fehlerhaft sein könnte, da nicht getestet):

    am ende ist jedoch ein "besser" geschriebenes example, das nicht von mir stammt

    abhängig von der image_speed wird image_index immer um eins vergrößert und wenn es beim maximum angekommen ist wieder zu 0 ...

    das ist so automatisch.

    nun kommts auf dein sprite an.... ich nehme an du hast 8 mal eine animation für 8 verschiedene richtungen.

    setze die image_speed=0 im create event und im step oder ähnlichen event (völlig egal welcher, hauptsacxhe er wird ständig ausgeführt und man kann nen code reinschreiben, also zB step oder sogar draw ....) berechnest du abhängig von der richtung deine grenzen die image_index haben soll.

    hast du 8 richtungen mit je 10 bildern (ist n beispiel), dann ist direction/360*8 dene "richtung" nur kommen da auch kommazahlen raus, die muessen noch weg !

    das kannsd du mior roudn oder floor oder ceil machen, komtm drauf an wann du willsd dass eine richtung umschlägt auf die nöchste "richtung".

    ich würde floor nehmen (round würde ich Nicht nehmen, lieber noch ceil).

    also floor(direction/360*8) und dann brauchst du noch die verbindung zu den 10 bildern pro richtung.

    so bekommst du werte zwischen 0 und "kleiner 8" (also 8 nicht mehr, da 8 wieder 0 ist (360=0 grad))

    dann nimmst du das einfach mal 10, dann hast du denen startpunkt.

    den startpounkt nenn ich nun "sp";

    der endpunkt ist der startpunkt der "nächsten" richtung minus 1 bild, (also anfang der nöchsten richtung - 1 = ende díeser richtung)

    dafür musst du bei den werten die du durch floor(...) erreichst +1 dazurechnen und am besten "mod 8" dahinter setzen (das vorherige in klammern)

    das hat den sinn, da falls du 8 rausbekommst (was ja wieder 0 ist) dann bekommst du fehler, und 8 mod 8 ist eben 0 ! so schaffsd du einen periodischen ablauf.

    dieser endpunkt wird nun "ep" genannt.

    in jedem step erhöhst du dann image_index um 1 bis er "ep+1" beträgt ( größer ep) ist und setzt ihn wieder auf "sp".

    wie du das amchst is egal, das kannsd du mit if machen, oder auch wieder mit image_index=sp+zählvariable mod 8 // periodischer ablauf.



    also heir ein example:

    subimg=(radtodeg(w*pi)div( 360 / 8 ))*((image_number)div( 8 ));
    subimage_cycle(subimg,subimg+(image_number div( 8 ))-1); // das is n script

    das script_

    if (image_index < argument0 || image_index > argument1)
    {
    image_index = argument0;
    }
  • Benutzer online 1

    1 Besucher