Skocz do zawartości

"Ścieranie" sprita.


Gość Filip M

Rekomendowane odpowiedzi

Nie wiedziałem gdzie dokładnie dać ten temat bo jestem początkujący, ale "mój problem to złożone zagadnienie".

 

Po kolei:

 

Jest bohater i obiekt ściana. Obiekt ściana ma jakiś sprite. Chciałbym, żeby po naskoczeniu na obiekt ściana, ten "ścierał się" (coś takiego jak rysunek na tablicy ścierany gąbką). Dla tych co nie mają wyobraźni:

 

_cieranie.gif

 

Z tym, że to nie koniec. Chciałbym, żeby po naskoczeniu na ścianę np. z prawej to obiekt ściera się w przeciwną stronę. Jak naskoczę z góry - ściera się w dół.

 

Starałem się wyjaśnić najlepiej jak umiem ;-) Mam nadzieję, że zrozumiecie.

Odnośnik do komentarza
Udostępnij na innych stronach

rzeczywiście złożone zagadnienie.

na to ścieranie miałbym rozwiązanie nieco okrężne:

duplikujesz sprita postaci

tworzysz sprita takiego jak na twoim obrazku

dajesz zduplikowanej postaci overplay ze spritem ścierania

w obiekcie zmieniasz sprite_index przy kolizji ze ścianą.

Odnośnik do komentarza
Udostępnij na innych stronach

nie do końca rozumiem ale chodzi ci ze jest obrazek i ma się tak zmniejszać ?

 

: scier.gif

 

Jak tak to wiem jak musisz zrobić ...

 

Robisz skrypt o jakiej nazwie chcesz , dajesz tam to :

 

 

GML
var _pos, _colMerge;

if !argument5 {_pos = - ((argument2 / 100) * sprite_get_height(argument3)) + sprite_get_height(argument3);}

else {_pos = -((argument2 / 100) * sprite_get_width(argument3)) + sprite_get_width(argument3);}

_colMerge = c_white;

if argument4 {if argument2>=50 {_colMerge=merge_color(c_white, c_green, argument2/150);}

else {_colMerge=merge_color(c_red, c_white, argument2/75);} }

 

if !argument5 {

draw_sprite_part_ext(argument3, 0, 0, _pos,

sprite_get_width(argument3), sprite_get_height(argument3) - _pos, argument0, argument1 + _pos,

1, 1, _colMerge, draw_get_alpha()) }

else {

draw_sprite_part_ext(argument3, 0, 0, 0,

sprite_get_width(argument3) - _pos, sprite_get_height(argument3), argument0, argument1,

1, 1, _colMerge, draw_get_alpha()) }

 

 

potem w create obiektu :

zmienna = 100;

maxzmienna=100;

 

draw :

 

GML
skrypt(x,y,(zmienna/maxzmienna)*100,sprite_index,0,0);

A jeśli ma być przeźroczysty to daj jeszcze pod to

GML
draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,przezroczystosc od 0 do 1);

 

Trochę chyba pomieszalem ale powinno dzialać .

zmieniaj zmienną żeby zmieniał się wymiar sprita .

Jak będzie się źle "deformował" to ustaw origin sprita na 0 i sprawdź .

Odnośnik do komentarza
Udostępnij na innych stronach

Rozumiem ze tam gdzie zostanie zmazany ma byc przezroczysty. Musisz ustawić origin na 0, 0 ( choc, jakby bylo konieczne ustawienie na srodek, wtedy usun ze skryptu kolizji z graczem kod " + sprite_get_* / 2", nic nie powinno sie zepsuc ):

 

GML (create)
// Zmienne mowiace ile sprite jest zmazanego

spr_left = 0;

spr_width = sprite_get_width( sprite_index );

spr_top = 0;

spr_height = sprite_get_height( sprite_index );

 

// Predkosc zmazywania ( ilosc pikseli na stepa )

spd_scieranie = 1;

 

GML (kolizja z graczem)
// Zmienna okreslajaca kierunek bohatera od obiektu

var dir;

dir = point_direction( x + sprite_get_width( sprite_index ) / 2, y + sprite_get_height( sprite_index ) / 2, gracz., gracz.y )

 

// Zamienianie kierunku na numer boku sprite

if( dir >= 45 ) &&( dir <= 135 ) dir = 1;

else if( dir >= 135 ) &&( dir <= 225 ) dir = 2;

else if( dir >= 225 ) &&( dir <= 315 ) dir = 3;

else dir = 0;

 

// Mazanie sprite

switch( dir )

{

case 0: spr_width -= spd_scieranie; break;

case 1: spr_top += spd_scieranie; break;

case 2: spr_left += spd_scieranie; break;

case 3: spr_height -= spd_scieranie; break;

}

 

// Akcja po zmazaniu calego

if( spr_width - spr_left <= 0 )

or( spr_height - spr_top <= 0 )

{

//...

}

 

GML (draw)
// Rysowanie kawalka sprite

draw_sprite_part( sprite_index, 0, spr_left, spr_top, spr_width - spr_left, spr_height - spr_top, x + spr_left, y + spr_top );
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ę...