Skocz do zawartości

do amunicji


Rekomendowane odpowiedzi

nie dawajcie warna mi za to ale to bardzo pilne. Mam male pytanko nie wiem jak zrobic ze gdy wcisne np. 4 i wystrzele 5 z 16 i klikne 2 i bede miec 34/5 wystrzelam 3 i znowu klikne 4 i zeby ilosc ammo sie nie odnowila tylko zostala taka jaka jest czyli pozostale 5/16. rozumiecie?

Odnośnik do komentarza
Udostępnij na innych stronach

Mam male pytanko nie wiem jak zrobic ze gdy wcisne np. 4 i wystrzele 5 z 16 i klikne 2 i bede miec 34/5 wystrzelam 3 i znowu klikne 4 i zeby ilosc ammo sie nie odnowila tylko zostala taka jaka jest czyli pozostale 5/16

hmmm nie deklaruj zmiennej na nowo? Zmienna globalna?

Odnośnik do komentarza
Udostępnij na innych stronach

W create objectu:

global.bron1=true
global.bron2=false
global.bron3=false
global.bron4=false

Jak nacisniesz 1

global.bron1=true
global.bron2=false
global.bron3=false
global.bron4=false

Jak nacisniesz 2

global.bron1=false
global.bron2=true
global.bron3=false
global.bron4=false

Jak nacisniesz 3

global.bron1=false
global.bron2=false
global.bron3=true
global.bron4=false

jak nacisniesz 4

global.bron1=false
global.bron2=false
global.bron3=false
global.bron4=true

O to chodzi???

Odnośnik do komentarza
Udostępnij na innych stronach

GML
if keyboard_check_pressed( vk_anykey ) { //Bądź taki sam event

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

if( keyboard_check_pressed( 48 + i ) ) {

global.bron = i;

break;

}

}

}

Efekt ten sam. :)

 

Później tylko prosta tablica:

GML
global.ammo[0,0] = 10; //Max

global.ammo[0,1] = 5; //Obecny stan

global.ammo[1,0] = 34; //Max

global.ammo[1,1] = 8; //Obecny stan

global.ammo[2,0] = 230; //Max

global.ammo[2,1] = 100; //Obecny stan

global.ammo[3,0] = 5; //Max

global.ammo[3,1] = 5; //Obecny stan

... itd.

I może jeszcze strzelanie:
GML
if( global.ammo[global.bron,1] > 0 ) { //Ma jeszcze amunicje w magazynku

//Kod wystrzalu

global.ammo[global.bron,1] -= 1;

}

else { //Juz nie ma

//Kod przeladowania

}

 

Można by jeszcze dodać kod uwzględniający czas przeładownia między strzałami, tak więc dopisujemy do tablicy:

GML
...

global.ammo[0,2] = 60; //Przeladowanie

...

global.ammo[1,2] = 40; //Przeladowanie

...

global.ammo[2,2] = 30; //Przeladowanie

...

global.ammo[3,2] = 10; //Przeladowanie

... itd.

i wtedy strzelanie wygląda tak:
GML
if( global.ammo[global.bron,1] > 0 ) { //Ma jeszcze amunicje w magazynku

if( alarm[0] == -1 ) {

//Kod wystrzalu

global.ammo[global.bron,1] -= 1;

alarm[0] = global.ammo[global.bron,2];

}

}

else { //Juz nie ma

//Kod przeladowania

}

no i pamiętajmy o alarmie:
GML
alarm[0] = -1;

 

Fajnie by było jeszcze dodać czas między przeładowaniami magazynków, tak więc znowu dopisujemy do tablicy:

GML
...

global.ammo[0,3] = 360; //Przeladowanie magazynku

...

global.ammo[1,3] = 420; //Przeladowanie magazynku

...

global.ammo[2,3] = 530; //Przeladowanie magazynku

...

global.ammo[3,3] = 120; //Przeladowanie magazynku

... itd.

i wtedy strzelanie zmieniamy tak:
GML
if( global.ammo[global.bron,1] > 0 ) { //Ma jeszcze amunicje w magazynku

if( alarm[0] == -1 ) {

//Kod wystrzalu

global.ammo[global.bron,1] -= 1;

alarm[0] = global.ammo[global.bron,2];

}

}

else { //Juz nie ma

if( alarm[1] == -1 ) {

alarm[1] = global.ammo[global.bron,3];

}

}

no i alarm:
GML
global.ammo[global.bron,1] = global.ammo[global.bron,0];

alarm[1] = -1;

 

Tylko, że teraz trzeba zablokować możliwość zmiany broni podczas przeładowania, więc trzeba do kodu zmiany broni dodać coś takiego:

GML
if( keyboard_check_pressed( vk_anykey ) && alarm[0] == -1 && alarm[1] == -1 ) {

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

if( keyboard_check_pressed( 48 + i ) ) {

global.bron = i;

break;

}

}

}

I powinno działać. :)

 

Jeśli nam przeszkadza coś takiego i chcemy zrobić przeładowanie dla każdej broni z osobna no to znowu rozbudujemy tablicę:

GML
...

global.ammo[0,4] = -1; //Alarm dla przeładowania

global.ammo[0,5] = -1; //Alarm dla przeładowania magazynku

...

global.ammo[1,4] = -1; //Alarm dla przeładowania

global.ammo[1,5] = -1; //Alarm dla przeładowania magazynku

...

global.ammo[2,4] = -1; //Alarm dla przeładowania

global.ammo[2,5] = -1; //Alarm dla przeładowania magazynku

...

global.ammo[3,4] = -1; //Alarm dla przeładowania

global.ammo[3,5] = -1; //Alarm dla przeładowania magazynku

... itd.

Wywalamy kod z alarm 0 i alarm 1, modyfikujemy strzelanie tak:
GML
if( global.ammo[global.bron,1] > 0 ) { //Ma jeszcze amunicje w magazynku

if( global.ammo[global.bron,4] == 0 && keyboard_check( vk_space ) ) {

//Kod wystrzalu

global.ammo[global.bron,1] -= 1;

global.ammo[global.bron,4] = global.ammo[global.bron,2];

}

else {

global.ammo[global.bron,4] -= 1;

}

}

else { //Juz nie ma

if( global.ammo[global.bron,5] == -1 ) {

global.ammo[global.bron,5] = global.ammo[global.bron,3];

}

else

if( global.ammo[global.bron,5] == 0 ) {

global.ammo[global.bron,1] = global.ammo[global.bron,0];

global.ammo[global.bron,5] = -1;

}

else {

global.ammo[global.bron,5] -= 1;

}

}

Zmianę broni przywracamy do stanu poprzedniego:
GML
if keyboard_check_pressed( vk_anykey ) { //Bądź taki sam event

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

if( keyboard_check_pressed( 48 + i ) ) {

global.bron = i;

break;

}

}

}

I ziu. :D

 

Możemy też sprawdzać czy gracz ma w plecaku daną broń, wtedy zrobimy sobie taką zmienną:

GML
global.bag = 0;
I teraz w zależności od numerka broni... albo lepiej, napiszmy scripta dodającego broń do plecaka:
GML
var v;

v = power( 2, argument[0] + 1 );

if( !( global.bag & v ) ) {

global.bag = global.bag | v;

}

Powiedzmy, że nazwiemy go bag_add, script usuwający będzie podobny:
GML
var v;

v = power( 2, argument[0] + 1 );

if( global.bag & v ) {

global.bag = global.bag | v;

}

Nazwiemy go bag_del. I teraz tylko ograniczamy zmienianie broni:
GML
if( keyboard_check_pressed( vk_anykey ) ) {

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

if( !( global.bag & power( 2, i + 1 ) ) ) {

continue;

}

 

if( keyboard_check_pressed( 48 + i ) ) {

global.bron = i;

break;

}

}

}

I cool. Broń dodajemy np.
GML
bag_add(0);
A tą samą broń wyrzucamy:
GML
bag_del(0);
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ę...