Skocz do zawartości

Problem


killhunt

Rekomendowane odpowiedzi

Cześć, mam pewien problem.

Mam jeden skrypt, dzięki któremu pewien obiekt znika, jeżeli w pobliżu nie ma określonej liczby innych obiektów. Teraz chciałbym dodać do tego skryptu jeszcze jeden warunek, teraz obiekt ma zniknąć, jeżeli w pobliżu nie ma określonej ilości innych obiektów oraz nie porusza się. Wszystko w teorii zrobiłem dobrze, problem w tym, że ten drugi warunek jest pomijany (obiekt się porusza, ale kiedy oddala się od zbioru innych obiektów i tak znika). Na obiekt ten działa fizyka, i nie ma on nadanej żadnej prędkości - porusza się tylko dlatego, że spada, odbija itd. Dlaczego ten warunek jest pomijany? Podam tu skrypt z którego korzystam i prosiłbym o pomoc, co tu zrobić, żeby wszystko poprawnie działało.

 

GML
var ilosc=0;

with(nazwa_obiektu){

if distance_to_object(other)<125

{

ilosc+=1;}

}

 

if (ilosc<9){

instance_destroy();

}

 

Z góry dzięki za pomoc.

Odnośnik do komentarza
Udostępnij na innych stronach

Sprawdź w debuggerze wartości vspeed i hspeed, przed zniknięciem obiektu.

Poza tym w warunku użyłeś sumy logicznej, no a może zdarzyć się sytuacja, że obiekt będzie poruszał się w jednej płaszczyźnie i wtedy vspeed lub hspeed będzie wynosiło 0 (kod się wykona), a w spoczynku tak naprawdę nie będzie.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeżeli obiekt nie porusza się, to x = xprevious i y = yprevious, niezależnie od tego, czy ma jakąś prędkość, czy przesunięcie było skokowe. A zatem:

GML
var ilosc=0;

with(nazwa_obiektu) if distance_to_object(other)<125

{

ilosc+=1;

}

if (xprevious = x)&&(yprevious = y)&&(ilosc < 9)

{

instance_destroy();

}

Twój warunek nie działałby jeśli, korzystając z hspeed i vspeed, poruszałbyś się tylko w jednej osi.

 

Dodam, że im więcej obiektów, tym dłużej ten skrypt się wykonuje, nie polecam więc wykonywania go 60 razy na sekundę, przy ~60 obiektach mogłoby przycinać na słabszych komputerach. Ewentualnie użyj jakichś technik optymalizacyjnych, np. dezaktywuj obiekty poza obszarem ekranu.

Odnośnik do komentarza
Udostępnij na innych stronach

moze sproboj odwrotnie:

jezeli nasz objekt=o_kolo musi miec do zicia kilka obiektow=o_kwadrat to:

 

o_kwadrat moze mowic o_kolo ze jest v poblizu v eventu(begin STEP).

GML
if (distance_to_object(o_kolo)<_max_odleglosc) {o_kolo._ilocs_kwadratow+=1; };

 

o_kolo natomisat v eventu(STEP)

GML
if (_ilocs_kwadratow<_min_ilosc_kvadratow && xprevious==x && yprevious==y) {instance_destroy(); }

else {_ilocs_kwadratow=0; };

 

co to robi:

1, o_kolo zeruje ilocs_kwadratow v event create

2, kazdy o_kwadrat zapisuje sie do o_kolo jesli jest zablisko v event begin STEP

3, o_kolo v event STEP nisci sie jesli niema dosyc p_kwadrat albo o_kolo sie rusza, jestli nie to zeruje ilocs_kwadratow dla novego begin STEP

 

mozna uzyc sztuczky z vykonaniem tego kodu raz na sekunde albo jaksi tam maly czas.

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