Skocz do zawartości

system zmiany broni-ale czegoś brakuje nie działa


Rekomendowane odpowiedzi

Otóż mam system zmiany broni..

Powiedzmy,że prawie działa.Już mówię w czym problem..

 

Gracz ma do dyspozycji kilka rodzai broni w tym przypadku jest ich 5.

jedna z nich jest broń którą ma przy sobie zawsze i jest nieograniczona..więc pozostałe cztery bronie są do zdobycia i mają ograniczoną ilość amunicji..

Żeby gracz otrzymał daną broń dodatkową musi ją sobie znaleźć na planszach..

Wtedy jak znajdzie,to ta broń automatycznie doda się do niego wraz z ilością amunicji jaka jest w kodzie przydzielona..

 

I teraz tak..problem polega na tym,że mimo,że gracz odnajduje broń dodatkową na planszy to i tak jej nie ma..

widzę tylko,że zmienia się w gui sprite na tą dodatkową broń,ale nadal nie może z niej strzelać..

Nie wiem gdzie jest błąd..czemu mimo implementacji w create broni dodatkowej i w kolizji gracza,gdzie wskazuje w obiekcie jaka broń ma mu się dodać to z tej broni nie można strzelac..

 

specjalnie zdublowałem ten sam kod na broń co podstawowa z różnica taką,że zmieniłem sprita,żeby się nie pomylić..

 

Tak jakby czegoś brakowało,że mimo zdobycia broni dodatkowej nie mogę z niej strzelać..

 

Proszę pomóżcie mi...może wam szybciej pójdzie wyłapanie błędu..

moje pomysły się wyczerpały..

 

edit..Gnysek przepraszam,że i do Ciebie na PM napisałem...pomyślałem,że jak rzadko tu zaglądasz to zapewne szybciej odczytasz wiadomość prywatną..

 

 

obj_player

create

 

have = true;
ammo = 10;
firerate = 15;
dmg_min = 3;
dmg_max = 5;

 

obj_player

step

 

////Bohater atakuje (nowy kod uproszczony)


czas--

var cur = obj_kontroler_gry.current_weapon; // obiekt kontrolny ma indeks aktualnej broni, więc musimy go najpierw pobrać

if keyboard_check_pressed(ord('X'))
&& czas <= 0
&& global.wep[cur,e_wep.ammo] > 0{
    czas = global.wep[cur,e_wep.firerate];
    global.wep[cur,e_wep.ammo]-=1;

    var ins = instance_create(x, y-17, obj_kula); //bron podstawowa
    ins.hspeed = image_xscale * 15;
    ins.dmg = irandom_range(global.wep[cur,e_wep.dmg_min],global.wep[cur,e_wep.dmg_max]);

    
}  

 

obj_skrzyniazbronia

tu kolizja z graczem(jak najedzie na skrzynie to dostaje tą broń i amunicje)

 

//bron laser
global.wep[1,e_wep.have] = true;
global.wep[1,e_wep.ammo] += 30;

obj_kontroler_gry

naciśnięcie przycisku S

 

for(var i=0;i<weapons_total;i++)
    if keyboard_check_pressed(ord("s")+i)
        if global.wep[i,e_wep.have]
            current_weapon = i;

 

 

 

Teraz tak tu obj_kontroler_gry perssistent który zawsze w grze towarzyszy..

 

obj_kontroler_gry

Create

 

enum e_wep { have,ammo,firerate,dmg_min,dmg_max }
enum e_gun   { kulki,laser,strzelba,miotacz,bazooka }




current_weapon = 0;
weapons_total = 5;



var i = 0;


//bron kulki
global.wep[0, e_wep.have] = false;
global.wep[0 ,e_wep.ammo] = 100; //nieograniczona w stepie jest kod na to
global.wep[0 ,e_wep.firerate] = 5;
global.wep[0 ,e_wep.dmg_min] = 3;
global.wep[0 ,e_wep.dmg_max] = 5;


//bron laser
global.wep[1, e_wep.have] = false;
global.wep[1 ,e_wep.ammo] = 30;
global.wep[1 ,e_wep.firerate] = 10;
global.wep[1 ,e_wep.dmg_min] = 3;
global.wep[1 ,e_wep.dmg_max] = 5;

//bron strzelba
global.wep[2, e_wep.have] = false;
global.wep[2 ,e_wep.ammo] = 20;
global.wep[2 ,e_wep.firerate] = 15;
global.wep[2 ,e_wep.dmg_min] = 3;
global.wep[2 ,e_wep.dmg_max] = 5;


//bron miotacz
global.wep[3, e_wep.have] = false;
global.wep[3 ,e_wep.ammo] = 10;
global.wep[3 ,e_wep.firerate] = 20;
global.wep[3 ,e_wep.dmg_min] = 3;
global.wep[3 ,e_wep.dmg_max] = 5;


//bron bazooka
global.wep[4, e_wep.have] = false;
global.wep[4 ,e_wep.ammo] = 5;
global.wep[4 ,e_wep.firerate] = 25;
global.wep[4 ,e_wep.dmg_min] = 3;
global.wep[4 ,e_wep.dmg_max] = 5;

 

 

 

obj_kontroler_gry

Draw GUI

 

 

var box_width = sprite_get_width(mask_explosion); //how wide is each box that will display a weapon?

for (var i = 0; i < weapons_total; i ++){
   draw_x = i * box_width;
   draw_y = 0; //rysowanie sprite od góry do lewej

   //jeśli posiadamy obraz każdej broni w tym samym duszku, możemy narysować je wszystkie za pomocą "i"
   if ( global.wep[i,e_wep.have] == true ) draw_sprite(spr_bron,  i, draw_x, draw_y);
}

tu dodałem jeszcze w dodatkowej broni w create taki wpis

 

obj_laser (broń ma taki sam kod co broń podstawowa różni się tylko spritem)

 

create

 

//bron nr 1 zaczynając indeskacje od 0 gdzie 0 to bron podstawowa kulki

gun = e_gun.laser;

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Kod jest ok, ale czy zdajesz sobie sprawę że

Dnia 7.08.2020 o 15:39, Pogromca_kodu77 napisał:

for(var i=0;i<weapons_total;i++) if keyboard_check_pressed(ord("s")+i) if global.wep[i,e_wep.have] current_weapon = i;

tj. ord("s") + i to nie jest kolejność jak na klawiaturze, tylko według tablicy znaków ascii: 

kulki - "s"

laser - "t"

strzelba - "u"

miotacz - "v"

bazooka - "w"

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...

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