Skocz do zawartości

pytania od Karola


Rekomendowane odpowiedzi

GML//kod podczas wysadzania

global.xx=x;//przypisz x dynamitu do globalnej

global.yy=y;

with all if(sqrt(pow((x-global.x),2)+pow((y-global.y),2)))<=50)//sprawdź odległość

instance_destroy()

 

... :blink:

albo prosciej, mozesz zrobic sprita o wymiarach 100x100 (dynamit, czy jaki tam masz obrazek z lekko zacieniowana reszta pola), wycentrowac go, w create obiektu dac dynamit=0. A wtedy gdy powiedzmy klikniesz go czy co tam chcesz, zmieniasz sprite (mozesz bloczkiem) tego dynamitu, na dynamit z zacieniowanym tlem 100x100, ustawiasz zmienna na dynamit=1.

 

wtedy przy kolizji z iloma obj chcesz, ustawiasz

if dynamit=1

then instance_destroy()

 

oczywiscie zaznaczasz applies to object jaki tam chcesz :rolleyes:

Odnośnik do komentarza
Udostępnij na innych stronach

Czyli , ustawiasz w create dynamitu dynamit=false, gdy się wysadza ma dynamit=1. Potem sprawdzasz jakieś tam inne obiekty czy mają kolizję z dynamitem gdy ten jest wysadzany. Załóżmy, że w grze jest 200 obiektów, jakie możemy wysadzić. Wyobraź sobie ile to linijek kodu jeżeli mamy sprawdzać każdy obiekt z osobna. Po za tym sprawdzanie kolizji jest wykonywane co krok (jeżeli używasz eventu collision). Po co dodatkowo sprawdzać taką ilość kodu co krok.

 

Ja tam myślę, że lepiej wykonać kod tylko raz, podczas wysadzania dynamitu. To tylko 4 linijki kodu.

 

I jeszcze jedno, co jest niezrozumiałego w kodzie, którym podałem?

Odnośnik do komentarza
Udostępnij na innych stronach

Czyli , ustawiasz w create dynamitu dynamit=false, gdy się wysadza ma dynamit=1. Potem sprawdzasz jakieś tam inne obiekty czy mają kolizję z dynamitem gdy ten jest wysadzany. Załóżmy, że w grze jest 200 obiektów, jakie możemy wysadzić. Wyobraź sobie ile to linijek kodu jeżeli mamy sprawdzać każdy obiekt z osobna. Po za tym sprawdzanie kolizji jest wykonywane co krok (jeżeli używasz eventu collision). Po co dodatkowo sprawdzać taką ilość kodu co krok.

 

Ja tam myślę, że lepiej wykonać kod tylko raz, podczas wysadzania dynamitu. To tylko 4 linijki kodu.

 

I jeszcze jedno, co jest niezrozumiałego w kodzie, którym podałem?

Tylko że with all zniszczy dosłownie wszystko

nawet to czego twórca mógłby nie chcieć

 

jak już to with obj_destroy

 

i dać parent dla wszystkich obiektów które maja się niszczyć z ów obiektem obj_destroy

Odnośnik do komentarza
Udostępnij na innych stronach

LionX Dagger, masz rajcę, rozwali wszystko. Ale zawsze można dodać if, w którym sprawdzi się jaki jest object_index obiektu:

GML
with all if(object_index!=object_nieniszcz1&&object_index!=object_nieniszcz2 idt) //cała reszta kodu</span>

Przy większej ilości obiektów, których nie da się rozwalić, if będzie stosunkowo długi, ale jeżeli jest ich kilka to nie ma problemu.

 

Elevator

Równanie okręgu: x^2+y^2=r^2. Z tego wynika, że odległość r wynosi: r=PIERWIASTEK(x^2+y^2). Interesuje nas całe pole (wraz z obwodem) zakreślone przez tą krzywą, dlatego PIERWIASTEK(x^2+y^2)<=r. Po prostu czysta matematyka.

 

karolo320

Powinno być power(), sry.

Odnośnik do komentarza
Udostępnij na innych stronach

Candy, a jak chciałbym, żeby wszystkim objectom w okregu tych 50 pixeli odjela się zmienna? (kazdy obiekt ma zdefiniowana zmienna o tej samej nazwie)

 

I teraz next pytanie:

Chciałbym zrobić tak, że jeżeli istnieje obiekt drzwi1 to obszar np od 100,100 do 200,200 jest całkowicie czorny.

Zrobiłem to tak, że w create dałem utworz obiekt (ktory ma czarny sprite wielkosci pola ktore chce miec czarne) i ustawilem x,y.

Ale to rozwiazanie zajmowalo za duzo procesora (bo chce miec duzy obszar czarny) i gra "siadała" przy starcie ;p

Odnośnik do komentarza
Udostępnij na innych stronach

I teraz next pytanie:

Chciałbym zrobić tak, że jeżeli istnieje obiekt drzwi1 to obszar np od 100,100 do 200,200 jest całkowicie czorny.

Zrobiłem to tak, że w create dałem utworz obiekt (ktory ma czarny sprite wielkosci pola ktore chce miec czarne) i ustawilem x,y.

Ale to rozwiazanie zajmowalo za duzo procesora (bo chce miec duzy obszar czarny) i gra "siadała" przy starcie ;p

 

Zamiast tworzyć obiekt, rysuj samego sprajta na ekranie przez draw_sprite z jakiegoś obiektu odpowiedzialnego tylko za rysowanie.

Odnośnik do komentarza
Udostępnij na innych stronach

karolo320

Pytanie pierwsze:

GML
with all if(sqrt(pow((x-global.x),2)+pow((y-global.y),2)))<=50)

{

if(object_index!=nazwy obiektów których nie da się rozwalić)

zmienna-=xxx;

else

instance_destroy()

}

Co do drugiego. Może spróbuj rysować kwadrat za pomocą DRAW, nie będzie potrzeby tworzenia nowego sprite'a.

GML
draw_rectangle(x,y,x+200,y+200,0)
Odnośnik do komentarza
Udostępnij na innych stronach

Próbowałem, też się zacina.

I to nie wina kompa bo sprawdzałem na trzech ;d

To jeszcze tak jak candy pisze spróbuj. Albo o surface poczytaj. Albo jeśli to stałe miejsce to przygotuj odpowiednio spreparowane tło i podmieniaj "w locie".

Odnośnik do komentarza
Udostępnij na innych stronach

Możesz jeszcze przerzucić draw_set_font() do create. Po co ma w kółko powtarzać tę linijkę, jeżeli i tak nic nowego to nie wnosi. Wystarczy, że raz wywołasz tę funkcję. Font się nie zmieni, jeżeli nie wywołasz znowu taj funkcji z innym argumentem.

Odnośnik do komentarza
Udostępnij na innych stronach

Co do kolejnego pytania. Możesz zrobić to podobnie jak napisałem kilka postów wyżej albo tak:

GML
with all if(variable_local_exists("nazwa zmiennej")) nazwa_zmiennej= coś;

Ważne, aby argument funkcji variable_local_exists() był stringiem.

Odnośnik do komentarza
Udostępnij na innych stronach

Witam.

Tym razem proszę o coś bardziej złożonego (chyba).

Chcę, że kiedy na mapie jest 1 spawn (obiekt) to wszytkie mobki wychodzą z niego (albo z okreslonej pozycji, ja se dopisze ;d)

A jeżeli jest ich więcej to mobki "dzielą" się, czyli wychodzą jeden z jednego, drugi z drugiego.

I chciałbym, żeby ten skrytp czy co to będzie mógł obsługiwać do 10 spawnów :)

Z góry dzięki!

Odnośnik do komentarza
Udostępnij na innych stronach

Tworzymy obiekt odpowiedzialny za spawn mobków, np o_spawn. Tworzymy n obiektów o_spawn_2.

GML
//=== CREATE o_spawn_2===

o_spawn.tab[o_spawn.i]=id;

o_spawn.i+=1;

Stworzyliśmy tablicę tab w o_spawn, która przechowuje id obiektów o_spawn_2. Oczywiście wcześniej w o_spawn trzeba zadeklarować zmienną i. Teraz idziemy do o_spawn. Załóżmy, że wywołanie alarm[0] powoduje stworzenie mobka. Teraz piszemy w alarmie:

GML
//=== ALARM o_spawn===

// tworzymy zmienną tymczasową _a

var _a;

 

// teraz będziemy losować liczbę całkowitą z przedziału od 0 do i

// poczytaj w helpie co te funkcje dokładnie robią

// wylosowana liczba będzie odnosić nas do jakiejś komórki tablicy tab

_a=floor(random(i));

 

// tworzymy mobka o współrzędnych takich samych jakie ma o_spawn_2, którego id znajduje się w komórce o indeksie _a (tablicy tab)

instance_create(tab[_a].x,tab[_a].y,o_mob)

 

Zakładam, że na mapie będzie co najmniej jeden obiekt o_spawn_2. Kod ten pozwoli Ci obsłużyć dowolną ilość spawnów.

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