Objekt soll sich nicht auf bestimmten Punkt zu bewegen, sondern im bestimmten Winkel

  • GM 7
  • Objekt soll sich nicht auf bestimmten Punkt zu bewegen, sondern im bestimmten Winkel

    Hi, ich weiß nur wie man ein Objekt auf einen bestimmten Punkt zubewegen lässt, aber wie bewegt er sich in eine bestimmte direction mit einem bestimmten Speed.
    Ich schätz mal, dass das ganz einfach ist, blos ich hab trotzdem keine ahnung. :pinch: ?( ?(
    Gruß Gamer
  • Dankeschön
    lol, einfacher als ich dachte, hab daran überhaupt nicht gedacht.
    Dachte da gibts ne extra funktion.

    Ne aber D&D mach ich nicht mehr, versuch so viel wie möglich in Gml zu machen, eig. alles.


    Hab jetzt den Code von sebastian genommen und er funktioniert sehr gut:

    GML-Quellcode

    1. var a,b,c;
    2. a=instance_create(x,y,obj_bullet)
    3. b=instance_create(x,y,obj_bullet)
    4. c=instance_create(x,y,obj_bullet)
    5. a.direction=direction-10
    6. b.direction=direction
    7. c.direction=direction+10
    8. a.speed=6
    9. b.speed=6
    10. c.speed=6


    aber da ich dann irgendwann bei der 10. Stufe 10 Variablen habe (es sollen so ca. 10 Stufen geben) hab ich mir gedacht, dass es da einen richtig ewigen Code gibt, da der Speed bei jeder Kugel gleich bleiben soll, kann man das irgendwie für alle variablen zusammenfassend schreiben

    Oder wem eine noch bessere Methode einfällt, das gleiche Objekt in unterschiedliche Richtungen schiessen zu lassen, das wär toll.
    Eventuell ein Skript, mir fällt nur grad nicht ein, wie ich daraus ein Skript machen könnte.
    Gruß Gamer
  • hier: funzt egal für wiviele stufen.

    stufe = wieviel verschiedene schussrichtungen,

    grad = der winkelunterschied der schüsse,

    dir = die standard direction di die kugel von anfang an haben, zB dir= direction falls es in der richtung vom schiff schießen soll, oder falsl das ein horizontal shooter wird 90 (also nach oben)

    for (i=-stufe div 2;i<=stufe div 2 -(stufe+1) mod 2;i+=1)

    {

    f[i+stufe div 2]=instance_create(x,y,schuss);

    f[i+stufe div 2].direction+=(i+((stufe+1)mod 2)/2)*grad+dir;

    }
  • oder du machst es so:

    GML-Quellcode

    1. var i;
    2. i=instance_create(x,y,obj_bullet);
    3. i.direction=direction+10;
    4. i.speed=6;
    5. i=instance_create(x,y,obj_bullet);
    6. i.direction=direction-10;
    7. i.speed=6;
    8. i=instance_create(x,y,obj_bullet);
    9. i.direction=direction;
    10. i.speed=6;
    Alles anzeigen


    Du musst ja nich alle Objekt in anderen Variablen speichern!
    Außerdem kannst du wie anti0ogen blau es gemacht hat eine Schleife nehmen, wobei es unötig ist alle in einem Array zu speichern.
  • Meint ihr nicht, dass sich ein einfaches Skript mehr anbietet? :x

    GML-Quellcode

    1. //Sagen wir mal das Skript heißt: scr_ create_bullet
    2. //Argument 0 ist der Speed
    3. //Argument 1 die Direction
    4. var bullet, spd, dir;
    5. spd = argument0;
    6. dir = argument1;
    7. bullet = instance_create(x,y,obj_bullet);
    8. bullet.speed = spd;
    9. bullet.direction = dir;
    10. return bullet.id; //Das Skript gibt dir die ID des eben erstellten Objekts zurück
    Alles anzeigen


    Benutzen tust du das ganze so: scr_create_bullet(spd, dir);
    Statt spd und dir musste natürlich den Speed bzw. die Direction welche die Bullet haben soll eintragen.

    z.B.
    bullet_1 = scr_create_bullet(6,0);
    bullet_2 = scr_create_bullet(3,90);

    Wenn du das jetzt in ne Schleife packst dann kannste so viele bullets in alle Himmelsrichtungen verschießen wie du willst.
  • verstehst du das nicht? wenn du eine schleife machst musst du die direction berechnen, und GENAU das macht meine total einfache schleife auch, sie sieht vll nicht ordentlich aus ist aber wahnsinnig kurz und kann wirklich je nach stufe unendlich viele perfekt verteilte schüsse abfeuern und die berechnung geht von ganz allein abhängign von der variabel stufe, da muss man NIX weiter angeben. die speed wird ja wohl nicht von einer schuss-verteilungsschleife beeinflusst oder etwa doch?

    das wäre ja nicht logisch , weite verteilungne muessen ja nicht schnelle geschwindigkeiten ergeben oder so, also musst du zumindest die speed nicht immer angeben, was man viel leichter im schuss create event setzen kann (dann hat man nur eine zeile im objekt create event), speed="spieler.geschwindigkeit"

    DAS ist einfach.

    ohne klammern und "var " hat den script 6 zeilen meine routine hat 3 !
  • Muss ich mich jetzt irgendwie verarscht fühlen? ;D

    Wenn du meine bescheidene Meinung willst, hier isse:
    Also erstmal, der Code den du da farbriziert hast, der mag ja funktionieren, aber lesen kann das kein Mensch.
    Allein die absurd komplizierte "Formel" für die Direction-"Berechnung" ist ja schon nen Kracher, aber der totale Abschuss ist wohl das for-Schleifen Konstrukt. Das Ding beginnt im Negativen und hat ne Abbruchsbedingung die auf 2 (!) Divisionen angewiesen ist und eine davon is sogar ne Modulo-Operation. Knuth würde heulen.
    Der größte Witz ist aber "Mein code hat nur 3 Zeilen, Ällabätsch!".
    Weniger Zeilen != Besserer Code.
    Guter Code = Lesbarer Code.

    Achja, hier die Schleife die zu meinem Script gehört:

    GML-Quellcode

    1. /* Variablenerklaerung
    2. spd := Geschwindikgeit der Projektile
    3. dir := Basisdirection
    4. grad := Änderungswinkel
    5. stufe := Anzahl der Projektile
    6. */
    7. for(i=0; i<stufe; i+=1){
    8. scr_create_bullet(spd,dir+i*grad); //Erzeugt ein Projektil mit Speed 'spd' und einer direction abhängig vom Step i
    9. }
    Alles anzeigen


    Quote of Doom:

    anti0ogen blau schrieb:

    DAS ist einfach.

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

  • du musst dich nicht verarscht fühlen, aber du bisd einfach dumm.

    lesbarer code != guter code,

    wo hast du denn programmieren gelernt? ICH KANN MEINEN CODE LESEN,

    div und mod sind wohl die einfachsten befehle die durch bitweise verschiebung erreiht werden, schnellere befehle gibts wohl kaum !

    du hast dohc keine ahnung.

    eine schleife DARF im negativen bereich anfangen, das ist erlaubt und sagt garnix darüber aus ob der code schlecht oder gut ist, in wahrheit ist er sogar sehr gut, da er mir die berechnung erleitert.



    mein code ist also wirklich (aus objectiver sicht) besser als deiner , nur nicht lesbar für noobs wie du, jedoch hat der thread starter nichtmal den code lesen muessen, er muesste ihn nur kopieren, also ist bei de rlesbarkeit 0%probleme, wer ihn nicht lesen kann ist einfach schlecht, is hal so!

    das ist keien subjective meinung sondern eine 100% objective erläuterung warum ichdich nun beleidien darf , um fairness zu gewährleisten, du schreibst einfach nach meienr lösung, während the gamer nichtmal nachgefrag thatte und sich schon ewig nicht mehr gemeldet hat einfach eine schlechtere lösung als meine, nur weil du zu doof bisd mit meiner genialen lösung umzugehen undbehauptest dann auch noch dass meine lösung deiner nicht gleichkommen kann obwohl das nachweisbar nicht stimmt.

    wenn du guten code haben wills, wirklcih perfekten code dann mach es doch in assembler (= das unleserlichste auf der welt) abner das beste, also wage es nie mehr meinen code infrage zu stellen wenn du keien ahnung hast
  • Ich muss Thodd Recht geben. Die codes die du produzierst (auch in anderen Threads) mögen zwar funktionieren, sind aber um vielfaches komplizierter und unnötig. Wozu zb sollte man die Instanz id bei so einem Vorgehen in einen Array speichern oder so eine Seltsame Schleife produzieren mit Mod und Div wenns doch um ein vielfaches leichter geht?
    Und gerade Modulo ist etwas, was nicht jeder versteht und auch nicht so leicht zu verstehen ist.
    mein code ist also wirklich (aus objectiver sicht) besser als deiner , nur nicht lesbar für noobs wie du, jedoch hat der thread starter nichtmal den code lesen muessen, er muesste ihn nur kopieren, also ist bei de rlesbarkeit 0%probleme, wer ihn nicht lesen kann ist einfach schlecht, is hal so!
    1. stimmt nicht...
    2. Hirnlos kopieren hat noch niemanden zum Programmierer gemacht. :thumbdown:

    Schlussendlich geht es hier darum die einfachste und sinnvollste Lösung zu finden und die lieferst du eben nicht. Sogesehen fehlt dir der Durchblick für einfaches und sinnvolles Programmieren.

    © 2008 by Teamgrill Productions
  • ich msus mich wohl wiederholen !

    es ist EUER problem wenn die codes für euch nicht lesbar sind, dass die ID speichern unnöätig war wurde mir schon gesagt und ich habe zugestimmt (somit reduzierte sich mien code auf 2 zeilen) und es ist eifnach BESSA , auch wenn es euch nicht gefällt, es IST funktionstüchtiger, wers nicht lesen kann, is hal zu schlecht dafür, aber ihr verdreht das und behauptet mein code sei zu schlecht fü reuch, aber ihr seid zu schelcht für ihn
  • du kansnd nichts dafür aber wenn ich eien lösung psote die besser ist als die nachfolgenden und dann elute auch noch behauipten

    "wäre eine ... nicht einfacher ..... blabla " also es ist absolut nicht deine aufgabe sich zu entschuldigen, du ahst ja nie behauptet dass dn code besser sei, nur weil dir meiner nicht gefiel
  • hey junge, reg dich ab man! sag mir bitte mal, warum deine lösung besser is, hmm?

    schneller? gehts hier tatsächlich um geschwindigkeit, wenn man 10 kugeln nacheinander abfeuern lassen will? und, wie gross mag wohl der unterschied sein zu einer lesbaren variante?

    es geht hier nich darum, dass es für dich lesbar ist oder die lösung einen winzigen fussabdruck hat... auf eine anfängerfrage antwortet man am besten mit einer einfachen verständlichen antwort, damit die fragenden auch verstehen, was sie da bekommen haben ;)

    offenbar hast du dich noch nicht so sehr damit beschäftigt, wie softwareentwicklung läuft. für jeden zweck muss man unterschiedliche schwerpunkte setzen.
    "das war meine letzte flamewar PM an dich ."
  • Ich kürz das hier mal ab:

    The Gamer hat hier überhaupt keinen Fehler gemacht und muss sich demzufolge auch bei niemandem für nichts entschuldigen. Hier hat jeder das Recht, Fragen zu stellen. anti0ogen blaus Ausrutscher ist nicht unbemerkt geblieben, es besteht also kein Grund, hier jetzt einen Flamewar anzufangen.

    Und da die Frage eh schon gelöst ist: *closed*
  • Benutzer online 1

    1 Besucher