Objekte NACH dem zerstören an der selben stelle wieder zu spawnen

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

  • Objekte NACH dem zerstören an der selben stelle wieder zu spawnen

    Hi,
    gibt es einen simplen weg Gegner nach einer bestimmten Zeit an der selben stelle(wo sie erstellt wurden) wieder zu (re)spawnen.
    Also wenn mein Gegner stirbt benutzte ich instance_destroy() um ihn zu löschen.
    Da er nun weg ist kann man nicht mehr mit ihm "kommunizieren" und sagen das er dort spawnen soll.
    Am besten wäre es wenn nur spawnt wenn er außerhalb des sichtbaren views sich befindet.
    Ich würd so gern die Welt verändern, aber Gott gibt mir den Quellcode.
    Marvin ist ein böser Hund!
  • Ich würde es mit einer Variable lösen und zwar folgendermaßen:

    Wenn du dein Gegner im gegner_obj zerstörst z.B. durch eine Kollision:

    Collision Event

    GML-Quellcode

    1. instance_destroy();
    2. obj_spawn.menge -= 1;


    Dann kannst du in dein Spawn_obj folgendes coden:

    Create Event

    GML-Quellcode

    1. menge = 0; //Die Anzahl deiner Gegner bzw. dein Gegner


    Alarm[0] Event

    GML-Quellcode

    1. gegner = instance_create(100,100,obj_gegner);
    2. menge += 1;


    Step Evemt

    GML-Quellcode

    1. if menge < 1 && !alarm[0]
    2. {
    3. alarm[0] = 200 //Eine beliebige Zeit angeben
    4. }


    Ich hoffe ich konnte helfen. ^^

    MfG
    Rotfuchs7
    Für jene, die ständig das Scheitern fürchten, sind Erfolge auf ewig unerreichbar.
  • Du kannst das ganz einfach über ein Controller-Objekt steuern.

    Wenn dein Objekt am Anfang eine feste Spanw-Positon hat, machst du das so:

    Du packst ins Instance-Destroy-Event:

    GML-Quellcode

    1. objControll.alarm[0]={Deine Zeit};


    objControll Alarm[0]-Event:

    GML-Quellcode

    1. instance_create({Deine x-Position}, {Deine y-Position}, objGegner);



    Wenn dein Objekt am Anfang jedoch eine Zufallsposition zugewiesen werden soll und das Objekt genau an der Stelle wieder gespawn werden soll, musst du im Create-Event folgendes reinpacken:

    GML-Quellcode

    1. xx =x;
    2. yy = y;


    objControll Create-Event:

    GML-Quellcode

    1. //Nur zum Initialisieren
    2. xx = 0;
    3. yy = 0;


    Instance-Destroy-Event:

    GML-Quellcode

    1. objControll.xx = xx;
    2. objControll.yy = yy;
    3. objControll.alarm[0]={Deine Zeit};


    objControll Alarm[0]-Event:

    GML-Quellcode

    1. instance_create(xx, yy, objGegner);


    Liebe Grüße
  • Du brauchst einmal eine globale Liste um deine Objekte zu speichern und eine für die Respawnzeiten:

    Am besten erstellst du ein obj_respawner,
    in seinem Create :

    GML-Quellcode

    1. global.respawnList = ds_list_create();
    2. global.spawnTimerList = ds_list_create();

    und destroy event :

    GML-Quellcode

    1. ds_list_destroy(global.respawnList);
    2. ds_list_destroy(global.spawnTimerList);

    Im Step :

    GML-Quellcode

    1. for (i = 0; i < ds_list_size(global.respawnList);i++) {
    2. var _timer = ds_list_find_value(global.spawnTimerList,i) - 1;
    3. if (_timer <= 0) {
    4. ds_list_delete(global.spawnTimerList,i);
    5. var _id = ds_list_find_value(global.respawnList,i);
    6. instance_activate_object(_id);
    7. ds_list_delete(global.respawnList,i);
    8. }else{
    9. ds_list_replace(global.spawnTimerList,i,_timer);
    10. }
    11. }
    Alles anzeigen


    Im Gegner, wenn er sterben soll :

    GML-Quellcode

    1. ds_list_add(global.respawnList,id);
    2. ds_list_add(global.spawnTimerList,BELIEBIGE ZEIT);
    3. instance_deactivate_object(id);


    Das ist alles was du brauchst, die vermutlich performanteste Weise wie du alle Gegner unabhängig voneinander nach seperater Zeit respawnen lassen kannst. Das gute ist das du nach dieser Methode alle möglichen Objekte ablegen kannst die irgendwann wieder erscheinen Sollen.

    Sag mal obs klappt.
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel: