Skocz do zawartości

Przechwycenie ID instancji, która była poprzednio kliknięta


cross

Rekomendowane odpowiedzi

Witam, mam mały problem z instancjami.

Mianowicie tworzę prostą gierkę, w krórej skryp losuje i tworzy przeciwników 

/// FUNKCJA createMonster(x, y, hp)
var xx = argument0
var yy = argument1;
var hp = argument2;
newMonster = instance_create_layer(xx, yy, "Arena", oMonster); // oMonster to objekt, w którym przechowuje wszystkich przeciwników (130)
newMonster.image_index = irandom_range(0, 130); // losowanie spośród 130 przeciwników
newMonster.hp = hp;
/// oMonster - STEP

with(instance_nearest(mouse_x, mouse_y, oMonster){ // Musiałem tego użyć, żeby poruszał się objekt, którego klikam
  if(mouse_check_button_pressed(vk_left) && collision_ponit(mouse_x, mouse_y, oMonster, true, false)){
      animuj = true;
  }
}

/// oMonster - DRAW

if(animuj){
	y += swith; // na starcie swith=1 
	if(y >= 110){ swith = -1; }
	else if(y <= 100){ swith = 1; }
}
           

no i teraz w oMonster mam, że jak kliknę na niego myszką, to zaczyna sie pętla która "animuje", zmienia położenie góra->dół->góra i chcę, aby po kliknięciu kolejnego przeciwnika (oMonster), ten poprzedni przestał się poruszać.

 

EDIT: Pisałem z pamięci, także jeśli znajdzie się w kodzie jakaś literówka, to nieważne - kod w GMS2 działa, tylko brakuje mi pomysłu (albo pora taka) jak zrobić to o czym pisałem.

Możliwe, że jak jutro na spokojnie usiądę, to znajdzie się rozwiązanie, ale fajnie by było, aby ktoś się tutaj udzielił - lepiej mieć kilka rozwiązań niż żadnego ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Ja to zawsze robię przez jeden nadrzędny obiekt kontroler. Nazwijmy go sobie "oControl".

Teraz u ciebie po kliknięciu będziesz przypisywał do niego ID oMonster.

/// oMonster - STEP

with(instance_nearest(mouse_x, mouse_y, oMonster){ // Musiałem tego użyć, żeby poruszał się objekt, którego klikam
  if(mouse_check_button_pressed(vk_left) && collision_ponit(mouse_x, mouse_y, oMonster, true, false)){
      animuj = true;
      oControl.monster = id
  }
}

Trzeba to jeszcze rozwinąć o sprawdzenie, czy tylko jeden może być kliknięty:

/// oControl - CREATE
monster = noone

/// oMonster - STEP

with(instance_nearest(mouse_x, mouse_y, oMonster){ // Musiałem tego użyć, żeby poruszał się objekt, którego klikam
  if(mouse_check_button_pressed(vk_left) && oControl.monster==noone && collision_ponit(mouse_x, mouse_y, oMonster, true, false)){
      animuj = true;
      oControl.monster = id
  }
}

Brakuje jeszcze odznaczania. Więc gdzieś musisz ustawiać oControl.monster = noone.

 

 

Wyświetlanie oczywiście już nie jest takie jak dałeś, a:

/// oMonster - DRAW

if(oControl.monster == id){
	y += swith; // na starcie swith=1 
	if(y >= 110){ swith = -1; }
	else if(y <= 100){ swith = 1; }
}
 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Dziękuję za pomoc.

Zmieniłem tylko to:

with(instance_nearest(mouse_x, mouse_y, oMonster){ // Musiałem tego użyć, żeby poruszał się objekt, którego klikam
  if(mouse_check_button_pressed(vk_left) && oControl.monster==noone && collision_ponit(mouse_x, mouse_y, oMonster, true, false)){
      animuj = true;
      oControl.monster = id
  }
}

na to:

with(instance_nearest(mouse_x, mouse_y, oMonster){ // Musiałem tego użyć, żeby poruszał się objekt, którego klikam
  if(mouse_check_button_pressed(vk_left) && collision_ponit(mouse_x, mouse_y, oMonster, true, false)){
      oControl.monster = noone;
      oControl.monster = id;
  }
}

Bo wcześniej nie zatrzymywało i nie uruchamiało instancji po drugim kliknięciu myszki - po prostu tylko raz przypisywało zmiennej oControl.monster wartość ID i przy następnym kliknięciu warunek if nie mógł być spełniony (oControl.monster==noone), bo nigdzie poza eventem Create nie jest ta zmienna ponownie ustawiana na noone.

Ale to już drobna modyfikacja, ważne że mnie naprowadziłeś ;)

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ę...