[GMS1] Variable loop beheben

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

  • [GMS1] Variable loop beheben

    Hallo liebe Community,

    leider habe ich schon längere Zeit nichts programmiert und bin ein wenig eingerostet deshalb habe ich auch ein Verständnisproblem.
    Ich arbeite im GMS1 an einen Sonic RPG das semi Runden basiert sein wird.

    Das wechseln und besiegen der Gegner klappt aber sobald kein Gegner mehr da ist läuft die Auswahl Variable weiter im loop (zwischen 0-2), ich befürchte das wird später einfluss auf weitere gegner haben.
    Im moment sind nur drei Gegner da aber ich plane Level die bis zu neun haben (jeder Slot kann somit bis zu 3 gegner in der que haben und ein maximum von 9 für eine Runde ist geplannt. Das Projekt ist zum downloaden unten verlinkt.

    Für jede hilfe bin ich sehr dankbar.


    Lösung:
    Im End Step Event in der Switch Abfrage habe ich das "Default" Statement rausgenommen und stattdessen als eigene Abfrage weiter unten eingebaut.
    Zusätzlich ist der Begrenzer jetzt im Any Key (Keyboard) Event.


    Variable:


    enemy_position
    wird zum markieren des Zieles verwendet.



    Create

    GML-Quellcode

    1. // Cursorwindow_set_cursor(cr_none);cursor_sprite = s_hand_point;image_speed = 0x=1000y=400// Basic Enemy Statsenemy_position = 0enemy_health_1 = 100enemy_health_2 = 100enemy_health_3 = 100


    End Step

    GML-Quellcode

    1. ///Target Rotation Systemswitch(enemy_position){case 0: if enemy_health_1<=0 enemy_position = 1 break; case 1: if enemy_health_2<=0 enemy_position = 2 break; case 2: if enemy_health_3<=0 enemy_position = 0 break;default: if enemy_health_1<=0 and enemy_health_2<=0 and enemy_health_3<=0 then enemy_position=4 break;}


    Any Key (Keyboard)

    GML-Quellcode

    1. if keyboard_check_pressed(vk_escape){room_goto(r_menu)}/// Target Switchif keyboard_check_pressed(vk_right){if enemy_position<2{enemy_position+=1}else{enemy_position=0}}/// Attackingif keyboard_check_pressed(ord('A'))if enemy_position = 0if enemy_health_1>0{enemy_health_1-=5}if keyboard_check_pressed(ord('A'))if enemy_position = 1if enemy_health_2>0{enemy_health_2-=5}if keyboard_check_pressed(ord('A'))if enemy_position = 2if enemy_health_3>0{enemy_health_3-=5}


    Draw

    GML-Quellcode

    1. /// Basic Drawdraw_self()draw_set_color(c_black)//draw_text(0,0,"mouse_x:"+string(mouse_x))//draw_text(0,20,"mouse_y:"+string(mouse_y))draw_text(0,0,"Enemy Position:"+string(enemy_position))// Only Draw it in the Battle Roomif room = r_battle_ground{switch(enemy_position){case 0: if enemy_health_1>0 draw_sprite(s_enemy_circle,0,1650,760) break;case 1: if enemy_health_2>0 draw_sprite(s_enemy_circle,0,1423,875) break;case 2: if enemy_health_3>0 draw_sprite(s_enemy_circle,0,1670,980) break;}}// Draw_Enemyif room = r_battle_ground{if enemy_health_1>0 draw_sprite(s_enemy,0,1630,650)if enemy_health_1>0 draw_text(1550,500,"Enemy Health: "+string(enemy_health_1))if enemy_health_2>0 draw_sprite(s_enemy,0,1380,740)if enemy_health_2>0 draw_text(1300,600,"Enemy Health: "+string(enemy_health_2))if enemy_health_3>0 draw_sprite(s_enemy,0,1650,860)if enemy_health_3>0 draw_text(1550,800,"Enemy Health: "+string(enemy_health_3))}// Draw_Playerif room = r_battle_ground{draw_sprite(s_player,0,570,700)}


    GMZ Datei (Google Drive): GMZ-Projekt
    Bilder
    • SRPG_01.png

      421,78 kB, 1.024×768, 368 mal angesehen

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

  • instance_exists() kann da sehr nützlich sein.

    Ich denke eine saubere Lösung wäre zu Levelbeginn alle Gegner in eine ds_list zu packen. Mit ds_list_find_value() kann man dann darüber iterieren. Und wenn ein Gegner besiegt wird löschst du ihn aus der Liste raus. Somit kannst du auch kontrollieren welche Gegner man überhaupt anvisieren kann.

    Du könntest zb 3 Vasallen und einen Bossgegner auf dem Bildschirm haben, erst wenn die 3 weg sind fügst du den Boss zu der Liste hinzu und er kann angegriffen werden.
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel: