Skocz do zawartości

100wrogow=100objectow


Rekomendowane odpowiedzi

Mam znowu problem. Przypuscmy ze: Jest gra RPG. . Jednqak kazda gra rpg ma duuuuzo wrogow, o innych levelach. Jak zrobic zeby nie tworzyc dla kazdego wroga o innym levelu, osobnego objectu. Bo gdy bedzie tyle samo objectow wrogow co wrogow na planszy, to bedzie tego strrrrrasznie duuzo, A to BAAAAAAARDZO skomplikuje gre :( :( Jaki jest najprostszy i najwydajniejszy sposob na rozwiązanie tego problemu??

Odnośnik do komentarza
Udostępnij na innych stronach

Według mnie prostym sposobem jest losowe generowanie poziomu wroga w zależności od poziomu BG. Czyli w create wroga

level = floor(random(BG.level)+1)

pewnie się pomyliłem gdzieś w nawiasach :) Ogólnie chodzi o wylosowanie liczby całkowitej z przedziału od 1 do BG.level czyli aktualnego poziomu bohatera.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Najprostszy sposób jest taki by stworzyć jeden typ obiektu, który miałby różne zmienne lokalne określające jego cechy: name, class, level, energy, sprite itd. zależnie od których obiekt będzie przybierał postać żądanego wroga.

 

Teraz aby stworzyć nowego wroga wystarczy się zaraz do niego odwołać. Załóżmy, że mamy generator potworów. Przykładowe tworzenie nowego wroga:

id_wroga = instance_create(x,y,wrog);
id_wroga.name = "Wilkołak";
id_wroga.level = 1;
id_wroga.energy = 100;

lub

id_wroga = instance_create(x,y,wrog);
with ( id_wroga )
{
name = "Wilkołak";
level = 1;
energy = 100;
}

Jednakże nie jest to 100% zadowalający sposób, ponieważ create tworzonego obiektu wykona się zawsze szybciej niż przypisanie zmiennych lokalnych z poziomu innego obiektu (reszta eventów jest następna w kolejce). Event create jest bardzo pomocny w takich sytuacjach, do "spersonalizowania" wroga na podstawie zmiennych zaraz na początku jego istnienia.

 

Co w takim można zrobić? Wykorzystać sprytną sztuczkę przesyłu danych za pomocą zmiennych globalnych. Robimy tak:

 

Na początku gry:

global.transfer_value[0] = "";
global.transfer_value[1] = "";
global.transfer_value[2] = "";

Tworzymy nowy skrypt o nazwie nowy_przeciwnik

var id_wroga;
global.transfer_value[0] = argument2;
global.transfer_value[1] = argument3;
global.transfer_value[2] = argument4;
id_wroga = instance_create(argument0,argument1,obiekt_wroga);

 

a w create obiekt_wroga na samym poczatku dajemy:

name = global.transfer_value[0];
lavel = global.transfer_value[1];
energy = global.transfer_value[2];

 

Teraz gdy chcemy stworzyć obiekt wystarczy wywołać taki skrypt:

nowy_obiekt(x,y,"nazwa",level,energy);

np.

nowy_obiekt(100,100,"Goblin",1,20);

 

Dzięki systemowi natychmiastowego przesyłania żądanych zmiennych do nowych obiektów wroga poprzez zmienne globalne, mamy pewność, że wartości będą możliwe do odczytu już w event create.

 

To był kurs elastycznego i bardziej profesjonalnego pisania gry cz. 2 ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...