move_towards_point space shooter

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

  • move_towards_point space shooter

    Hallo,

    ich programmiere einen space shooter. soweit so gut.

    Nun bin ich bei dem enemy KI....

    mein schiff am unteren bildschirmrand beweht sich nur auf der x achse im room

    auch mein enemy auf dem oberen bildschirmrand bewegt sich nur auf die x achse, kann aber auch mal in den room rein gleiten um dem player etwas geführlich nahe zu kommen. (Uhhh voll krass ....)

    ich habe ein script, in dem bossphasen angelegt sind zb:
    if global.bossphasen = 0
    {
    tue das...
    }
    if global.bossphasen = 1
    {
    tue das...
    }
    if global.bossphasen = 2
    {
    tue das...
    }



    ich möchte dass mein enemy schiff mal zum rechten rand, mal zum linken, mal etwas mittig fährt usw.

    eine phase soll auch bei sein, die ausweich phase.

    meine monition ist ein laser object

    ich wollte, dass durch collision line das gegner schiff sieht, wenn ein laser im room ist, ob es einschlagen önnte, und es automatisch entweder links oder rechts aussweicht.

    genau da liegt mein problem...
    entweder ist bei move_towards_point der gegner weg, schwirrt irgendwo rum, was ich gar nicht programmiert habe oder andere unheimlich abgefu.... sachen.

    ja, es kotzt mich an XD progge daran schon seit 7 Stunden....

    wahrscheinlich muss ich ihm speed bestimmen, also mal einen wert geben und mal auf null setzten .... aber irgendwie komme ich trotzdem nicht weiter....


    hat vielleicht von euch einer ne anregung? oder gar ein beispiel oder so?
  • Du könntest Pfade benutzen um das Schiff zu verschieben.
    Oder du prüfst einfach ob laser.x < oder > x und lässt das schiff in die entgegengesetzte richtung fliegen
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:

  • if global.bossphasen = 0
    {
    move_towards_point( o_player.x, 50, 3 );
    }

    if global.bossphasen = 1
    {
    move_towards_point( o_player.x, 200, 3 );
    }

    if global.bossphasen = 2
    {
    move_towards_point( o_player.x, 150, 3 );
    }

    if global.bossphasen = 3
    {
    if instance_exists(obj_laser_1)
    {
    if collision_line(obj_laser_1.x,obj_laser_1.y,obj_laser_1.x,obj_laser_1.y-room_height,id,false,false)
    {

    move_towards_point( x - 200,50,2)

    }
    }
    }
  • Ich weiß ja nicht, wo du speed = 0; machst. Das sollte auf jeden Fall unter deinem anderen Code hin.
    Ein 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 :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Keine Ahnung ob ich dein Problem jetzt richtig verstanden habe. Ich hab dir mal was kleines geschrieben zum Thema Bewegung.
    Vielleicht hilft dir das weiter.
    Das kannst du bei deinen Gegner in Alarm0 packen.
    So bekommst du ein wenig mehr zufall rein.

    GML-Quellcode

    1. speed = random_range(3,10);
    2. art = ceil(random_range(0,3));
    3. switch (art){
    4. case 0: move_towards_point(0,y,speed); break;
    5. case 1: move_towards_point(500,y,speed); break;
    6. case 2: move_towards_point(random_range(0,500),y,speed); break;
    7. case 3: move_towards_point(250,y,speed); break;
    8. }
    9. alarm[0] = random_range(50,300);


    Ach vergessen....du musst natürlich prüfen wo er gerade ist und dann Speed auf 0 setzen.

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

  • also @acidrain833 alarm kennst du ja und was das macht und random_range ist eine random funktion random_range bedeutet in diesem kontext nichts anderes als zufällig zwischen heisst wenn du random_range benutzt gibst in die klammern den kleinsten und den größten wert ein und bekommst einen zufälligen wert dazwsichen raus... aber für sachen wie alarme würde ich lieber irandom_range benutzen, da das i für integer steht und und die zahlen in der klammer immer ganzzahlen sind... und @Leonardo007 ich hab jetzt erlich gesagt nicht dein problem durchgelesen nur irgendwas mit move towards point und das gegner raketen ausweichen sollen... also um es etwas umfangreicher zu erklären
    mit der funktion move_towards_point lässt du ja dein objekt gezielt mit einer bestimmten geschwindkeit irgendwo hinfahren diese geschwindigkeit musst du jedoch wieder selber ausschalten wann du es willst ich hab das jetzt zwar nicht getestet aber ich würde es ungefähr so machen...

    bei deinem schuss obj

    GML-Quellcode

    1. //im create event
    2. follow = true;
    3. // step event
    4. var unfollow = distance_to_object(enemy) < 200;
    5. if (unfollow){
    6. follow = false;
    7. }
    8. if (!follow){
    9. move_towards_point(enemy.x,enemy.y,8);
    10. }
    11. // outsite view event
    12. instance_destroy();
    Alles anzeigen


    wenn ich jetzt keinen denkfehler habe sollte deine rakete sobald sie weniger als 200 pixel von deinem gegner entfernt ist aufhören den gegner zu verfolgen und in die richtung weiter fliegen in die er grad guckt
    Wir stehen zusammen und wir fallen zusammen