Richtungs änderung

  • GM 8

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

  • Richtungs änderung

    Hi,
    Mein Objekt,dass sich automatisch in die Richtung des Spielers dreht, erzeugt Kugeln, je nachdem ob er nun nach links oder rechts guckt wird die Kugel so erzeugt das er auch in Richtung des Players fliegt.

    Das habe ich mit diesem Code im Kugel Step Event "gemeistert":

    GML-Quellcode

    1. if(instance_exists(big_soul))
    2. if (big_soul.image_xscale==1 && !Bblock)
    3. {
    4. image_xscale=1;
    5. hspeed=12;
    6. Bblock=true;
    7. }
    8. if(instance_exists(big_soul))
    9. if (big_soul.image_xscale==-1 && !Bblock)
    10. {
    11. hspeed=-12;
    12. image_xscale=-1;
    13. Bblock=true;
    14. }
    Alles anzeigen


    Nun das Problem ist jetzt, wenn ich Mehrere Objekte habe die Kugeln schiessen, es jetzt nicht mehr richtig funktioniert wenn ein Objekt links und das andere rechts vom Spieler steht.
    Imagine taking your usual two century long nap minding your own business when suddenly some cunt wakes you up.
    You tell him to f*ck off of course but just when you finally managed to fall asleep again the same asshole comes knocking again. I'd attack that dick too.
  • Mach's doch einfach andersrum - lass nicht jede Kugel überprüfen, wo der Schütze hinguckt (denn wenn das im Step-Event passiert, wird das wohl kaum über längere Zeit konsistent bleiben :P), sondern lass den Schützen zum Zeitpunkt des Schusses der Kugel alles wichtige übergeben. Etwa so:

    GML-Quellcode

    1. i=instance_create(x,y,bullet);
    2. i.direction=arccos(image_xscale);
    3. i.speed=foo;

    Diese arccos-Sache gibt als Richtung entweder 0 (rechts, für 1) oder 180 (links, für -1) zurück, ist allerdings etwas eklig. Benutz das also nur, wenn du die Richtungshandhabung wirklich über image_xscale machen willst... was an sich auch ein wenig eklig ist. ^^
  • Okay danke, funktioniert alles soweit habs nun so gemacht:

    GML-Quellcode

    1. i=instance_create(x,y-45,dark_ball);
    2. i.direction=arccos(image_xscale);
    3. if (image_xscale==-1)
    4. {
    5. i.speed=-12;
    6. }
    7. if (image_xscale==1)
    8. {
    9. i.speed=12;
    10. }
    Alles anzeigen


    Nur gibts es da noch ein Problem, wenn die Kugel nach links abgefeuert wird sinkt sie gleichzeitig langsam kontinuierlich nach Unten, wobei die Rechte ganz normal geradeaus fliegt. Es wäre natürlich besser wenn beide Kugeln geradeaus fliegen. Nur hab ich keine Ahnung woran das liegt da es vorher diesen Fehler nicht gab.
    Imagine taking your usual two century long nap minding your own business when suddenly some cunt wakes you up.
    You tell him to f*ck off of course but just when you finally managed to fall asleep again the same asshole comes knocking again. I'd attack that dick too.
  • Wenn du das mit image_xscale durchziehen willst, kannst du dir die if-Abfrage da auch sparen.

    GML-Quellcode

    1. i.speed=12*image_xscale;

    erfüllt den gleichen Zweck.

    Und was das Absinken angeht: Lass dir mal über show_debug_message(string(i.direction)) anzeigen, ob diese arccos-Sache wirklich reibungslos funktioniert und die Richtung der nach links geschossenen Kugeln wirklich 180 ist, nicht vielleicht 181 oder sowas. Ich weiß nicht, wie genau der GM da ist.
    Ansonsten nachgucken, ob du die Kugelobjekte noch irgendwo beeinflusst und das vielleicht übersehen hast.

    EDIT:
    Okay, ich hab's grade getestet. Ich hatte vergessen, dass die Winkelfunktionen des GM im Bogenmaß rechnen. arccos(-1) ergibt also Pi, nicht 180. Lösen lässt sich das über:

    GML-Quellcode

    1. i.direction=radtodeg(arccos(image_xscale));



    Aber der ultimative Ratschlag meinerseits wär in diesem Fall, diesen image_xscale-Käse bleibenzulassen und das stattdessen über direction zu koordinieren. Dann kannst du die arccos-Funktion nämlich komplett rausschmeißen und als Fehlerquelle (und Rechenleistungsverbraucher) eliminieren.
  • Warum nicht einfach so?

    GML-Quellcode

    1. var i;
    2. i = instance_create(x, y-45, dark_ball);
    3. i.hspeed = facing * 12;

    facing ist dabei eine Variable, die wie image_xscale belegt ist. image_xscale richtet sich allerdings nach facing, nicht umgekehrt.

    Edit:
    Nevermind, ich hab Ih3s Pre-Edit überlesen.
    Aber wie Ih3 schon sagte, solltest du eine andere Variable verwenden als image_xscale. Ob das jetzt direction oder eine eigene ist spielt keine Rolle, aber du bist später eventuell dankbar, grafische Aspekte sauber von der Spiellogik getrennt zu haben.
  • Benutzer online 1

    1 Besucher