cross Opublikowano 29 Lipca 2019 Udostępnij Opublikowano 29 Lipca 2019 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 Więcej opcji udostępniania...
Threef Opublikowano 30 Lipca 2019 Udostępnij Opublikowano 30 Lipca 2019 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; } } cross 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
cross Opublikowano 30 Lipca 2019 Autor Udostępnij Opublikowano 30 Lipca 2019 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 Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę