Skocz do zawartości

Kilka pytań


Rekomendowane odpowiedzi

Cześć,jestem nowy i mam kilka pytań odnośnie GMl.

Robię platformówkę z bardzo rozwiniętymi przeciwnikami gdyż ma tam być również opcja arena i mam problem:

1. Jak zrobić ,że gdy walka = 1 obiekt będzie Visible a gdy 0 będzie odznaczony.

2. Jak zrobić by gdy się najedzie się na pasek pokaże ile ma się hp(np 87/100)

mam taki kod:

GML
draw_set_color(c_red);

draw_rectangle(view_xview[0]+10,view_yview[0]+10,view_xview[0]+100,view_yview[0]+20,1);

draw_rectangle(view_xview[0]+10,view_yview[0]+10,view_xview[0]+max(1,(hero.hp/hero.maxhp)*100),view_yview[0]+20,0);

3. Jak zrobić latanie?

Strzałka w górę/dół - regulacja wysokości

Strzałka w prawo/lewo - ruch

4. Jak zrobić teleport?

5. Jak zrobić by przeciwnik atakował?

6. Jak zrobić by przeciwink miał kilka ataków:

Miecz(wręcz)

Łuk(dystans)

Magia(dystans)

I by atak losowo był wybierany. A gdy atakuje magią to mu odbiera manę.

Odnośnik do komentarza
Udostępnij na innych stronach

1.

 

GML
if walka=1 { visible=true }

if walka=0 { visible=false }

 

3.

 

Zrób tak:

GML
if grawit=true

 

{

// tu kod na grawitacje

}

 

i jak masz np. kolizję z jakimś obiektem to dajesz:

 

GML
grawit=false

 

4.

 

W kolizji z jakimś obiektem dajesz:

 

GML
x= 22 // tutaj podaj ile ma wynosić x

y= 33 // tutaj podaj ile ma wynosić y</span>
Odnośnik do komentarza
Udostępnij na innych stronach

1. Masz kilka sposobów

GML
if(walka)

visible=true;

else

visible=false;

Albo dajesz w stepie

GML
visible=walka;

2. Podobnie jak wyżej. Musisz sprawdzić czy położenie myszki (mouse_x i mouse_y) znajdują się na pasku.

GML
if(mouse_x<prawa krawedz paska && mouse_x>lewa krawedz paska && (analogicznie z y))

{

//kod na wyświetlanie stanu życia

// funkcja draw_text czy coś innego

}

3. Podobnie jakbyś chciał, aby postać chodziła w czterech kierunkach. Poszukaj, jest mnóstwo przykładów z tym.

4. Po prostu zmień położenie postaci (x i y).

5. To już większy problem. Zależy co ma zrobić i kiedy. Nikt raczej nie poda Ci takiego kodu. Dużo z tym roboty. To najtrudniejsza rzecz jaką będziesz musiał zrobić. Wrogowie muszą odpowiednio się zachowywać, muszą być wyświetlane odpowiednie sprity oraz musi być zrobiona jeszcze interakcja z graczem (np gdy przeciwnik go uderzy). Musisz uzbroić się w cierpliwość i pisać linijkę po linijce.

6. Funkcja choose() i if(), który sprawdzi czy atak jest magiczny i odejmie odpowiednią ilość many.

Odnośnik do komentarza
Udostępnij na innych stronach

Chodzi mi o coś takiego

Gra jest podzielona na 2 części:

- Podróż(platformówka która mieści się w room0)

- Arena(walka)

I gdy w podróży pokonamy łucznika będziemy mogli nim GRAĆ w arenie.

Czyli:

Na początku gry na arenie mamy do dyspozycji tylko wojownika.

Pokonamy w podróży łucznika możemy nim grać w arenie KAPUT?? :D

Odnośnik do komentarza
Udostępnij na innych stronach

To daj gdzieś zmienną, która będzie przetrzymywać informację (ewentualnie przechowuj w pliku zewnętrznym), czy łucznik został pokonany. Na przykład za pomocą zmiennej globalnej:

GML
global.lucznik=false;// false- nie pokonaliśmy łucznika, true- możemy nim grać.

//sprawdzamy (na arenie) czy pokonaliśmy łucznika i możemy nim grać

if(global.lucznik)

{

// tworzymy obiekt łucznik i możemy go wybrać, albo coś podobnego

}

Odnośnik do komentarza
Udostępnij na innych stronach

Dam łatwiejszy sposób na pyt. nr. 4 :

w zakładce [move] masz taki klocek : actionjumprandom.gif. Wstaw ten klocek w kolizji o_hero z o_teleport albo po wciśnięciu jakiegoś klawisza, i gotowe.

Ale to jest na skakanie w przypadkowe miejsce na planszy...

 

Do teleportowania nie trzeba kodu :P

Odnośnik do komentarza
Udostępnij na innych stronach

Klocki to zło :/.

 

Tworzysz obiekt SILNIK, zaznaczasz w nim persistent i tak:

Create - SILNIK

GML
lucznik=0

Instance Destroy - łucznik

GML
SILNIK.lucznik=1

room1(arena), creation code

GML
if SILNIK.lucznik=1

{

instance_create(x,y,/*obiekt łucznika*/)

}

else

{

instance_create(x,y,/*obiekt postaci którą grasz, jeśli łucznik nie jest odblokowany*/)

}

 

Co prawda jeśli odblokujesz łucznika to będziesz musiał nim grać, ale nie napiszę ci całej gry.

Odnośnik do komentarza
Udostępnij na innych stronach

Co do tego wyboru z kim ma się grać znalazłem sposób:

dałem im perentsis(jakoś tak) i mam to w arenie oraz podróży(dzięki temu mogę używać).

I mam problem bo gdy włączam arene,a potem wracam do menu to te postacie są również w menu.jak się tego pozbyć?

Odnośnik do komentarza
Udostępnij na innych stronach

Mam problem z visible.otóż chcę stworzyć minimapę i mam na razie do tego 2 obiekty:

-mapa

-zamknij ( po kliknięciu będzie zamykał minimapę)

 

W mapie mam taki kod:

CREATE

GML
global.map=0;

 

depth=-room_height;

LEFT PRESSED

GML
global.map=1

a w zamknij taki:

CREATE

GML
depth=-room_height;

DRAW

GML
x=view_xview[0]+550;

y=view_yview[0]+102;

 

draw_sprite(sprite_index,image_index,x,y);

GML
if(global.map=1)

{

visible=true;

}

 

 

naciskam na mapę,naciskam i nic się nie dzieje. :frusty: :(

Odnośnik do komentarza
Udostępnij na innych stronach

Mam problem z visible.otóż chcę stworzyć minimapę i mam na razie do tego 2 obiekty:

-mapa

-zamknij ( po kliknięciu będzie zamykał minimapę)

 

W mapie mam taki kod:

CREATE

 

GML
if(global.map=1)

{

visible=true;

}

 

 

naciskam na mapę,naciskam i nic się nie dzieje. :frusty: :(

ma byc:

if(global.map==1)

Odnośnik do komentarza
Udostępnij na innych stronach

@up, wtedy raczej GM wywalałby błąd. Może to po prostu źle przepisana linijka kodu.

 

Jeżeli otwieramy i zamykamy mini mapę tym samym klawiszem, to problem może tkwić właśnie tutaj. Ściągnij plik, odpal przez F6=>Tools=>Show instances. Klikając Lewo powinien się utworzyć obiekt obiect1, jednak dalej jest obiekt0 (widać to w kolumnie object name). Przy okazji id zwiększa się o 2, co oznacza, że faktycznie tworzony jest obiekt0, ale zaraz wykonywany jest event Left Pressed. Prowadzi to do zniszczenia obiekt0 i utworzenia obiektu obiect1.

 

Teraz dodaj do eventu Left Pressed (w obu obiektach) klocek "if" i wpisz moze (to nazwa zmiennej). Teraz wszystko działa poprawnie (możesz to sprawdzić, F6=>Tools=>Show instances).

 

Wniosek jest bardzo prosty. Jeżeli dwa obiekty tworzą się nawzajem po przez naciśnięcie tego samego klawisza, należy w jakiś sposób (na przykład tak jak z poniższego pliku) spowodować, aby akcja naciskania klawisza nie była od razu dostępna, tylko po jakimś czasie.

 

Plik:https://gmclan.org/up4155_12_problem.html

 

Klocki można w łatwy sposób przerobić na kod.

 

Oczywiście mogę się mylić i błąd może tkwić gdzie indziej.

Odnośnik do komentarza
Udostępnij na innych stronach

Dodaje jeszcze jedno pytanie:

Jak stworzyć dobrą minimapę na ogromną mapę.

 

Tylu rzeczy nie wiesz, ale widzę, że doskonale wiesz jak sobie zrobić bana. Blokada na 3 dni za tripleposta i na jeszcze 1 dodatkowy za złą nazwę tematu. Staramy się nadawać takie nazwy by od razu było wiadomo w czym problem, a dla 2 całkowicie oddzielnych problemów zakładać oddzielne tematy. Zwłaszcza gdy problemy są tak bardzo rozbudowane jak twoje.

Platyna

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