Skocz do zawartości

Zablokowane Wiedza z GM i GMLa za AS! ;)


Jins

Rekomendowane odpowiedzi

Witam Serdecznie... A więc jako pierwszy post na tym oto forum mam kilka pytań. W zamian za odpowiedź mogę pomóc co nie co z Action Scriptu, gdyż troszkę pisałem stronki we flashu. Ale wracając do rzeczy... Oto pytania:

 

Pytanie 1.

Jak stosować tutaj warunki? W AS wszystko było jasne, jak to to to, jak to to tamto i gotowe. Znalazłem tutaj w dokumentacji:

 

 

Warunek if ma następującą konstrukcję:

GML
if ( <warunek> ) <zdarzenie>lub

 

if ( <warunek> ) <zdarzenie> else <zdarzenie>

możesz spotkać się też z wersją:

 

if (<warunek> ) then <zdarzenie>;

 

No bardzo fajnie, tylko jak zadeklarować warunek albo zmienną?

Przypuśćmy że mam obiekt o nazwie ZUPA i obiekt o nazwie TALERZ.

Jak zrobić żeby zupa sprawdzała czy talerz (współrzędne to 60,60) jest pusty? Jeżeli jest pusty to ma go zalać...

A talerz jest pusty jeżeli ma mniej nić 50.

Ja to rozumiem tak:

 

GML
if ( <warunek> ) then <zdarzenie>

 

czyli:

 

GML
if (zupa_zawartosc<50) then <instance_create(60,60,zupa)>

 

?

 

Tylko że to kurcze nie działa...

Macie jakieś rozwiązania tego problemu? Wiem że to podstawa, ale nie mogłem znaleźć nic za pomocą szukajki...

 

 

Pytanie 2.

 

Aby skrypt był wykonywany non stoper, tzn. żeby właśnie ten talerz cały czas sprawdzał czy jest w nim zupa to wystarczy że zrobię coś takiego:

 

5yexbr.png

Tzn: Stworzę script0, wrzucę do niego skrypt z warunkiem. Stworzę obiekt controler, w którym przy CREATE... Ups... No właśnie... Co w tym CREATE ustawić aby skrypt był sprawdzany (czyt. realizowany) ?

 

Pytanie 3.

 

Proszę o wyjaśnienie działania czasu... Zauważyłem że tutaj stosuje się Alarm... Patrzyłem w dokumentacji i jest tam napisane:

 

Alarm

Alarm można przyrównać do minutnika. Ustwiamy długość alarmu za pomocą akcji, po czym ustawiona liczba maleje. Gdy osiągnie 0 - wykonana zostanie akcja. Gdy alarm jest nieaktywny przyjmuje wartość -1. Dla przykładu, możesz sprawić by co 20 korków (steps), obiekt zmieniał kierunek.

 

No ale chyba jestem za głupi i tego nie rozumiem.

Mam na przykład obiekt CHLEB i chcę żeby smarował się on co 5 sekund to jak to ustawić?

 

Pytanie 4.

 

Nie mogłem tego nigdzie znaleźć, a mianowicie widoczność bądź ukrycie przedmiotu działa tutaj na zasadzie:

 

GML
objekt.visible=true;

 

lub

 

GML
objekt.visible=false;

 

tak?

 

Pytanie 5.

 

Pętle...

 

A więc chciałbym żeby dana czynność wykonywała się co jakiś czas..

Rozumiem że wystarczy ustawić w evencie - ALARM, zdarzenie - CODE a w nim pętle for, tak?

tzn:

GML
{

for (talerz=0; i<=9; i+=1) list = i+1;

}

Tylko na jakiej zasadzie to działa?

W dokumentacji jest napisane:

GML
for (<wyrażenie1>; <warunek>; <wyrażenie2>;)<wyrażenie3>

+

Wygląda skomplikowanie, nieprawdaż? Jednak to bardzo proste. Wygląda to mniej więcej tak:

- wyrażenie1 jest wykonywane;

- warunek jest sprawdzany;

- jeżeli jest prawdziwy, wyrażenie3 jest wykonywane;

- potem wyrażenie2;

- potem znowu od początku, aż warunek będzie fałszywy.

Jeżeli nie rozumiesz, to pomyśl tak. Wyrażenie1 inicjuje pętle for. Warunek sprawdza, czy pętla ma być zakończona. Wyrażenie2, to takie "przeciągnięcie" pętli, które jest sprawdzane za każdym następnym razem po wykonaniu wyrażenie1.

Najpopularniejszym przykładem wykorzystania for jest tworzenie licznika z pewnym przedziałem liczbowym.

Przykład:

kod:

GML
{

for (i=0; i<=9; i+=1) list = i+1;

}

 

Ja rozumiem przez to tak:

wyrażenie1 jest wykonywane - czyli to co aktualnie się dzieje, na przykład lata sobie mucha,

warunek jest sprawdzany - czyli czy mucha wciąż lata,

jeżeli jest prawdziwy, wyrażenie3 jest wykonywane - jeżeli mucha lata to trzeba ją wygonić,

potem wyrażenie2 - tego nie za bardzo rozumiem... musi być to wyrażenie?

potem znowu od początku, aż warunek będzie fałszywy - mucha lata, sprawdzamy czy lata, jeżeli lata to trzeba ją wygonić i to czego nie rozumiem.

 

A więc w kodzie będzie to wyglądało tak:

 

GML
{

for (mucha_lata=1; mucha_lata<1; odgonic_muche=1) 'wyrażenie2' ?

}

 

Na takiej zasadzie to działa czy może coś pogmatfałem?

 

Wiem że sporo tutaj rzeczy i to pewnie jeszcze bardzo podstawowych, no ale kurczak nie mogę sobie z tym poradzić dlatego postanowiłem poprosić Was o pomoc. Jeżeli mi pomożecie to będę bardzo wdzięczny, jeżeli nie to będę wdzięczny za to że w ogóle przeczytaliście tak długi temat... eh... Tyle ode mnie.

 

Pozdrawiam

Jinsssss...

Odnośnik do komentarza
Udostępnij na innych stronach

1. tak

2.

GML
script0()

3. create

GML
alarm[0]=5*room_speed
, alarm0
GML
posmarowany = true

alarm[0]=5

4. tak, ale jeśli dajesz ten kod w obiekcie który ma zniknąć lub sie pojawic, wystarczy samo "visivle = true" albo "visible = false" :)

5. przepraszam, ale się nie znam

 

Wiem że sporo tutaj rzeczy i to pewnie jeszcze bardzo podstawowych, no ale kurczak nie mogę sobie z tym poradzić dlatego postanowiłem poprosić Was o pomoc. Jeżeli mi pomożecie to będę bardzo wdzięczny, jeżeli nie to będę wdzięczny za to że w ogóle przeczytaliście tak długi temat... eh... Tyle ode mnie.

jakie sporo? tylko 5 :)

i nie musisz się nam odwdzięczać pomocą w AS, bo to, co Ci podałem ja i może podadzą inni, to całkowite podstawy, których z rracji, że jesteś nowy, masz prawo nie znać :)

 

pzddr.

Odnośnik do komentarza
Udostępnij na innych stronach

Ad. 1:

GML
if (zupa.zawartosc<50) { instance_create( 60, 60, zupa ); } // Kropka</span>

 

Ad. 2:

Aby był wykonywany co step musisz: w obiekcie controler utworzyć event Step, i do niego wstawić blok kodu:

GML
script0();

 

Ad. 3:

W Create CHLEB, wstaw blok kodu:

GML
nasmarowany = 0;

 

alarm[0] = room_speed*5; // 5 sekund, 0 to indeks Alarmu</span>

 

Natomiast w event 'Alarm 0', wstaw blok kodu:

GML
nasmarowany += 1;

 

alarm[0] = room_speed*5; // Powtarzamy alarm</span>

 

Ad. 4:

Tak, dla self instancji wystarczy:

GML
visible = false; // Gdy ta zmienna jest false, w obiekcie NIE wykonuje się event Draw</span>

 

Ad. 5:

Game Maker obsługuje różne formy pętli: while, for, repeat, do{...}until(...) ...

Co do pętli for, jest to taka sama zasada jak w AS: for( <start>; <warunek>; <jeśli warunek == false> ) { <wykonuj dopóki warunek != true> }

GML
for( nalesniki = 0; nalesniki < 16; nalesniki += 1 ) // Brak w GMie pre/post inkrementacji/dekrementacji

{

_i = instance_create( random(room_width), random(room_height), objNalesnik ); // Wystrzegaj się polskich znaków w nazwach

_i.image_blend = choose( c_white, c_red, c_green, c_blue );

}

Odnośnik do komentarza
Udostępnij na innych stronach

No szczerze Wam powiem chłopaki że aż tak szybkiej odpowiedzi to się nie spodziewałem. ;) Bardzo serdecznie Wam dziękuję.

Ostatnie pytanie do Was i możecie się położyć spać wiedząc że zdobyliście po 2 cegiełki ^_^

A mianowicie: Czy istnieje możliwość otworzenia innego elementu w GameMaker?

Już wyjaśniam...

A więc w folderze gra mam pliki:

GRA - główna gra

GRA2 - powiedzmy że to inna gra albo po prostu edytor...

 

No i chodzi mi teraz o to, aby za pośrednictwem GRA (np. jakiś guzik) otworzyć plik GRA2, a nie wybierając go w folderze i nie zamykając tym samym pliku GRA.

Mam nadzieje że rozumiecie o co mi chodzi.

 

Pozdrawiam

Jinssss

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

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