Gradius - Option-Bewegung

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

  • Gradius - Option-Bewegung

    Ich versuche gerade die options (die orangenen Flugobjekte) aus Gradius nachzumachen.
    Ich komme aber nicht drauf wie man die Bewegung codet.

    Die Teile verfolgen den Spieler mit etwas Abstand.
    Man kann bis zu 4 Stück davon haben.
    Sie machen jede Spielerbewegung mit etwas Verzögerung genau nach.

    Für die, die das Spiel nicht kennen gibts hier ein Video:
    host-a.net/getfile.php?usern=battlegorge2&file=gradius.wmv
  • Hm, das genau nach zu proggen wird schwer, aber ich kanns versuchen das so in der art zu machen.

    Im Step Event der Teile:

    GML-Quellcode

    1. // damit wird abgefragt, ob sich der Flieger gerade bewegt
    2. //alternativ kann man auch abfragen, ob eine entsprechende Taste gedrückt wird.
    3. if (flieger.xprevious != flieger.x) || (flieger.yprevious != flieger.y)
    4. {
    5. move_towards_point(flieger.xprevious,flieger.yprevious,speed)
    6. }
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • GML-Quellcode

    1. {
    2. sp=4; //geschwindigkeit der kugeln/options
    3. if(point_distance(x,y,obj_1.x,obj_1.y)>64)
    4. {
    5. dir=point_direction(x,y,obj_1.x,obj_1.y);
    6. x+=sp*cos(degtorad(dir));
    7. y-=sp*sin(degtorad(dir));
    8. }
    9. else if(point_distance(x,y,obj_1.x,obj_1.y)<48)
    10. {
    11. dir=point_direction(x,y,obj_1.x,obj_1.y);
    12. x-=sp*cos(degtorad(dir));
    13. y+=sp*sin(degtorad(dir));
    14. }
    15. else
    16. {
    17. dir=point_direction(x,y,obj_1.x,obj_1.y);
    18. x=obj_1.x+56*cos(degtorad(dir+180));
    19. y=obj_1.y-56*sin(degtorad(dir+180));
    20. }
    21. }
    Alles anzeigen

    ich übertreibs natürlich wieder einmal... egal :D ist nicht genau das selbe aber ähnlich^^

    Dragoon
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • @Fallout:
    Das klappt so nicht.
    Wenn das Option links neben dem Spielerraumschiff fliegt, und der Spieler drückt "runter", muss es erst nach rechts fliegen.
    Erst an der Stelle wo der Spieler "runter" gedrückt hat fliet es nach unten.

    Das mit der Verzögerung war auch falsch formuliert von mir.
    Die Options reagieren direkt, wenn der Spieler sich bewegt, ohne Verzögerung.
    Sie fliegen die Flugbahn des Spielers mit ewtas Rückstand nach.
    WIe bei einem Autorennen.

    @Kilik
    Eine Abfrage wie sich der Spieler bewegt habe ich schon.
    Jeder Tastenkombination wird eine Numpad-Zahl zugeordnet, bei 5 bleibt der Spieler stehen.

    Bei move_towards_point fliegen die Options genau auf den Spieler, sie sollen aber mit Rückstand die Flugbahn des Spielers genau verfolgen.
    Da hänge ich gerade fest.

    @Dragoon
    Nicht schlecht aber was anderes.
    Options die sich so bewegen habe ich aber auch schon in einem Spiel gesehen.
  • Du mußt das ganze mit einem Array lösen, welches sich merkt wo der Spieler bzw. das vorige Option vor z.b. 20 Steps war. Ich hab mal n kleines Demo zusammengeschußtert um zu zeigen was ich meine.
    Dateien
    • vicviper.zip

      (7,09 kB, 171 mal heruntergeladen, zuletzt: )
    ...
  • Das funktioniert richtig gut.
    Wie im original :top:

    Ich habe nur noch 2 kleine fragen dazu.
    Wie baue ich meine "scrollingspeed = 1" (view_xview+=1) noch in das script ein?
    Die Options bleiben dann nicht stehen.

    Und wie verhindert man, dass die Abstände zu gross werden, wenn man ein paar speedups hat?
  • Das mit dem Abstand ist relativ simpel. Die Variable Difference sagt an, wieviele Array steps durchlaufen werden. Wenn das Schiff einen Speed von 1 hat und 24 Steps vorhanden sind, muß man bei einem Speed von 3 die Steps auf 8 runterschrauben. Damit die Options nicht fröhlich herumhüpfen muß man das Array vergrößern bzw verkleinern und seine Werte anpassen (einige fallen Weg bzw werden dupliziert).

    Das Problem mit der View ist auch nicht so kompliziert. Alle Operationen die direkt auf x und y gehen, auf einen Relativen X oder Y wert umleiten und später auf X und Y die entsprechenden View Werte zu den Relativen X und Y werten addieren.
    Dateien
    • vicviper.zip

      (8,44 kB, 158 mal heruntergeladen, zuletzt: )
    ...
  • Original von Shoba
    Das mit dem Abstand ist relativ simpel.

    Original von Shoba
    Das Problem mit der View ist auch nicht so kompliziert.

    Das beißt sich irgendwie mit dem restlichen Inhalt deines letzten Posts.^^
    Aber ich denke aus dem Example werde ich auch noch so einiges lernen können.
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • Gut, falsch formuliert. Die Theorie ist nicht so kompliziert (Array vergrößern bzw verkleinern). Die Technische ausführung ist das Komplizierte daran ~ allen vorran ist das vergrößern des Arrays (also wenn das schiff wieder langsamer wird) nicht ganz ruckelfrei. Ansich würde man dort Interpolationsroutinen benötigen. Sonst hüpft die Option in 6 Pixel schritten hinterher bis sich das Array neu gefüllt hat.
    ...