Bewegungsvorhersage und Zielen

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

  • Bewegungsvorhersage und Zielen

    Hi
    Ich arbeite gerade an einem Skript.
    Wir haben folgendes:
    Einen Turm, der Kugeln auf sich bewegende Gegner abfeuern kann.
    Dieser Turm soll aber die Bewegung des Gegners miteinbeziehen und wenn sich dieser nicht dreht, soll die Kugel auch treffen.

    Dazu hab ich ein Skript das nimmt die Start Koordinaten, die Geschwindigkeit, mit der sich die Kugel bewegen wird und das Gegnerobjekt und gibt den Winkel zurück, in welchen der Turm schiessen muss um zu treffen:

    GML-Quellcode

    1. var startX,startY,usedSpeed,enemyObj,stepNumb,stepSize;
    2. startX= argument0;
    3. startY = argument1;
    4. usedSpeed = argument2;
    5. enemyObj = argument3;
    6. // step numb und size dienen zur Eindämmung des Rechenaufwands
    7. stepNumb = argument4;
    8. stepSize = argument5;
    9. if stepSize==0 stepSize=1;
    10. var i,_x,_y,_dist,_range;
    11. for (i=1;i<stepNumb;i+=stepSize)
    12. {
    13. //Bewegung einbeziehen
    14. _x = enemyObj.x + (i * enemyObj.hspeed);
    15. _y = enemyObj.y + (i * enemyObj.vspeed);
    16. //Distanz zum Zielpunkt
    17. _dist = point_distance(startX,startY,_x,_y);
    18. //Reichweite der Kugel innerhalb der Anzahl Steps i
    19. _range = usedSpeed * i;
    20. if (abs(_range - _dist)<=usedSpeed)
    21. {
    22. return (point_direction(startX,startY,_x,_y));
    23. }
    24. }
    25. return -1;
    Alles anzeigen


    Also bei mir klappts leider nicht irgendwie...
    "das war meine letzte flamewar PM an dich ."

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

  • Dein Turm soll sich also langsam zu einem Gegner drehen bis der Turm still steht, dann soll er feuern, richtig? Schau mal hier:
    Klick
    Du benutzt Bl@ckSp@rks Code im Step Event deines Trums, mußt allerdings anstelle von mouse_x mouse_y, die x,y koordinaten deiner Gegner angeben.
    Zum schießen kannst du dann einfach noch abfragen ob image_angle=dir1 entspricht.
  • Nope..

    Ich möchte nicht, dass der Turm direkt in Richtung Gegner schiesst, da er ja dann aufgrund der Bewegung des Gegners nicht treffen würde, sondern er soll die Geschwindigkeit des Gegners mit einberechnen so dass die Kugel auch dorthin fliegt, wo sich der Gegner in den nächsten paar Steps befinden wird.
    "das war meine letzte flamewar PM an dich ."
  • Achso, falls deine Gegner sich nicht so arg schnell bewegen, würd ich ganz einfach ein Geschoss erstellen das relativ schnell ist und in jedem step auf die neue Gegnerposition fliegt, so trifft es auch 100% und ich denke man wird den Trick kaum merken. Hab mal ein aus langeweile an Beispiel gemacht ;)
    grinchxl.bplaced.net/Turm.rar
  • Eine solche Lösung ist dann allerdings recht unzufriedenstellend. Mit ein bisschen mechanischer Physik und Trigonometrie sollte sich das Problem lösen lassen. Ich werde mich in nächster Zeit mal damit beschäftigen und das Ergebnis hier posten.
  • Ehm Richlord sag mal, was is wenn ich ne andere Speed als 7 möchte? Ist das abhängig von deiner Konstante 6.5?
    "das war meine letzte flamewar PM an dich ."
  • Ja, das ist abhängig von dem Zahlenwert 6.5. Aber die Anpassung desselben gestaltet sich vergleichsweise einfach. Da dieser Wert direktproportional zu der Geschwindigkeit des Projektils ist, musst du eigentlich nichts anderes tun, als zu multiplizieren (wobei dann 7 einem Faktor von 1 entsprechen muss).
    Ersetze also einfach den Zahlenwert 6.5 durch

    GML-Quellcode

    1. (missile_speed/7*6.5) // missile_speed ist hierbei die gewünschte Projektilgeschwindigkeit
  • Benutzer online 1

    1 Besucher