Skocz do zawartości

zdobywanie nowej broni


dyzmek

Rekomendowane odpowiedzi

witam otoz zabralem sie za twrzenie pozadnej gry a nie takiego ,,SYFU'' jak do tej pory byl w moim wykonaniu i otoz aby stworzyc gre musze wiedziec jak zorbic zdobywanie nowej broni np gracz zaczyna z pistoletem potem zdobywa karabin i juz ma dwie bronie karabin i pistolet itd wiem ze jest w przykladach przyklad ale jest on zbyt dl amnie trudny i taki jak by dla bardizje zaawansowanych a mnie sie rozchodzi o prosty w miare prosze o pomoc.

Odnośnik do komentarza
Udostępnij na innych stronach

Jak zdobędziesz broń to w kolizji dajesz:

GML
bron=1;

instance_destroy();

 

Proste. ;)

 

Jak ma być amunicja:

GML
bron=1;

amunicja=50;

instance_destroy();

 

Potem robisz zmienianie broni i już. :)

 

EDIT:

Tffuuuu...

GML
bron=1;

amunicja+=50;

instance_destroy();

Odnośnik do komentarza
Udostępnij na innych stronach

wlasnie ten silnik ktory dales link juz mam i on jest dla mnie trudny duzo kodu i wogule a ja na tyle nie jestem umiejetny :-( ale dzieki dalej nie rozumiem a mi chodzi o prosty przyklad

Człowieku, skoro ty takich prostych rzeczy nie kminisz, to może odpuść se na razie robienie "pozadnej" gry. I Poducz się jeszcze troche GML

Odnośnik do komentarza
Udostępnij na innych stronach

ale jak zrobic ze np ak 47 ma swoje naboje snajperka drabunov ma swoja amunicjae i ze bedzie wedzialo sprawdzalo jaka mam bron i strzelac taka amunicja jaka mam bron.hmm nie wiem jak to opisac ale pewnie domsylacie sie o co mi chodzi.

Odnośnik do komentarza
Udostępnij na innych stronach

moze stworzyl by ktos dla mnie naj prostszy jak sie da przyklad ze sa dwie bronie i ze jak zdobedziemy jedna to ja mamy pod klawiszem nr 1 a droga pod 2 i jak strzelimy pistoletem leci pocisk pistolet a karbainem to normalna serja kazdy wie o co mi chodzi prosz eo pomoc.

Odnośnik do komentarza
Udostępnij na innych stronach

https://gmclan.org/index.php?wiki=article&zm=7

https://gmclan.org/index.php?wiki=article&zm=13

 

Jesli sobie nie umiesz poradzic ze stworzeniem 2 zmiennych, to co Ty tu jeszcze robisz?

Rusz glowa. Po co Ci przyklad skoro nie bedziesz nawet umial dolozyc 3 broni.

Odnośnik do komentarza
Udostępnij na innych stronach

ja wlasnie ucze sie z przykladow bardzo dobrze ale tamte sa trudne jak by dla bardziej zaawansowanych a mnie chodzi o naj latwieszjy jakis w stworzeniu dla poczatkujacych.

 

Najpierw poczytaj o tablicach w helpie. Później stwórz tablice dwuwymiarową gdzie będziesz miał informacje o parametrach broni. Przykład wycięty żywcem z mojej produkcji:

 

Tablica broni:

GML
i:=0;

global.obiekt[i,0]:=4;//"Wielkosc siatki X (ilosc kolumn x 32)";

global.obiekt[i,1]:=2;//"Wielkosc siatki Y (ilosc wierszy x32)";

global.obiekt[i,2]:=bron_spr;

global.obiekt[i,3]:=0;//Animowany (-1), lub IMAGE_INDEX sprajta (dla sprajtow zawierajacych wiele obrazow roznych obiektow)";

global.obiekt[i,4]:=0;//"Typ obiektu (0-bron, 1-ammo, 2-granaty, 3-apteczki, 4-kamienie)";

global.obiekt[i,5]:="Mosin"; //N A Z W A

global.obiekt[i,6]:=1000;//"CENA - warto zachowac proporcje cen danych typow obiektow";

global.obiekt[i,7]:=4;//"Waga broni pustej bez magazynka (w kg)";

global.obiekt[i,8]:="7.62"; //Kaliber;

global.obiekt[i,9]:=5;//Pojemnosc max magazynka/bebenka (czyli rewolwer 7)

global.obiekt[i,10]:=130;//Zasieg w metrach (skuteczny);

global.obiekt[i,11]:=700;//Predkosc poczatkowa w m/s

global.obiekt[i,12]:="P";//Tryb strzelania: P-pojedynczy, S-Seria

global.obiekt[i,13]:=3;//Czas (w sek) przeladowywania pocisku pomiedzy kolejnym wystrzalem ((60/szybkostrzelnosc) - czas wymiany)

global.obiekt[i,14]:=6;//Czas (w sek) przeladowania calego magazynka/pestki(dla pestkowcow czas wymiany 1 pestki, dla magazynkowcow czas wymiany calego magazynka)

global.obiekt[i,15]:="M";// M/N czy bron zasilana Magazynkiem czy pojedynczymi Nabojami (pestkami),

global.obiekt[i,16]:="";//Y3-szybkostrzelnosc (ilosc wystrzalow na minute) - chyba niepotrzebne ewentualnie jako info

global.obiekt[i,17]:=1;//"Typ broni (0-bron kr. (pist., rewol.), 1-karabiny, 2-automaty)";

global.obiekt[i,18]:="";//wolne

global.obiekt[i,19]:="";//wolne

//i=1;(to inaczej ID tablicy)

i+=1; //WAZNE ZEBY TO TEZ KOPIOWAC! //WAZNE ZEBY PRZYPISYWAC ID BRONI DO ID POCISKOW

global.obiekt[i,0]:=2;//"Wielkosc siatki X (ilosc kolumn x 32)";

global.obiekt[i,1]:=2;//"Wielkosc siatki Y (ilosc wierszy x32)";

global.obiekt[i,2]:=bron_spr;

global.obiekt[i,3]:=1;//Animowany (-1), lub IMAGE_INDEX sprajta (dla sprajtow zawierajacych wiele obrazow roznych obiektow)";

global.obiekt[i,4]:=0;//"Typ obiektu (0-bron, 1-ammo, 2-granaty, 3-apteczki, 4-kamienie)";

global.obiekt[i,5]:="Glock 17"; //N A Z W A

global.obiekt[i,6]:=500;//"CENA - warto zachowac proporcje cen danych typow obiektow";

global.obiekt[i,7]:=0.625;//"Waga broni pustej bez magazynka (w kg)";

global.obiekt[i,8]:="9"; //Kaliber;

global.obiekt[i,9]:=17;//Pojemnosc max magazynka/bebenka (czyli rewolwer 7)

global.obiekt[i,10]:=50;//Zasieg w metrach (skuteczny);

global.obiekt[i,11]:=360;//Predkosc poczatkowa w m/s

global.obiekt[i,12]:="P";//Tryb strzelania: P-pojedynczy, S-Seria

global.obiekt[i,13]:=0.5;//Czas (w sek) przeladowywania pocisku pomiedzy kolejnym wystrzalem ((60/szybkostrzelnosc) - czas wymiany)

global.obiekt[i,14]:=4;//Czas (w sek) przeladowania calego magazynka/pestki(dla pestkowcow czas wymiany 1 pestki, dla magazynkowcow czas wymiany calego magazynka)

global.obiekt[i,15]:="M";// M/N czy bron zasilana Magazynkiem czy pojedynczymi Nabojami (pestkami),

global.obiekt[i,16]:="";//Y3-szybkostrzelnosc (ilosc wystrzalow na minute) - chyba niepotrzebne ewentualnie jako info

global.obiekt[i,17]:=0;//"Typ broni (0-bron kr. (pist., rewol.), 1-karabiny, 2-automaty)";

global.obiekt[i,18]:="";//wolne

global.obiekt[i,19]:="";//wolne

//i=2 (to inaczej ID tablicy)

i+=1; // WAZNE ZEBY TO TEZ KOPIOWAC! //WAZNE ZEBY PRZYPISYWAC ID BRONI DO ID POCISKOW</span>

 

 

 

Tablica amunicji:

GML
//**************** ponizej wklejamy tablice dla TYP 1 - AMMO **********

i:=0;

 

global.obiekt[i,0]:=1;//Dla ammo nie przewidujemy wiekszych niz 1x1

global.obiekt[i,1]:=1;//Dla ammo nie przewidujemy wiekszych niz 1x1

global.obiekt[i,2]:=ammo_spr;//nazwa sprajta - kazdy obiekt docelowo animowany (wszystkie?) ma miec wlasnego sprajta";

global.obiekt[i,3]:=1;//"Animowany (-1), lub IMAGE_INDEX sprajta (dla sprajtow zawierajacych wiele obrazow roznych obiektow)";

global.obiekt[i,4]:=1;//"Typ obiektu (0-bron, 1-ammo, 2-granaty, 3-apteczki, 4-kamienie)";

global.obiekt[i,5]:="7.62 Soft"; //Nazwa obiektu (np. Karabin Kałasznikow - AK47)";

global.obiekt[i,6]:=10;//"CENA - warto zachowac proporcje cen danych typow obiektow";

global.obiekt[i,7]:=0.0108; //"Waga calego naboju (w kg)- plecakowa (bo naboje posiadac beda jeszcze wage samego pocisku)";

global.obiekt[i,8]:="7.62"; //Kaliber

global.obiekt[i,9]:=0.0058; //Waga pocisku (do obrazen);

global.obiekt[i,10]:="S" //Twardosc S/H, Soft/Hard (Soft - duzy odrzut, nie przelatuja; Hard - brak odrzutu, przelatuja);

//i=global.il_broni+1;

i+=1;

 

global.obiekt[i,0]:=1;//Dla ammo nie przewidujemy wiekszych niz 1x1

global.obiekt[i,1]:=1;//Dla ammo nie przewidujemy wiekszych niz 1x1

global.obiekt[i,2]:=ammo_spr;//nazwa sprajta - kazdy obiekt docelowo animowany (wszystkie?) ma miec wlasnego sprajta";

global.obiekt[i,3]:=0;//"Animowany (-1), lub IMAGE_INDEX sprajta (dla sprajtow zawierajacych wiele obrazow roznych obiektow)";

global.obiekt[i,4]:=1;//"Typ obiektu (0-bron, 1-ammo, 2-granaty, 3-apteczki, 4-kamienie)";

global.obiekt[i,5]:="7.62 Hard"; //Nazwa obiektu (np. Karabin Kałasznikow - AK47)";

global.obiekt[i,6]:=10;//"CENA - warto zachowac proporcje cen danych typow obiektow";

global.obiekt[i,7]:=0.0105; //"Waga calego naboju (w kg)- plecakowa (bo naboje posiadac beda jeszcze wage samego pocisku)";

global.obiekt[i,8]:="7.62"; //Kaliber

global.obiekt[i,9]:=0.0055; //Waga pocisku (do obrazen);

global.obiekt[i,10]:="H" //Twardosc S/H, Soft/Hard (Soft - duzy odrzut, nie przelatuja; Hard - brak odrzutu, przelatuja);

//i=global.il_broni+2;

i+=1;

 

global.obiekt[i,0]:=1;//Dla ammo nie przewidujemy wiekszych niz 1x1

global.obiekt[i,1]:=1;//Dla ammo nie przewidujemy wiekszych niz 1x1

global.obiekt[i,2]:=ammo_spr;//nazwa sprajta - kazdy obiekt docelowo animowany (wszystkie?) ma miec wlasnego sprajta";

global.obiekt[i,3]:=3;//"Animowany (-1), lub IMAGE_INDEX sprajta (dla sprajtow zawierajacych wiele obrazow roznych obiektow)";

global.obiekt[i,4]:=1;//"Typ obiektu (0-bron, 1-ammo, 2-granaty, 3-apteczki, 4-kamienie)";

global.obiekt[i,5]:="9mm Soft"; //Nazwa obiektu (np. Karabin Kałasznikow - AK47)";

global.obiekt[i,6]:=10;//"CENA - warto zachowac proporcje cen danych typow obiektow";

global.obiekt[i,7]:=0.0125; //"Waga calego naboju (w kg)- plecakowa (bo naboje posiadac beda jeszcze wage samego pocisku)";

global.obiekt[i,8]:="9"; //Kaliber

global.obiekt[i,9]:=0.008; //Waga pocisku (do obrazen);

global.obiekt[i,10]:="S" //Twardosc S/H, Soft/Hard (Soft - duzy odrzut, nie przelatuja; Hard - brak odrzutu, przelatuja);

//i=global.il_broni+3;

i+=1;

 

 

Tablica łącząca bron z amunicją

GML
//************** TABELA AMMO vs BRON ************

//Po dodaniu broni lub ammo TRZEBA przypisac co do czego pasuje TAKZE DLA WSZYSTKICH JUZ wczesniej dopisanych

//Zerowanie przypisan

for (i=1; i<=global.il_ammo; i+=1;){

for (j=1; j<=global.il_broni; j+=1;){

global.ammo_bron[i,j]:=0;

}

}

//global.ammo_bron[X-ammo,Y-bron]:= 1-Pasuje, 0-nie pasuje// X-ID Ammo, Y-ID Broni

//global.ammo_bron[AMMO, BRON]:=0/1;

global.ammo_bron[global.il_broni+1,1]:=1; //(7.62 Soft)) przypisujemy bron nr 1 (Mosin)

global.ammo_bron[global.il_broni+2,1]:=1; //(7.62 Hard)) przypisujemy bron nr 1 (Mosin)

global.ammo_bron[global.il_broni+3,1]:=0; //9mm S NIE pasuje do MOSINA //TEGO NIE TRZEBA BO JUZ W PETLI WYZEROWANE

global.ammo_bron[global.il_broni+4,1]:=0; //9mm H NIE pasuje do MOSINA //TEGO NIE TRZEBA BO JUZ W PETLI WYZEROWANE

global.ammo_bron[global.il_broni+1,2]:=0; //(7.62 Soft nie pasi do Glocka //TEGO NIE TRZEBA BO JUZ W PETLI WYZEROWANE

global.ammo_bron[global.il_broni+2,2]:=0; //(7.62 Hard nie pasi do Glocka //TEGO NIE TRZEBA BO JUZ W PETLI WYZEROWANE

global.ammo_bron[global.il_broni+3,2]:=1; //9mm S pasuje do Glocka

global.ammo_bron[global.il_broni+4,2]:=1; //9mm H pasuje do Glocka

global.ammo_bron[global.il_broni+1,3]:=0; //(7.62 Soft nie pasi do UZI //TEGO NIE TRZEBA BO JUZ W PETLI WYZEROWANE

global.ammo_bron[global.il_broni+2,3]:=0; //(7.62 Hard nie pasi do UZI //TEGO NIE TRZEBA BO JUZ W PETLI WYZEROWANE

global.ammo_bron[global.il_broni+3,3]:=1; //9mm S pasuje do UZI

global.ammo_bron[global.il_broni+4,3]:=1; //9mm H pasuje do UZI</span>

 

 

To tylko wycinek mający Ci uzmysłowić jak mniej więcej można rozwiązać przechowywanie informacji o broni. Wiele z tych informacji jest zbędnych ale tak jak pisałem wyżej jest to przykład wyjęty żywcem z mojej produkcji.

Czyli w skrócie robisz jedna tablice dla rodzajów broni, drugą dla rodzajów amunicji i trzecią gdzie przypisujesz broń do amunicji. U mnie jest tak bo jest wiele typów amunicji dla jednego typu broni.

Odnośnik do komentarza
Udostępnij na innych stronach

Wkradł mi się mały błąd

 

Zapomniałem zmienić warunek

GML
if ( mouse_check_button( mb_left ) && ( aktywna_bron != -1 ) && zaladowane )

na

GML
if ( mouse_check_button( mb_left ) && zaladowane )

( aktywna_bron != -1 ) nic nie robi bo aktywna_broni zawsze jest rożne od -1 ( miałem to usunąć ale zapomniałem )

Odnośnik do komentarza
Udostępnij na innych stronach

ale w twoim przykladzie jest ze postac jest narysowana z apomoca drawu a jak nie wprowadze go to postac znika a jak jest to nie obrkera sie w kierunku myszy a ma sie obkrecac wokol wlasnej osi rozumiesz.

Nie byłem pewny czy masz wersję pro. Więc nie robiłem obrotu.

 

Zmień w postaci:

GML (draw)
// rysujemy gracza

draw_sprite( sprite_index, image_index, x, y );

na

GML (draw)
// rysujemy gracza

dir = point_direction( x, y, mouse_x, mouse_y );

draw_sprite_ext( sprite_index, image_index, x, y, 1, 1, dir, -1, 1 );

 

teraz dla optymalizacji można wywalić sprawdzanie konta pocisku podczas strzału bo i tak już będzie się sprawdzać co stepa.

Czyli zamienić var _dir, _inst; na var _inst; wywalić całkowicie linie niżej z point_direction i zmienić _inst.direction = _dir; na _inst.direction = dir;

Odnośnik do komentarza
Udostępnij na innych stronach

Czy ty tego naprawdę nie widzisz? Jest nawet stosowny komentarz w tym miejscu:

GML (gracz step)
// strzelanie -------------------------------------

// jezeli mamy wybrana jakas bron, wcisniemy LPM i bron jest zaladowana

if ( mouse_check_button( mb_left ) && zaladowane )

{

// sprawdzamy ktora bron jest aktywna

switch ( aktywna_bron )

{

case bron_pistolet:

 

var _inst;

 

_inst = instance_create( x, y, kula ); // tworzymy pocisk

_inst.direction = dir; // nadajemy mu kierunek lotu

_inst.speed = 10; // nadajemy mu predkosci

zaladowane = false; // nie mozna juz strzelac dopuki bron zostanie ponownie naladowana

alarm[0] = szybkosc_broni[ aktywna_bron ]; // odpalamy czas po ktorym bron bedzie mogla znowu strzelac

break;

 

case bron_karabin:

 

var _inst;

 

_inst = instance_create( x, y, kula );

_inst.direction = dir;

_inst.speed = 15;

zaladowane = false;

alarm[0] = szybkosc_broni[ aktywna_bron ];

break;

};

}

Odnośnik do komentarza
Udostępnij na innych stronach

tak tak dziala moje nie dopatrzenie przepraszam :-) a jak zrobic ostatnie pytanko jak zorbic ze jak mam bron 1 to jest sprite ze trzyma pistolet a jak wcisne sprite 2 to zmienia sie sprite gracza na to ze trzymam karabin z gory dzieki :-)

Odnośnik do komentarza
Udostępnij na innych stronach

Do create dodajesz kolejną tablicę, robisz tak za każdym razem jak chcesz dodać jakąś nową właściwość do broni np. rozrzut itp. teraz akurat będzie to informacja o tym jaki sprit dana broń ma mieć

GML (create)
// wprowadzamy sprity broni

sprit_broni[ bron_pistolet ] = sprite2;

sprit_broni[ bron_karabin ] = sprite1;

 

No i wystarczy dorobić rysowanie tej że broni w draw:

GML (draw)
// rysujemy bron

if ( aktywna_bron != 0 )

{

draw_sprite_ext( sprit_broni[ aktywna_bron ], 0, x, y, 1, 1, dir, -1, 1 );

}

To było by tak najprościej.

 

warunek if ( aktywna_bron != 0 ) jest tu dlatego że nie ma sprita dla "braku broni" no ale jak chcesz go dodać to nie ma problemu ( np. puste ręce bez broni ) to wtedy wywalasz ten warunek i dopisujesz nowy sprit sprit_broni[ 0 ] = sprite3;

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