Skocz do zawartości

Draw, nachodzenie na siebie klatek.


Rekomendowane odpowiedzi

Ostatnio regularnie tutaj piszę :D Kolejny problem na jaki natrafiłem, to draw w postaci gracza, mianowicie, posiada on różne sprite, zależne od wykonywanej akcji(strzał, celowanie), problem polega na tym (dopiero teraz go wychwyciłem), że "sprite_strzał"(po prostu animacja wystrzału,kiedy zmienna "shoot" jest true) zlewa się ze "sprite_bron"(animacja celowania), po prostu nachodzą na siebie, a jak wiadomo wygląda to raczej mało estetyczne.

 

Oto fragment kodu "DRAW" odpowiedzialny za owe akcje:

 

GML
draw_sprite_ext(sprite_bron[bron],image_index,x-4,y+4,image_xscale, image_yscale,direction ,c_black,0.5)

if ( shoot == true )

{

if ( ammo_wmagazynku[ bron[ active ]] > 0 or ammo_zapasowe[ bron[ active ]] > 0 and shoot=false )

draw_sprite_ext( sprite_bron[ bron ],image_index,x,y,image_xscale, image_yscale, direction , image_blend,image_alpha)

 

else

draw_sprite_ext( sprite_strzal[ bron ],image_index,x,y,image_xscale, image_yscale,direction , image_blend,image_alpha)

}

else

draw_sprite_ext( sprite_bron[ bron ],image_index,x,y,image_xscale, image_yscale,direction , image_blend,image_alpha)

}

 

Gdzie jest błąd?

Odnośnik do komentarza
Udostępnij na innych stronach

b__d_xd.jpg

 

1.Sprite przy strzelaniu, czyli akcja. (sprite_strzal)

2.sprite, przy celowaniu, czyli inne zdarzenie.(sprite_bron)

Każdy z tych spritów powinien być pokazywany osobno, w zależności od akcji

 

Jednak kiedy już oddaję strzał, powinien być widoczny tylko "Sprite_strzal", ale widoczne są oba na raz, tak jak na rycinie nr 3.

 

Mam nadzieję że załapałeś :D

Odnośnik do komentarza
Udostępnij na innych stronach

No to banał.

Nie ważne co się dzieje to pierwsza linijka czyli sprite_bron[bron] zawsze jest rysowana. Potem w zależności od warunków może być rysowana sprite_bron[bron] albo sprite_strzal[ bron ].

 

Wywal pierwszą linijkę.

Odnośnik do komentarza
Udostępnij na innych stronach

to jeszcze nie rozwiązanie problemu, ale tu jest totalny błąd, tj. ten warunek:

GML
if ( ammo_wmagazynku[ bron[ active ]] > 0 or ammo_zapasowe[ bron[ active ]] > 0 and shoot=false )

można skrócić do:

GML
if ( ammo_wmagazynku[ bron[ active ]] > 0)

teraz pytanie-zagadka: dlaczego? :>

 

EDIT: chwiiilaaaa! :o

dlaczego Ty tam przypisujesz false do shoot, miast porównać go z false? O.o

Odnośnik do komentarza
Udostępnij na innych stronach

EDIT: chwiiilaaaa! :o

dlaczego Ty tam przypisujesz false do shoot, miast porównać go z false? O.o

 

Jeżeli nie pamięasz już podstawowych założeń game makera może czas już nie postować. Dla GM'a a=b jest a==b jeżeli jest dokonane w trakcie testu, a więc if shoot=false jest interpretowane jako if (shoot==false).

 

Spróbuj tego:

 

GML
if (shoot)

{

if ( (ammo_wmagazynku[ bron[ active ]] > 0 or ammo_zapasowe[ bron[ active ]] > 0) and shoot==false )

draw_sprite_ext( sprite_bron[ bron ],image_index,x,y,image_xscale, image_yscale, direction , image_blend,image_alpha)

 

else

draw_sprite_ext( sprite_strzal[ bron ],image_index,x,y,image_xscale, image_yscale,direction , image_blend,image_alpha)

}

else

draw_sprite_ext( sprite_bron[ bron ],image_index,x,y,image_xscale, image_yscale,direction , image_blend,image_alpha)

}

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
GML
shoot=false )

EDIT: chwiiilaaaa! :o

dlaczego Ty tam przypisujesz false do shoot, miast porównać go z false? O.o

 

:psichix: :psichix: :psichix: :psichix: :psichix: :psichix: :psichix: :psichix: :D Przypisywanie w ifie w GM, hahahaha! Marzenie.

 

Odnośnik do komentarza
Udostępnij na innych stronach

Przykro mi, ale ciągle to samo, może podrzucę Wam cały kod z DRAW, może tam jeszcze jest gdzieś jakiś babol:

 

GML
if trzyma=false {

 

if (shoot)

{

if ( (ammo_wmagazynku[ bron[ active ]] > 0 or ammo_zapasowe[ bron[ active ]] > 0) and shoot==false )

draw_sprite_ext( sprite_bron[ bron ],image_index,x,y,image_xscale, image_yscale, direction , image_blend,image_alpha)

 

else

draw_sprite_ext( sprite_strzal[ bron ],image_index,x,y,image_xscale, image_yscale,direction , image_blend,image_alpha)

}

else

draw_sprite_ext( sprite_bron[ bron ],image_index,x,y,image_xscale, image_yscale,direction , image_blend,image_alpha)

}

draw_set_font( font0 ); draw_set_color( c_white ); draw_set_halign( fa_center )

xx = view_xview[ 0 ] + view_wport[ 0 ] - 107 // pozycja panelu

yy = view_yview[ 0 ] + view_yport[ 0 ] +1

 

 

if ( bron != nic ) //jezeli aktualna bron != nic

{

draw_text( xx - 15 , yy + 45 , weapon_name[ bron ] ) // rysuje napis z nazwą broni

draw_text( xx + 15 , yy + 65 , string( ammo_wmagazynku[ bron ] ) + '/' + string( ammo_zapasowe[ bron ] )) // rysuje ilość ammo

}

 

 

if ( shoot == false and trzyma=true and celowanie=0 )

{

if ( shoot=false )

draw_sprite_ext(sprite_trzyma[bron],image_index,x-4,y+4,image_xscale, image_yscale,direction ,c_black,0.3)

draw_sprite_ext( sprite_trzyma[ bron ],image_index,x,y,image_xscale, image_yscale, direction , image_blend,image_alpha)

 

}

else {

draw_sprite_ext(sprite_bron[bron],image_index,x-4,y+4,image_xscale, image_yscale,direction ,c_black,0.5)

draw_sprite_ext( sprite_bron[ bron ],image_index,x,y,image_xscale, image_yscale,direction , image_blend,image_alpha)

}

 

draw_healthbar(view_xview+32,view_yview+16,view_xview+150,view_yview+20,stamina,c_white,c_red,c_aqua,0,1,1);

draw_healthbar(view_xview+32,view_yview+23,view_xview+150,view_yview+30,zdrowie,c_white,c_red,c_lime,0,1,1);

Odnośnik do komentarza
Udostępnij na innych stronach

A spróuj tak:

GML
if trzyma=false {

 

if (shoot)

{

if ( (ammo_wmagazynku[ bron[ active ]] > 0 or ammo_zapasowe[ bron[ active ]] > 0) and shoot==false )

draw_sprite_ext( sprite_bron[ bron ],image_index,x,y,image_xscale, image_yscale, direction , image_blend,image_alpha)

 

else

draw_sprite_ext( sprite_strzal[ bron ],image_index,x,y,image_xscale, image_yscale,direction , image_blend,image_alpha)

}

else

draw_sprite_ext( sprite_bron[ bron ],image_index,x,y,image_xscale, image_yscale,direction , image_blend,image_alpha)

}

draw_set_font( font0 ); draw_set_color( c_white ); draw_set_halign( fa_center )

xx = view_xview[ 0 ] + view_wport[ 0 ] - 107 // pozycja panelu

yy = view_yview[ 0 ] + view_yport[ 0 ] +1

 

 

if ( bron != nic ) //jezeli aktualna bron != nic

{

draw_text( xx - 15 , yy + 45 , weapon_name[ bron ] ) // rysuje napis z nazwą broni

draw_text( xx + 15 , yy + 65 , string( ammo_wmagazynku[ bron ] ) + '/' + string( ammo_zapasowe[ bron ] )) // rysuje ilość ammo

}

 

 

if ( shoot == false and trzyma=true and celowanie=0 )

{

if ( shoot=false ){

draw_sprite_ext(sprite_trzyma[bron],image_index,x-4,y+4,image_xscale, image_yscale,direction ,c_black,0.3)

draw_sprite_ext( sprite_trzyma[ bron ],image_index,x,y,image_xscale, image_yscale, direction , image_blend,image_alpha)

}

}

else {

draw_sprite_ext(sprite_bron[bron],image_index,x-4,y+4,image_xscale, image_yscale,direction ,c_black,0.5)

draw_sprite_ext( sprite_bron[ bron ],image_index,x,y,image_xscale, image_yscale,direction , image_blend,image_alpha)

}

 

draw_healthbar(view_xview+32,view_yview+16,view_xview+150,view_yview+20,stamina,c_white,c_red,c_aqua,0,1,1);

draw_healthbar(view_xview+32,view_yview+23,view_xview+150,view_yview+30,zdrowie,c_white,c_red,c_lime,0,1,1);

Odnośnik do komentarza
Udostępnij na innych stronach

cholera, GMS mial byc lepszy, mieli poprawic jezyk, a podstatowy mindfuck pozostawili xD

Odnośnik do komentarza
Udostępnij na innych stronach

A spróuj tak:

GML
if trzyma=false {

 

if (shoot)

{

if ( (ammo_wmagazynku[ bron[ active ]] > 0 or ammo_zapasowe[ bron[ active ]] > 0) and shoot==false )

draw_sprite_ext( sprite_bron[ bron ],image_index,x,y,image_xscale, image_yscale, direction , image_blend,image_alpha)

 

else

draw_sprite_ext( sprite_strzal[ bron ],image_index,x,y,image_xscale, image_yscale,direction , image_blend,image_alpha)

}

else

draw_sprite_ext( sprite_bron[ bron ],image_index,x,y,image_xscale, image_yscale,direction , image_blend,image_alpha)

}

draw_set_font( font0 ); draw_set_color( c_white ); draw_set_halign( fa_center )

xx = view_xview[ 0 ] + view_wport[ 0 ] - 107 // pozycja panelu

yy = view_yview[ 0 ] + view_yport[ 0 ] +1

 

 

if ( bron != nic ) //jezeli aktualna bron != nic

{

draw_text( xx - 15 , yy + 45 , weapon_name[ bron ] ) // rysuje napis z nazwą broni

draw_text( xx + 15 , yy + 65 , string( ammo_wmagazynku[ bron ] ) + '/' + string( ammo_zapasowe[ bron ] )) // rysuje ilość ammo

}

 

 

if ( shoot == false and trzyma=true and celowanie=0 )

{

if ( shoot=false ){

draw_sprite_ext(sprite_trzyma[bron],image_index,x-4,y+4,image_xscale, image_yscale,direction ,c_black,0.3)

draw_sprite_ext( sprite_trzyma[ bron ],image_index,x,y,image_xscale, image_yscale, direction , image_blend,image_alpha)

}

}

else {

draw_sprite_ext(sprite_bron[bron],image_index,x-4,y+4,image_xscale, image_yscale,direction ,c_black,0.5)

draw_sprite_ext( sprite_bron[ bron ],image_index,x,y,image_xscale, image_yscale,direction , image_blend,image_alpha)

}

 

draw_healthbar(view_xview+32,view_yview+16,view_xview+150,view_yview+20,stamina,c_white,c_red,c_aqua,0,1,1);

draw_healthbar(view_xview+32,view_yview+23,view_xview+150,view_yview+30,zdrowie,c_white,c_red,c_lime,0,1,1);

 

 

Cholera, dalej się ze sobą zlewają.

 

@EDIT - Czy mogą mieć na to wpływ inne zdarzenia (stepy, itp) ?

Odnośnik do komentarza
Udostępnij na innych stronach

Tylko w draw możesz rysować. Na pewno nie masz np. dwóch nakładających się na siebie instancji przypadkiem?

 

Zacznijmy szukać błędu kod po kroku, bo nic tutaj nie widzę: Sprawdź czy błąd występuje przy trzyma=true czy trzyma=false czy przy obu przypadkach.

Odnośnik do komentarza
Udostępnij na innych stronach

Tu może być też babol(po części sam tworzyłem część instancji) GLOB LEFT BUTTON

 

GML
if celowanie=2 and bieganie=false{

// strzelanie

_len = sprite_get_width( sprite_bron[ bron ] ) - sprite_get_xoffset( sprite_bron[ bron ] ) //odległosć w której zostanie stworzony pocisk

_x = lengthdir_x( _len , direction )

_y = lengthdir_y( _len , direction )

 

kat_rozrzutu = kat_rozrzutu[ bron ]

ilosc_pociskow_min = ilosc_pociskow_min[ bron ]

ilosc_pociskow_dodatkowych = ilosc_pociskow_dodatkowych[ bron ]

 

 

 

_x = lengthdir_x( _len , direction )

_y = lengthdir_y( _len , direction )

 

if ( ammo_wmagazynku[ bron ] > 0 and can and laduj )

{

repeat( ilosc_pociskow_min + irandom( ilosc_pociskow_dodatkowych ) )

{

i = instance_create( x+ _x, y + _y, pocisk_typ[ bron ] ) //tworzymy pocisk

i. direction = random_range( direction - kat_rozrzutu, direction + kat_rozrzutu ) // rozrzut

i. image_angle = direction

i. sprite_index = bullet_sprite[ bron ]

i. speed = bullet_speed[ bron ]

i. damage = weapon_damage[ bron ]

}

ammo_wmagazynku[ bron ] -= 1 // odejmujemy od stanu amunicja aktywnej broni 1

can = false

alarm[ 0 ] = weapon_time[ bron ]

if ( ammo_wmagazynku[ bron ] > 0){

 

instance_create( x,y, obj_luska[ bron ] )

 

 

 

 

 

 

sound_play ( weapon_sound[ bron ] )

}

 

if ( ammo_wmagazynku[ bron ] = 0)

{

sound_play( sound_last[ bron ] )

instance_create( x, y, o_ostatnia_luska[ bron ] )

}

 

 

 

shoot = true

alarm[ 2 ] = sprite_get_number( sprite_strzal[ bron ]) *(strzal_czas[bron])

image_index = 0

}

 

 

}

if celowanie=2 {

alarm [ 3 ] = sprite_get_number(sprite_trzyma[ bron ]) *150

trzyma=false}

 

if celowanie=1 {

alarm [ 3 ] = sprite_get_number(sprite_trzyma[ bron ]) *150

trzyma=false}

 

 

if celowanie=0{

celowanie = 1

}

bieganie=false

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