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.
-
@Aku_Ryou
also das funktioniert nicht...wenn ich es so schreibe
GML-Quellcode
- laenge = (clamp(laenge,-256.-64))
- if laenge <= 0
- {
- clamp(laenge,-256,-64)
- mittelpunkt_x = obj_player.x + lengthdir_x(laenge,180);
- mittelpunkt_y = obj_player.y + lengthdir_y(0,180);
- }
- else
- {
- clamp(laenge,256,64)
- mittelpunkt_x = obj_player.x + lengthdir_x(laenge,0);
- mittelpunkt_y = obj_player.y + lengthdir_y(0,0);
- for (var index = 0; index < 180; index++)
- {
- draw_point(mittelpunkt_x +lengthdir_x(abs(laenge),index),mittelpunkt_y + lengthdir_y(maximalwurfhoehe,index));
- }
- }
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 -
@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
aber wieso schreibt er trotzdem den error??Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von acidrain833 ()
-
versuch einfach mal im create event zu schreiben laenge =0;
dann hast du sie definitiv schon vorm benutzen deklariertWir stehen zusammen und wir fallen zusammen -
ja ok werd ich versuchen...ich habs ja schon mal versucht mit der variable im create event...aber da hatte ich einen wert von 256 benutzt.vielleicht macht das ja den unterschied.thx
-
@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
- //draw_sprite_ext(global.weapon_array[weapon,8],0,x,y,1,1,image_angle,c_white,1);
- draw_self();
- if (global.kurve == true)
- {
- laenge =(obj_player.x-mouse_x);
- if laenge <= 0
- {
- laenge = clamp(laenge,64,256)
- mittelpunkt_x = obj_player.x + lengthdir_x(laenge,180);
- mittelpunkt_y = obj_player.y + lengthdir_y(0,180);
- }
- else
- {
- laenge=clamp(laenge,-64,-256)
- mittelpunkt_x = obj_player.x +lengthdir_x(laenge,0);
- mittelpunkt_y = obj_player.y + lengthdir_y(0,0);
- }
- //draw
- for(i = 0; i < 180 ; i += 1)
- {
- draw_point(mittelpunkt_x +lengthdir_x(abs(laenge),i),mittelpunkt_y + lengthdir_y(maximalewurfhoehe,i) );
- }}
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.xDieser 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).
-
@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
- laenge =(mouse_x-obj_player.x);
- if laenge <= 0
- {
- laenge = clamp(laenge,64,256)
- mittelpunkt_x = obj_player.x + lengthdir_x(laenge,180);
- mittelpunkt_y = obj_player.y + lengthdir_y(0,180);
- }
- else
- {
- laenge=clamp(laenge,-256,-64)
- mittelpunkt_x = obj_player.x +lengthdir_x(laenge,0);
- mittelpunkt_y = obj_player.y + lengthdir_y(0,0);
- }
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 ()
-
Ja und es muss umgekehrt sein, wenn laenge kleiner gleich 0 ist dann muss im minusbereich geclamped werden und else, positiv.
-
@Aku_Ryou ja eh das hatte ich schon das geht trotzdem nicht..
also jetzt hab ichs so
GML-Quellcode
- laenge =(mouse_x-obj_player.x);
- if laenge <= 0
- {
- laenge = clamp(laenge,-64,-256)
- mittelpunkt_x = obj_player.x + lengthdir_x(laenge,180);
- mittelpunkt_y = obj_player.y + lengthdir_y(0,180);
- }
- else
- {
- laenge=clamp(laenge,256,64)
- mittelpunkt_x = obj_player.x +lengthdir_x(laenge,0);
- mittelpunkt_y = obj_player.y + lengthdir_y(0,0);
- }
- //draw
- for(i = 0; i < 180 ; i += 1)
- {
- draw_point(mittelpunkt_x +lengthdir_x(abs(laenge),i),mittelpunkt_y + lengthdir_y(maximalewurfhoehe,i) );
- }}
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
- laenge =(mouse_x-obj_player.x);
- if laenge <= 0
- {
- laenge = clamp(laenge,-256,-64)
- mittelpunkt_x = obj_player.x + lengthdir_x(laenge,180);
- mittelpunkt_y = obj_player.y + lengthdir_y(0,180);
- }
- else
- {
- laenge=clamp(laenge,64,256)
- mittelpunkt_x = obj_player.x +lengthdir_x(laenge,0);
- mittelpunkt_y = obj_player.y + lengthdir_y(0,0);
- }
- //draw
- for(i = 0; i < 180 ; i += 1)
- {
- draw_point(mittelpunkt_x +lengthdir_x(abs(laenge),i),mittelpunkt_y + lengthdir_y(maximalewurfhoehe,i) );
- }}
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.. -
Entferne mal das abs bei laenge in lengthdirEin Bug ist mehr als nur ein Bug, es ist ein... Käfer!
Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach
Willst du mit mir auf Discord Chatten/Quatschen?
Meine Husi's Tutorial Reihe -
nein das bringt leider auch nichts....weiterhin so dass die kurve nur rechts funktioniert.aber leider nicht links.
-
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
- laenge =(mouse_x-obj_player.x);
- if laenge <= 0
- {
- laenge = clamp(laenge,-256,-64)
- }
- else
- {
- laenge=clamp(laenge,64,256)
- }
- 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
- mittelpunkt_y = obj_player.y + lengthdir_y(0,0);
- //draw
- for(i = 0; i < 180 ; i += 1)
- {
- draw_point(mittelpunkt_x +lengthdir_x(abs(laenge),i),mittelpunkt_y + lengthdir_y(maximalewurfhoehe,i) );
- }
-
@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 -
ja aber oben steht eh schon der grossteil und mir hat aku wirklich toll geholfen.
aber wenn du noch hilfe brauchst helf ich gern