Skocz do zawartości

Zablokowane Problem z kluczami


Rekomendowane odpowiedzi

Mam taki problem:

Jak zrobić że są cztery rodzaje kluczy: kółko, kwadrat, krzyżyk i trójkąt. Są jeszcze drzwi o tych symbolach. Jak zrobić że mam np. klucz z krzyżykiem to mogę otworzyć drzwi o symbolu krzyżyk, i jak się je otworzy to klucz się traci. I tak z każdym symbolem. Drzwi po otworzeniu niszą się (destroy). Proszę o pomoc i fajne by było gdybyście dali przykładziki. :thumbsup:

Odnośnik do komentarza
Udostępnij na innych stronach

zrobić tablice "klucze"

 

GML
var i;

for( i=0;i<4;i+=1 )

{

global.klucze = 0;

}

//global.klucze[0] - czy mam kolko

//global.klucze[1] - czy mam kwadrat

//global.klucze[2] - czy mam krzyzyk

//global.klucze[3] - czy mam trojkat

 

Narazie wszystkie indeksy sa ustawione na 0, czyli nie masz tych kluczy. Jak zbierzesz np. krzyzyk to dajesz :

GML
global.klucze[2] = 1;

 

a podczas otwierania drzwi, sprawdzasz, czy masz ten klucz

GML
if global.klucze[2] == 1 // jesli masz klucz

{

global.klucze[2] = 0; // tracisz klucz

instance_destroy();

}

Odnośnik do komentarza
Udostępnij na innych stronach

możesz to zrobić tak:

GML
//create jakiegoś obiektu kontrolnego

global.kluczkwadrat=0;

global.kluczkolko=0;

global.klucztrojkat=0;

global.kluczkrzyzyk=0;

// kolizja z kluczem (żeby go złapać)

global.klucz/*tu dajesz nazwę danego klucza*/=1;

instance_destroy()

//kolizja z drzwiami np. krzyżykowymi

if (global.kluczkrzyzyk==1)

{

instance_destroy()

global.kluczkrzyzyk=0;

}

PS:pisane z pamięci.

Odnośnik do komentarza
Udostępnij na innych stronach

@UP: Ojeju czepiasz się! Tak też można. Zreszta kiedy to pisałem to nie było twojego posta i pisałem na szybko. A jesli już mu dałeś kod z pętlą for to ciekawe czy wie do czego to w ogóle jest? To może ja wytłumaczę:

Pętla for to pętla wyglądajaca trochę skomplikowanie, ale działająca jak każda inna. Składa sie z trzech argumentów oddzielonych (UWAGA:) średnikami! (nie przecinkami) Pierwszy to deklaracja zmiennej, drugi warunek, a trzeci to działanie wykonywane na ww. zmiennej. Działa to tak (pseudokod):

GML
// przykład:

for(i=0;i<5;i+=1)

{

tablica=5+i;

}

//najpierw deklarowana jest zmienna i o wartości zero

//sprawdza warunek

//wykonuje polecenie zawarte w klamrach, czyli dla tablicy o indeksie i przypisuje wartość 5 zwiększoną o i

//kończy iterację ("obieg") dodając do i 1

//sprawdza warunek ponownie

//i znowu wykonuje polecenie... chwilę później

//i wynosi już 5 i nie spełnia warunku pętla skończona

Dziekuję mam nadzieję, że teraz gdy będziesz korzystał z pętli for będziesz wiedział jak działa ;]

PS: a jeśli wiedziałeś to dobrze :P

Odnośnik do komentarza
Udostępnij na innych stronach

trzeba myslec przyszlosciowo o tym Adamentium xD
No więc własnie wytłumaczyłem mu co to 'for', bo większość nowych uzytkowników nie uzywa pętli nie mówiąc już o takim 'dziwactwie' jak for :D

Takie posty są jak najbardziej wskazane na forum, bo służy do dyskutowania.
Właśnie ;)
Odnośnik do komentarza
Udostępnij na innych stronach

Mam Game makera 7 zarejestrowanego i wyskakuje błąd w twoich ZeroXbot i Misiek999 .

EDIT: A ten twój przykład nie działa bo po zdobyciu klucza kółko drzwi nie znikają.

 

Pisałem że kluczy będzie więcej bo to będzie gra logiczna.

 

Nie pisz dwóch postów pod rząd, używaj przycisku "Edytuj"!

Maximal

Odnośnik do komentarza
Udostępnij na innych stronach

Mam Game makera 7 zarejestrowanego i wyskakuje błąd w twoich ZeroXbot i Misiek999 .

EDIT: A ten twój przykład nie działa bo po zdobyciu klucza kółko drzwi nie znikają.

 

Bierzesz kółko, podchodzisz do drzwi, NACISKASZ ENTER i co się dzieje... ?

 

Nawet nie raczyłeś zajrzeć do kodu tylko od razu uruchomiłeś jak gre :blink:

Odnośnik do komentarza
Udostępnij na innych stronach

1.Nie o to mi chodziło (automatycznie po dotknięciu drzwi znikają).

2.Jak będzie więcej kluczy to nie zadziała (gracz zbierze dwa takie same klucze i wszystkie drzwi tego typu się otworzą).

3.Chodzi mi o klucze z gry tego typu.

 

1. Wystarczy ze stepu gracza usunąć linijkę:

GML
&&(keyboard_check_pressed(vk_enter))

 

... i będzie się usuwało automatycznie :)

 

2. Lekkie modyfikacje, ale nie warto pisać ich tutaj - lepiej byłoby poprawić je na przykładzie :)

 

3. No problemo :P

Zauważ, że po kolizji z kluczem jest dodawany do zmiennej (+1) a po kolizji z drzwiami odejmowany (-1). W przykładzie który ja zrobiłem są dwa wypadki: klucz jest, albo go nie ma. Wróć do punktu 2 :P

Odnośnik do komentarza
Udostępnij na innych stronach

GML (Create)
global.Key[0] = 0; // Klucz "Kółko"

global.Key[1] = 0; // Klucz "Kwadrat"

global.Key[2] = 0; // Klucz "Krzyż"

global.Key[3] = 0; // Klucz "Trójkąt"

 

GML (Collision with objDrzwi0)
if( global.Key[0] > 0 )

{

global.Key[0] -=1;

with( other ) instance_destroy();

}

 

GML (Collision with objDrzwi1)
if( global.Key[1] > 0 )

{

global.Key[1] -=1;

with( other ) instance_destroy();

}

 

GML (Collision with objDrzwi2)
if( global.Key[2] > 0 )

{

global.Key[2] -=1;

with( other ) instance_destroy();

}

 

GML (Collision with objDrzwi3)
if( global.Key[3] > 0 )

{

global.Key[3] -=1;

with( other ) instance_destroy();

}

 

GML (Collision with objKlucz0)
global.Key[0] +=1;

with( other ) instance_destroy();

 

GML (Collision with objKlucz1)
global.Key[1] +=1;

with( other ) instance_destroy();

 

GML (Collision with objKlucz2)
global.Key[2] +=1;

with( other ) instance_destroy();

 

GML (Collision with objKlucz3)
global.Key[3] +=1;

with( other ) instance_destroy();

Odnośnik do komentarza
Udostępnij na innych stronach

Witam :) A więc musisz użyć kodu :

GML ( DRAW)
draw_sprite_ext( sprite_index,image_index,x,y,image_xscale, image_yscale,image_angle, image_blend,image_alpha);

//zeby rysowało sprita bohatera

//no i ilość kluczy :

draw_text(x,y,"Masz:"+string(global.Key[0])+"Kluczy kółko"+" "+string(global.Key[1]+"Kluczy kwadrat"+" "+string(global.Key[2]+"Kluczy krzyż"+" "+string(global.Key[3])+"Kluczy trójkąt")

te spacje to poto, żeby tekst się nie zlewał
Odnośnik do komentarza
Udostępnij na innych stronach

Pozwolę sobie użyczyć twojego kodu Mimek

GML ( DRAW)
draw_sprite_ext( sprite_index,image_index,x,y,image_xscale, image_yscale,image_angle, image_blend,image_alpha);

//zeby rysowało sprita bohatera

//no i ilość kluczy :

draw_text(x,y,'Masz:'+string(global.Key[0])+'Kluczy kółko'+' '+string(global.Key[1]+'Kluczy kwadrat'+' '+string(global.Key[2])+'Kluczy krzyż'+' '+string(global.Key[3])+'Kluczy trójkąt')

Nie powinny tu być apostrofy zamiast cudzysłowi?

PS: Sprawdź Adamentium, czy masz to w evencie DRAW

Odnośnik do komentarza
Udostępnij na innych stronach

Wyświetla mi się coś takiego

FATAL ERROR in

action number 1

of Draw Event

for object object4:

 

COMPILATION ERROR in code action

Error in code at line 4:

draw_text(x,y,'Masz:'+string(global.Key[0])+'Kluczy kółko'+' '+string(global.Key[1]+'Kluczy kwadrat'+' '+string(global.Key[2])+'Kluczy krzyż'+' '+string(global.Key[3])+'Kluczy trójkąt')

 

at position 205: Symbol , or ) expected.

 

Tu są te klucze możesz spróbować coś zrobić.

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