Direction einer Instanz bei speed 0

  • GM 8

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

  • Direction einer Instanz bei speed 0

    Hallo ihr,

    ich wollte mal fragen, ob jemand eine Funktion in petto hat, mit der ich die momentan direction einer Instanz rausfinden kann, wenn sie sich nicht bewegt. So wie ich es sehe, kann ich es wahrscheinlich nur über ihren image_index rausfinden, in welche Richtung sie steht, da die direction bei speed 0 ja immer nur 0 ist. Gibt es da vielleicht noch was eleganteres, als über den image_index zu gehen?

    Ich möchte bei einem drehbaren Object eine Aktion nur dann zulassen, wenn sich der Spieler innerhalb eines Winkels von +45 und -45 davor befindet.

    Gruß, Benny
  • glaube ihr versteht ihn falsch.

    Denke er meint das er die Direction rausfinden will auch wenn die Geschwindigkeit null ist also praktisch die letzte vorhandene Direction.

    Also schreib:

    if !(speed = 0) then deine_direction = direction;

    Somit wird deine_direction nur auf die direction gesetzt wenn speed nicht gleich null ist.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Danke für die Antworten...also es ging mir darum, dass ich wissen musste, in welche Richtung die Instanz gedreht ist, auch wenn sie eine speed von 0 hat. Da ja aber die direction bei speed 0 immer auch 0 ist konnte ich direction nicht benutzen. Ich habe das jetzt auch über image_index gelöst. Ich prüfe also, welcher image_index nach der drehung da ist und schließe von daher auf die richtung. Das klappt... .



    Wisst íhr vielleicht noch, ob es möglich ist, eine variable auf den sprite_index zu setzen? Also praktisch genauso, wie man image_index = direction machen kann? Da er beim sprite_index aber eine ressource haben will, klappt das so bis jetzt nicht.



    Gruß, Benny
  • Hi

    Also ich löse es meistens mit Image_angle.
    Ich gebe dir mal ein Beispiel
    Greate event: (Objekt Falkgeschütz)

    GML-Quellcode

    1. ///////////////////////////////////////////
    2. // Falkgeschütze ausrichten - nach oben //
    3. ///////////////////////////////////////////
    4. {
    5. global.aktueller_Winkel = 0;
    6. Anfangswinkel = 90;
    7. image_angle = Anfangswinkel;
    8. }


    Step event: (Objekt Falkgeschütz)

    GML-Quellcode

    1. ////////////////////////////////////////////////////////
    2. // Flaks auf der linken Seite drehen sich zum Player //
    3. ////////////////////////////////////////////////////////
    4. {
    5. dis_Flaks = point_distance(x,y,obj_Player.x,obj_Player.y);
    6. Winkel = (point_direction(x,y,obj_Player.x,obj_Player.y));
    7. Winkel_Anfang = Anfangswinkel;
    8. /////////////////////////////////////////
    9. // Die Kanonen drehen sich zum Player //
    10. /////////////////////////////////////////
    11. if (dis_Flaks<400)
    12. {
    13. if (Winkel <135 && Winkel >45) // Die Kanone bewegt sich nur zwischen 45 Grad und 135 Grad
    14. {
    15. image_angle = scr_rotate(Winkel,5,image_angle);
    16. global.aktueller_Winkel = image_angle
    17. }
    18. }
    19. else
    20. {
    21. image_angle = scr_rotate(Winkel_Anfang,5,image_angle);
    22. }
    23. }
    Alles anzeigen


    Scrippt - scr_rotate

    GML-Quellcode

    1. // argument0 = Winkel zu dem gedreht werden soll.
    2. // argument1 = Rotationsgröße.
    3. // argument2 = Aktueller Winkel.
    4. var angle,d;
    5. angle=argument2
    6. d = angle-argument0
    7. if (abs(d)<=argument1)
    8. {
    9. angle=argument0
    10. }
    11. else
    12. {
    13. if (d>180)
    14. {
    15. d-=360;
    16. }
    17. else if (d<-180)
    18. {
    19. d+=360;
    20. }
    21. if (d>0)
    22. {
    23. angle=(angle+360-argument1) mod 360;
    24. }
    25. else
    26. {
    27. angle=(angle+argument1) mod 360;
    28. }
    29. }
    30. return (angle)
    Alles anzeigen


    Das Script stammt nicht von mir. Das hat einer von hier geschrieben. Das Script bewirkt das die die Kanone langsam zum Player ausrichtet.

    So hoffe das es dir weiter helft.

    Gruss Drachen :)

    P.S.
    Leiter läst es deine Signatur offen welche Versino du von GM benutzt. Wenn du keine gekaufte Version besitzt, funktioniert image_angel nicht.
    Dann ist mein Betrag für die Katz :D

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

  • Jau...wenn man das Symbol bei DnD benutzt dann wird die direction null...bei speed 0 nicht...danke dafür :) . Wieder was gelernt.



    Ich kann schreiben image_index = direction. Wenn ich dann 360 subimages habe, werden die automatisch bei der entsprechenden direction eingesetzt. So was ähnliches bräuchte ich mit sprite_index. Ich kann hier keine subimages verwenden sondern muss das sprite nach bestimmten Gesichtspunkten wechseln.



    Ich müsste sonst schreiben:



    Quellcode

    1. if (inhalt > 0 && inhalt <= 18)
    2. sprite_index = spr_1K
    3. else if (inhalt > 18 && inhalt <= 36)
    4. sprite_index = spr_2K






    und das dann bis zu einem sprite_index von spr_60K...das wird aber bissl viel. Jetzt hab ich zwar eine Möglichkeit, das benötigte sprite zu berechnen, ich weiß aber nicht welches VariablenFormat die funktion sprite_index erwartet, da sie ja ressourcen braucht.



    Gruß, Benny
  • Ressource sind auch nur Zalhlen! bzw Konstanten, wenn man es abe rmit zahlen eingibt kann es probleme geben.

    Erster Vorschlag:

    mach die 60 Sprites (was ich aber eher unsinnig finde; warum brauchst du so viele Sprites? Du kannst alles in ein Sprite tun und nur die bestimmten Subimages durchspulen, geht mit code. naja egal), undbedingt nacheinander in der richtigen Reihenfolge in den Sprites-tree im GM und füg später keine neuen ein oder lösche sie. Dadurch sind die Zahlen des Sprites aufeinander folgen.

    Dann musst du nur noch schreiben:

    sprite_index = spr_1K + floor(Inhalt/18)




    Alternativ kannst du schreiben: sprite_index = variable_local_get("spr_"+string(floor(inhalt))+"K");


    Hab ich nicht ausprobiert sollte aber gehen. (oder versuch statt local, global einzusetzten, glaube dann ists richtiger xD (weis nicht ob konstanten als global gelten, glaube aber schon))

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)