wie erstellt man ein grenade throw

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

  • Auch mit den lengthdir funktionen, das len argument ist dabei laenge und dir ist dann ein wert der immer höher wird von 0 bis 180.

    Wie in den Tutorials aus diesem Thread.

    out now: KNOSSOS auf itch.io
    ancient-pixel.com <<< ich freue mich über einen Besuch! ^^
  • @Aku_Ryou

    also das funktioniert nicht...wenn ich es so schreibe

    GML-Quellcode

    1. laenge = (clamp(laenge,-256.-64))
    2. if laenge <= 0
    3. {
    4. clamp(laenge,-256,-64)
    5. mittelpunkt_x = obj_player.x + lengthdir_x(laenge,180);
    6. mittelpunkt_y = obj_player.y + lengthdir_y(0,180);
    7. }
    8. else
    9. {
    10. clamp(laenge,256,64)
    11. mittelpunkt_x = obj_player.x + lengthdir_x(laenge,0);
    12. mittelpunkt_y = obj_player.y + lengthdir_y(0,0);
    13. for (var index = 0; index < 180; index++)
    14. {
    15. draw_point(mittelpunkt_x +lengthdir_x(abs(laenge),index),mittelpunkt_y + lengthdir_y(maximalwurfhoehe,index));
    16. }
    17. }
    Alles anzeigen



    dann kommt eine fehlermeldung das die variablen laenge nicht initialisiert worden ist....und erstellt man dann eine variable mit einem wert funktioniert es garnicht mehr.
    und noch was wegen der granate die der linie entlang fliegt..ich müsste ja irgendwie die letzten koordinaten speichern und dann die zuvor gezeichnete kurve für die granate erstellen.
    aber hab da überhaupt keinen plan wie das funktionieren könnte.ich verstehe lengthdir zwar schon ein wenig...(könnte ohne probleme ein objekt um ein anderes fliegen lassen)aber das ist halt nicht genug

    nur nochmal zur erinnerung: es geht mir darum das man nur eine gewisse weite werfen kann also das die kurve zb nur 256 pixel weit gehn kann...aber man soll sie trotzdem noch bewegen können.

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

  • du musst vor dir clamp(laenge,265,64) das laenge = hinsetzen, sonst werden die beiden ja wieder falsch verwendet.
    An die Granate musst du dann nur mittelpunkt_x und mittelpunkt_y übergeben, damit die granate mit den lenghtdir funktionen um diesen Punkt dann rotieren kann. So wie in den Tuorials :)

    out now: KNOSSOS auf itch.io
    ancient-pixel.com <<< ich freue mich über einen Besuch! ^^
  • @Aku_Ryou
    ok danke .werds gleich mal probieren.


    EDIT: also ich hab trotzdem noch das problem das er schreibt das er die variable laenge nicht kennt.soll ich einfach ne variable damit erstellen???aber im prinzip haben wir die ja erstellt mit diesem code hier

    GML-Quellcode

    1. ​laenge = (clamp(laenge,-256.-64))


    aber wieso schreibt er trotzdem den error??

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

  • @Aku_Ryou

    hy sorry ich will dich nicht nerven aber bitte kannst mir helfen...also ich hab jetzt im create event laenge = 0; erstellt und dann im draw event deinen code also den hier

    GML-Quellcode

    1. //draw_sprite_ext(global.weapon_array[weapon,8],0,x,y,1,1,image_angle,c_white,1);
    2. draw_self();
    3. if (global.kurve == true)
    4. {
    5. laenge =(obj_player.x-mouse_x);
    6. if laenge <= 0
    7. {
    8. laenge = clamp(laenge,64,256)
    9. mittelpunkt_x = obj_player.x + lengthdir_x(laenge,180);
    10. mittelpunkt_y = obj_player.y + lengthdir_y(0,180);
    11. }
    12. else
    13. {
    14. laenge=clamp(laenge,-64,-256)
    15. mittelpunkt_x = obj_player.x +lengthdir_x(laenge,0);
    16. mittelpunkt_y = obj_player.y + lengthdir_y(0,0);
    17. }
    18. //draw
    19. for(i = 0; i < 180 ; i += 1)
    20. {
    21. draw_point(mittelpunkt_x +lengthdir_x(abs(laenge),i),mittelpunkt_y + lengthdir_y(maximalewurfhoehe,i) );
    22. }}
    Alles anzeigen



    und es funktioniert auch...es hört bei 256 auf und minimal bei 64 aber das problem ist das es jetzt nur mehr einseitig geht...also nur richtung rechts...und nicht mehr nach links.
    und wenn ich clamp(-256,-64) bei beiden mache geht es links wunderbar und wenn die maus.x grösser player.x ist geht die kurve zwar nach rechts aber bleibt bei 64 stehen...


    achja ich hab das länge = obj_player.x-mouse_x wieder genommen weil ich es ja mit der maus steuern wollte.es sollte so wie ganz am anfang sein das wenn die maus kleiner als obj player x ist dann soll es links sein
    und sich dort vergrössern oder verkleinern. und dasselbe für rechts wenn die maus grösser ist als obj player.x

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von acidrain833 ()

  • Ja das sieht ja gut aus :) was du beachten musst ist, dass der clamp befehl zuerst den minimalen wert und dann den maximalen wert haben möchte. Dh heißt bei den Zahlen im Minusbereich muss es clmap(laenge, -256, -64 lauten).

    out now: KNOSSOS auf itch.io
    ancient-pixel.com <<< ich freue mich über einen Besuch! ^^
  • @Aku_Ryou

    acha...ich dachte die ganze zeit es muss nur minus sein weil es ja nach links schaun soll.
    also so meinst du

    GML-Quellcode

    1. laenge =(mouse_x-obj_player.x);
    2. if laenge <= 0
    3. {
    4. laenge = clamp(laenge,64,256)
    5. mittelpunkt_x = obj_player.x + lengthdir_x(laenge,180);
    6. mittelpunkt_y = obj_player.y + lengthdir_y(0,180);
    7. }
    8. else
    9. {
    10. laenge=clamp(laenge,-256,-64)
    11. mittelpunkt_x = obj_player.x +lengthdir_x(laenge,0);
    12. mittelpunkt_y = obj_player.y + lengthdir_y(0,0);
    13. }
    Alles anzeigen



    aber das geht nicht leider
    und wenn ich bei ersten clamp auch - davor setze geht es auch nicht.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von acidrain833 ()

  • @Aku_Ryou ja eh das hatte ich schon das geht trotzdem nicht..

    also jetzt hab ichs so

    GML-Quellcode

    1. laenge =(mouse_x-obj_player.x);
    2. if laenge <= 0
    3. {
    4. laenge = clamp(laenge,-64,-256)
    5. mittelpunkt_x = obj_player.x + lengthdir_x(laenge,180);
    6. mittelpunkt_y = obj_player.y + lengthdir_y(0,180);
    7. }
    8. else
    9. {
    10. laenge=clamp(laenge,256,64)
    11. mittelpunkt_x = obj_player.x +lengthdir_x(laenge,0);
    12. mittelpunkt_y = obj_player.y + lengthdir_y(0,0);
    13. }
    14. //draw
    15. for(i = 0; i < 180 ; i += 1)
    16. {
    17. draw_point(mittelpunkt_x +lengthdir_x(abs(laenge),i),mittelpunkt_y + lengthdir_y(maximalewurfhoehe,i) );
    18. }}
    Alles anzeigen


    aber das geht nicht...wenn der code so ist wird nur rechts vom player die kurve gezeichnet und man kann sie nur in 2 schritten mit der maus ändern auf 64 oder 256;


    aber wenn ichs so mache

    GML-Quellcode

    1. laenge =(mouse_x-obj_player.x);
    2. if laenge <= 0
    3. {
    4. laenge = clamp(laenge,-256,-64)
    5. mittelpunkt_x = obj_player.x + lengthdir_x(laenge,180);
    6. mittelpunkt_y = obj_player.y + lengthdir_y(0,180);
    7. }
    8. else
    9. {
    10. laenge=clamp(laenge,64,256)
    11. mittelpunkt_x = obj_player.x +lengthdir_x(laenge,0);
    12. mittelpunkt_y = obj_player.y + lengthdir_y(0,0);
    13. }
    14. //draw
    15. for(i = 0; i < 180 ; i += 1)
    16. {
    17. draw_point(mittelpunkt_x +lengthdir_x(abs(laenge),i),mittelpunkt_y + lengthdir_y(maximalewurfhoehe,i) );
    18. }}
    Alles anzeigen


    dann funktioniert es das es grösser und kleiner wird ganz schön mit der maus...aber das problem ist da noch immer das es nur rechts vom player geht und nicht mehr links...



    und ja ich habe schon mehrere versionen und arten probiert.

    bitte das hängt mir so am hals raus weil ich einfach selbst noch nicht soweit bin um es selbst zu machen..
  • Na dann setz mal laenge auf einen fixen Wert und schreibe statt if laenge <= 0 if mouse_x <= obj_player.x.
    Wenn es dann immernoch nicht funktioniert liegt der Fehler woanders.


    Mein Fehler!!!: so ist es richtig:

    GML-Quellcode

    1. laenge =(mouse_x-obj_player.x);
    2. if laenge <= 0
    3. {
    4. laenge = clamp(laenge,-256,-64)
    5. }
    6. else
    7. {
    8. laenge=clamp(laenge,64,256)
    9. }
    10. mittelpunkt_x = obj_player.x + lengthdir_x(laenge,0); //wenn laenge negativ ist wird sie nach links gedrawed dh brauchen wir nicht dasselbe mit 180 nochmal hinschreiben
    11. mittelpunkt_y = obj_player.y + lengthdir_y(0,0);
    12. //draw
    13. for(i = 0; i < 180 ; i += 1)
    14. {
    15. draw_point(mittelpunkt_x +lengthdir_x(abs(laenge),i),mittelpunkt_y + lengthdir_y(maximalewurfhoehe,i) );
    16. }
    Alles anzeigen


    out now: KNOSSOS auf itch.io
    ancient-pixel.com <<< ich freue mich über einen Besuch! ^^
  • @Aku_Ryou


    yeahhhhhhhhhhhh
    toll danke es funktioniert du bist der beste thx......jetzt hab ich nur mehr das problem mit der granate selbst das sie dort entlang fliegt sobald man G auslässt...mit welcher funktion sag ich dann das die granate an der letzten kurven position entlang fliegt??doch nicht mit draw sprite oder.

    ich weiß du hast mir dein tutorial gesagt das ich es mir ansehen soll und das hab ich aber könntest du dort mal reinschauen..weil ich hab da einige probleme.
    Objekte auf einer Kreisbahn bewegen
  • Konntest du das Problem mittlerweile lösen? Also fliegt die Granate jetzt den Bogen entlang? Stehe momentan vor so ziemlich dem selben Problem, finde auch keine nützlichen Tutorials...
    Es gibt 10 Arten von Menschen: Diejenigen, die Binärcode verstehen und die, die es nicht tun ^^