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

  • wie erstellt man ein grenade throw

    hy

    also ich würde gerne einen grenade throw erstellen und ich denke das ich es schaffen würde das mit der granate werfen aber ich will das wenn man auf den knopf sagen wir g drückt
    das dann eine kurvige linie erscheint die anzeigt wie weit und wohin man werfen kann und das ist mein problem ich weiß nicht wie ich das erstellen kann.wäre echt toll wenn ihr mir da
    helfen könnt.
  • wirklich das kann ich dafür verwenden ...woow auf das wäre ich wirklich nie gekommen danke dir...und wenn ich den path drawen lasse kann ich denn dann auch
    ohne probleme mit der mouse bewegen???



    und noch eins wenn ich den path drawen hab lassen wie kann ich ihn wieder löschen????

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

  • danke für die tolle antwort.........kannst du mir wenigstens erklären wie ich das mache wie sag ich das ich den path mit der maus bewege und das er immer beim player anfängt...

    und wie kann ich einfach aufhören zu drawen...mit welcher funktion....
  • A) Wenn du ihn in deinem Player Objekt zeichnen lässt sollte es so gehen:

    draw_path(path, mouse_x, mouse_y, false);

    Wobei "path" der Name deines zuvor gespeicherten Path sein muss

    B) Du schaltest bei Tastendruck eine Variable zwischen true und false hin und her und setzt vor den obrigen Code eine If Abfrage die nur den Code ausführen soll wenn die Variable auch true ist. Zb.:

    if MeineVariable = true
    { CodeVonOben }

    So wirds eben nur gezeichnet wenn du davor au die Taste gedrückt hast.
    Aber solche Funktionen hast du doch schon zuhauf in deinen Codes die du immer postest. Sollte also kein Problem sein.
  • fast genauso hatte ich es nur das ich statt false true benutz hab...

    ja sorry wegen dem mit den variablen daran hab ich einfach nicht gedacht eben wegen dem draw event...das hat mich einfach zu irritiert....

    klar kenn ich das ....danke dir




    @CallMeLegend und alle anderen User

    sorry wenn ihr glaubt das ich nicht nett schreibe und bin....aber genau so meine ich es.....immer nett....ich hab fast noch nie jemanden was schlechtes geschrieben.
    es ist halt meine art wie ich schreibe....das kann man falsch verstehn .....also merkt euch eins....ich meine es immer gut...
    ach und anscheinend stört es euch wenn ich soviel poste...was ich aber nicht verstehe da ich soviel wie möglich lernen will und da muss ich halt viel fragen ....will
    niemanden damit nerven wirklich nicht...aber wenn ich bei einer sache nicht weiterkomme mache ich daweil eine andere bis ich dort nicht weiterkomm.....lol


    EDIT: also ich weiß nicht ob das das richtige ist mit draw_path.....weil 1tens sollte es fest am player sein....und wenn man die maus bewegt wird die kurve kürzer oder länger oder höher .....versteht ihr was ich meine?????und wenn man dann die taste g loslässt wirft man die granate die kurve entlang......

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

  • Da kannst du eigtl gleich die lengthdir funktionen verwenden.

    du willst eine ellipse zeichen die den mittelpunkt auf halben weg von player zu aufschlagspunkt hat.

    GML-Quellcode

    1. laenge = (mouse_x - obj_player.x)/2;//entfernung von player zur maus durch 2
    2. if laenge <= 0
    3. {
    4. mittelpunkt_x = obj_player.x + lengthdir_x(laenge,180);
    5. mittelpunkt_y = obj_player.y + lengthdir_y(0,180);
    6. }
    7. else
    8. {
    9. mittelpunkt_x = obj_player.x + lengthdir_x(laenge,0);
    10. mittelpunkt_y = obj_player.y + lengthdir_y(0,0);
    11. }
    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


    nicht verzagen falls du den code nicht umsetzen kannst, aber vllt bringt er dir was

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • trotzdem brauchst du nur ein Objekt was den Pfad abgeht und alle n-pixel einen Strich malt zwichen x,y,xprevious,yprevious. In dieser Schleife simulierst du das werfen. Das muss entweder jedes mal im Drawevent berechnet werden oder du malst es auf ein Surface und berechnest nur neu wenn die Distanz verändert wurde
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
  • @Aku_Ryou

    woooowww das ist genau das was ich wollte....echt klasse..wirklich...wahnsinn...jetzt muss ich nur noch das problem lösen das er sich nicht aufhängt...lol

    es ist so sobald es gezeichnet wird fangt das spiel an zu hängen....und langsamer zu werden....wahrscheinlich weil es andauernd zeichnet..oder....ich werds mal mit
    ner variable probieren .und ich wollte machen das es nur eine gewisse reichweite funktioniert also hab ich die variable maximaleweite und minimaleweite erstellt und herumprobiert aber ich kriegs nicht hin
    das er nur maximal soweit werfen kann.......und dann muss ich noch die granate dort entlangfliegen lassen.....werd mal alles probieren...
    hab aber einen kleinen fehler bei deinem code endeckt lol....mittelpunkt.x ist falsch es gehört mittelpunkt_x aber das weißt du ja sowieso....

    .aber würd mich natürlich über hilfe freuen..

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

  • Das einzige warum er sich aufhängen könnte wäre die for schleife, aber die ist richtig so wie sie ist. Kontrollier lieber nochmal ob du dir irgendeine andere Schleife kaputt gemacht hast durchs reinsetzen meines codes.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • @Aku_Ryou nein es ist so das wenn man g drückt wird dann die kurve gezeichnet.....aber ich brauchte es ja
    so das wenn man g gedrückt hält das dann die kurve gezeichnet wird und dann die granate dort entlang
    fliegt....also das problem ist nur das wenn man g haltet es andauernd gezeichnet wird.....wenn man g nur
    einmal drückt funktioniert es einwandfrei....und nichts wird langsamer...es geht nur um das gedrückt halten
    und ich denke ich kann das mit einer variablen abfrage lösen.....


    aber wichtiger wäre das mit der maximalenweite und minimalenweite....
  • @Aku_Ryou

    kannst du mir helfen bei der maximalweite und minimalweite???
    und kannst du mir diesen code erklären bitte ich versteh ihn nicht ganz

    GML-Quellcode

    1. laenge = (mouse_x - obj_player.x)/2;//entfernung von player zur maus durch 2 ,,bedeutet das dort die mouse_x koordinaten genommen werde -die obj_player.x koordinaten??
    2. if laenge <= 0
    3. {
    4. mittelpunkt_x = obj_player.x + lengthdir_x(laenge,180);
    5. mittelpunkt_y = obj_player.y + lengthdir_y(0,180);
    6. }
    7. else
    8. {
    9. mittelpunkt_x = obj_player.x + lengthdir_x(laenge,0);
    10. mittelpunkt_y = obj_player.y + lengthdir_y(0,0);
    11. }
    Alles anzeigen



    ps: heute hat mir @Husi012 beigebracht wie ich einen halbkreis zeichne mit ner for schleife und draw_point...bin echt dankbar..

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

  • Du kannst die Länge immer nach der abfrage ob sie positiv oder negativ ist, clampen, dh dass der wert immer zwischen 2 Zahlen bleibt.

    GML-Quellcode

    1. //if laenge <= 0
    2. clamp(laenge,-256,-64);
    3. //else
    4. clamp(laenge,256,64);

    wenn laenge 500 ergibt, dann wird laenge durch den clamp befehlt einfach abgeschnitten und ist dann 256.

    Mein Code macht prinzipiell folgendes:
    maus_x - player.x ergibt die entfernung von maus zum player entlang der x achse. Wenn du irgendwelche imaginären Werte einsetzt und es durchrechnest oder es auf Karopapier aufzeichnest wirst du es verstehen. Dieser Wert kann aber auch negativ sein je nachdem ob die maus links oder rechts vom spieler ist. Außerdem wird der Wert durch 2 dividiert damit du nur die Hälfte der Länge hast, weil du ja dann den Mittelpunkt des Kreises bzw der Ellipse bestimmen willst.

    Dann wird der Mittelpunkt x und y berechnet, je nachdem ob laenge positiv oder negativ ist.
    Eigtl ist es einfacher wenn du gleich:

    GML-Quellcode

    1. mittelpunkt_x = player.x + laenge;
    2. mittelpunkt_y = player.y;

    rechnest, statt der zwei if abfragen ob der wert positiv oder negativ ist. Denn wenn Laenge negativ ist dann ist der Mittelpunkt_x sowieso links vom player. Auch hier hilft es dir das ganze einfach mal aufzuzeichen und mit Beispielswerten durchzurechnen.

    Beim drawen der Ellipse nimmst du eine maximale wurfhöhe damit die granate nicht einfach einen halbkreis abfliegt sondern wurfmäßiger eine sanftere kurve. Das sieht besser aus, wenn es so in die Länge gezogen wird.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • @Aku_Ryou


    wenn ich das so mache mit diesem code

    GML-Quellcode

    1. ​laenge = (mouse_x - obj_spieler.x)/2;//entfernung von player zur maus durch 2 ,,bedeutet das dort die mouse_x koordinaten genommen werde -die obj_player.x koordinaten??
    2. if laenge <= 0
    3. {
    4. clamp(laenge,-256,-64);
    5. mittelpunkt_x = obj_spieler.x -laenge;
    6. mittelpunkt_y = obj_spieler.y -y;
    7. }
    8. else
    9. {
    10. clamp(laenge,256,64);
    11. mittelpunkt_x = obj_spieler.x + laenge;
    12. mittelpunkt_y = obj_spieler.y + y;
    13. }
    14. for (var index = 0; index < 180; index++)
    15. {
    16. draw_point(mittelpunkt_x +lengthdir_x(abs(laenge),index),mittelpunkt_y + lengthdir_y(maximalwurfhoehe,index));
    17. }
    18. }
    Alles anzeigen



    funktioniert es nicht mehr.....benutze ich aber das hier

    GML-Quellcode

    1. clamp(laenge,-256,-64);
    2. ​ mittelpunkt_x = obj_player.x + lengthdir_x(laenge,180);
    3. mittelpunkt_y = obj_player.y + lengthdir_y(0,180);



    funktioniert es normal....aber die länge bleibt trotzdem unverändert...also wird das clamped nicht beachtet oder so...weil ich kann bis ans ende des bildschirm mit der maus fahren und die ellipse folgt mir...und es sollte doch bei 256 stehen bleiben....was ist da falsch