Skocz do zawartości

problem ze zmiennymi


Prodayle

Rekomendowane odpowiedzi

o to kod na strzelanie, zarowno z pistoletu jak i pistoletu maszynowego

 

GML
if ammo >= 0 and global.dir = 1 and global.gun_switch = 1 and pistol_alarm = 1

{

new = instance_create(main_hero.x+32,main_hero.y,Strzaly)

new.direction = 0

new.hspeed = 30

ammo -=1

pistol_alarm = 0

}

 

if ammo >= 0 and global.dir = -1 and global.gun_switch = 1 and pistol_alarm = 1

{

new = instance_create(main_hero.x-32,main_hero.y,Strzaly)

new.direction = 180

new.hspeed = -30

new.image_xscale = -1

ammo -=1

pistol_alarm = 0

}

 

if ammo >= 0 and global.dir = -1 and global.gun_switch = 2 and pistol_alarm = 1

{

new = instance_create(main_hero.x-32,main_hero.y,Strzaly)

new.direction = 180

new.hspeed = -30

new.image_xscale = -1

alarm[0] = 50

}

 

if ammo >= 0 and global.dir = 1 and gun_switch = 2 and pistol_alarm = 1

{

new = instance_create(main_hero.x+32,main_hero.y,Strzaly)

new.direction = 0

new.hspeed = 30

ammo -=1

alarm[0] = 50

}

 

problem jest w tym, ze gdy odpalam gre i probuje strzelic z pistoletu lub pistoletu maszynowgo wyskakuje mi okno z bledem w ktorym napisane jest "unknown variable gun_switch" w dodatku pokazuje mi ze wcale nie napisalem

GML
global.gun_switch = 1 and global.nopistol = true
tylko
GML
gun_switch = 1 and nopistol = true

 

hmmm

naprawde bardzo ciekawe....

oczywiscie w create mam wszystko tak jak powinno byc, to co global jest globalem. a ten blad caly czas wystepuje

nie wiedzialem co jeszcze dodac wiec sluze informacjami

Odnośnik do komentarza
Udostępnij na innych stronach

uwiez mi ze jest to w create glownego bohatera.

kiedy zmieniam na pistolet i zaczynam strzelac wlasnie wyskakuje ten blad

 

 

i chyba wiem w czym problem

wszystko jest jak trzeba ale game maker ma swoj humor i pokazuje mi cos czego nie napisalem (bardziej cos co napisalem, ale niekompletne)

bo zmienne ustawilem na global, a wcale to sie chyba nie zatwierdza

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

W create używasz global, a w kodzie już nie.

 

if ammo >= 0 and global.dir = 1 and gun_switch = 2 and pistol_alarm = 1

 

Jak wyskakuje błąd, to pokazuje się w której linijce (a w GM8 jeszcze dodatkowo taki znaczek ^ pod tekstem pokazuje kolumnę gdzie ten błąd mniej więcej się zaczyna).

 

 

 

 

EDIT: ten kod aż prosi się o refactoring. Połowa warunków się powtarza. Nie można np. tak?

 

GML
if ammo > 0 {

new = instance_create(main_hero.x+32,main_hero.y,Strzaly)

// reszta kodu

}

Odnośnik do komentarza
Udostępnij na innych stronach

nie mozna, musi byc warunek, ammo, musi byc dir(czyli zmienna odpowiadajaca za kierunek zeby bylo wiadomo w ktora strone pocisk ma leciec) ,musi byc gun_switch = 1 lub 2 czyli bron zmieniona na pistolet lub pistolet maszynowy i musi byc pistol_alarm zeby mozna bylo oddac tylko 1 strzal za jednym przycisnieciem guzika (no dobra w przypadku pistoletu maszynowego mozna to usunac)

 

tak, pokazuje wlasnie na poczatek tego skryptu co podalem. i pokazuje zle bo gun_switch i pistol_alarm sa global zeby pistolet i pistolet maszynowy mogli z nich korzystac

Odnośnik do komentarza
Udostępnij na innych stronach

Chodziło o zamianę:

if ammo >= 0 and global.dir = 1 and global.gun_switch = 1 and pistol_alarm = 1
{
new = instance_create(main_hero.x+32,main_hero.y,Strzaly)
new.direction = 0
new.hspeed = 30
ammo -=1
pistol_alarm = 0
}

if ammo >= 0 and global.dir = -1 and global.gun_switch = 1 and pistol_alarm = 1
{
new = instance_create(main_hero.x-32,main_hero.y,Strzaly)
new.direction = 180
new.hspeed = -30
new.image_xscale = -1
ammo -=1
pistol_alarm = 0
}

if ammo >= 0 and global.dir = -1 and global.gun_switch = 2 and pistol_alarm = 1
{
new = instance_create(main_hero.x-32,main_hero.y,Strzaly)
new.direction = 180
new.hspeed = -30
new.image_xscale = -1
alarm[0] = 50
}

if ammo >= 0 and global.dir = 1 and gun_switch = 2 and pistol_alarm = 1
{
new = instance_create(main_hero.x+32,main_hero.y,Strzaly)
new.direction = 0
new.hspeed = 30
ammo -=1
alarm[0] = 50
}

Na:

GML
if ammo >= 0

{

if global.dir = 1 and global.gun_switch = 1 and pistol_alarm = 1

{

new = instance_create(main_hero.x+32,main_hero.y,Strzaly)

new.direction = 0

new.hspeed = 30

ammo -=1

pistol_alarm = 0

}

 

if global.dir = -1 and global.gun_switch = 1 and pistol_alarm = 1

{

new = instance_create(main_hero.x-32,main_hero.y,Strzaly)

new.direction = 180

new.hspeed = -30

new.image_xscale = -1

ammo -=1

pistol_alarm = 0

}

 

if global.dir = -1 and global.gun_switch = 2 and pistol_alarm = 1

{

new = instance_create(main_hero.x-32,main_hero.y,Strzaly)

new.direction = 180

new.hspeed = -30

new.image_xscale = -1

alarm[0] = 50

}

 

if global.dir = 1 and gun_switch = 2 and pistol_alarm = 1

{

new = instance_create(main_hero.x+32,main_hero.y,Strzaly)

new.direction = 0

new.hspeed = 30

ammo -=1

alarm[0] = 50

}

}

Właściwie to bez urazy, ale kod jest do d**y.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Na moje oko to masz dwa obiekty o tej samej nazwie, lub jakiś inny w którym przypadkiem wkleiłeś ten kod. Poszukaj dobrze.

 

Jak wyskoczy błąd to zobacz uważnie w jakim obiekcie i w jakim evencie, a potem dokładnie sprawdź linijkę którą podaje - na pewno wyświetlony w oknie błędu KOD tam będzie - nic nie bierze się z nieba :)

Odnośnik do komentarza
Udostępnij na innych stronach

if ammo >= 0 and global.dir = 1 and global.gun_switch = 1 and pistol_alarm = 1
{
new = instance_create(main_hero.x+32,main_hero.y,Strzaly)
new.direction = 0
new.hspeed = 30
ammo -=1
pistol_alarm = 0
}

if ammo >= 0 and global.dir = -1 and global.gun_switch = 1 and pistol_alarm = 1
{
new = instance_create(main_hero.x-32,main_hero.y,Strzaly)
new.direction = 180
new.hspeed = -30
new.image_xscale = -1
ammo -=1
pistol_alarm = 0
}

if ammo >= 0 and global.dir = -1 and global.gun_switch = 2 and pistol_alarm = 1
{
new = instance_create(main_hero.x-32,main_hero.y,Strzaly)
new.direction = 180
new.hspeed = -30
new.image_xscale = -1
alarm[0] = 50
}

if ammo >= 0 and global.dir = 1 and gun_switch = 2 and pistol_alarm = 1
{
new = instance_create(main_hero.x+32,main_hero.y,Strzaly)
new.direction = 0
new.hspeed = 30
ammo -=1
alarm[0] = 50
}

błąd: w ostatnim if'ie masz gun_switch = 2 zamiast global.gun_switch = 2

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

BTW. Refactoring się robi tak - 61% kodu mniej:

 

GML
if ammo >= 0 {

if (global.dir = -1 or global.dir = 1) and pistol_alarm = 1 {

new = instance_create(main_hero.x + 32*global.dir, main_hero.y, Strzaly);

new.hspeed = 30 * global.dir;

new.image_xscale = global.dir;

new.direction = 90 - 90 * global.dir

if global.gun_switch = 1 {

ammo -=1;

pistol_alarm = 0;

} else if global.gun_switch = 2 {

alarm[0] = 50;

}

}

}

 

@UP: już mu to napisałem...

Odnośnik do komentarza
Udostępnij na innych stronach

GML
if ammo >= 0 {

if (global.dir = -1 or global.dir = 1) and pistol_alarm = 1 {

new = instance_create(main_hero.x + 32*global.dir, main_hero.y, Strzaly);

new.hspeed = 30 * global.dir;

new.image_xscale = global.dir;

new.direction = 90 - 90 * global.dir

if global.gun_switch = 1 {

ammo -=1;

pistol_alarm = 0;

} else if global.gun_switch = 2 && alarm[0] = -1{

alarm[0] = 50;

}

}

}

A w Evencie Alarm 0 coś ala:

GML
new = instance_create(main_hero.x + 32*global.dir, main_hero.y, Strzaly);

new.hspeed = 30 * global.dir;

new.image_xscale = global.dir;

Odnośnik do komentarza
Udostępnij na innych stronach

To nie ma prawa działać. Jedynym skutkiem włączenia alarmu jest ponowne nastawienie go. Sądząc po budowie kodu uważam, że w obecnej postaci nie ma szans na poprawienie go tak, aby działał i jednocześnie był czytelny.

Odnośnik do komentarza
Udostępnij na innych stronach

Ja bym zrobił to tak:

Create:

GML
prz = 1 //czy przeladowany

pistol_kontrol = 1 //czy pistolet moze strzelic

bron = 1 //1 to pistolet, 2 to maszynówka

ammo = /liczba\

bron_prz = /liczba\ //minimalny odstep miedzy strzalami</span></span>

Strzelanie:

GML
if(ammo)&&(prz)&&((bron != 1)||(pistol_kontrol = 1))

{

new = instance_create(main_hero.x + 32*global.dir, main_hero.y, Strzaly);

new.hspeed = 30 * global.dir;

new.image_xscale = global.dir;

new.direction = 90 - 90 * global.dir

prz = 0

if(bron = 1) pistol_kontrol = 0

alarm[0] = bron_prz

}

Key Release (klawisz strzelania):

GML
pistol_kontrol = 1

Alarm 0:

GML
prz = 1

 

Nie jestem pewny, czy to zadziała, więc zrób najpierw kopię zapasową.

Odnośnik do komentarza
Udostępnij na innych stronach

a ja mam taki zajumisty kod na strzelanie bez obiektu pocisku w platformówce(o ile robisz platformówkę :D)

 

CREATE

GML
ms=true // moge strzelac

bron=1 // bron wybrana

//i tu zmienne od amunicji</span>

 

EVENT SPACJA:

GML
if ms{

if bron_mam=0{

for(i=1;i<=129;i+=1){

xx=x+image_xscale*(i*5)

if xx<view_xview or xx>view_xview+640 then break;

if collision_point(xx,yy,o_kosmit,0,0){

o=collision_point(xx,yy,o_kosmit,0,0)

o.hp-=1

if o.hp<=0

with(o){

instance_destroy()

}

break;

}

}

ms=false

alarm[0]=40

}else

if bron_mam=1 and global.bron[1,1]>0{

for(i=1;i<=129;i+=1){

xx=x+image_xscale*(i*5)

if xx<view_xview or xx>view_xview+640 then break;

if collision_point(xx,yy,o_kosmit,0,0){

o=collision_point(xx,yy,o_kosmit,0,0)

o.hp-=0.2

if o.hp<=0

with(o){

instance_destroy()

}

break;

}

}

ms=false

alarm[0]=4

global.bron[1,1]-=1

}

}

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