Skocz do zawartości

Dzialania na roznych spritach


David Dark

Rekomendowane odpowiedzi

Witam,

 

pracuje nad tym aby na moim bohaterze pojawiala sie bron i zbroja, aktualnie doszlem do tego aby wszystkie sprity ekwipunku rysowal poprostu obiekt bohatera zamiast tworzyc rozne obiekty podazajace jeden za drugim.

 

mam obiekt mojego bohatera a w nim w funkcji draw taki kod:

draw_sprite(sprite_index,image_index,x,y);

armour = draw_sprite(armourup,0,x,y)

 

oczywscie sprite w indexie wiadomo jak obracac, zmieniac sub image itd. natomiast chodzi mi o to jak wlasnie operowac tym drugim spritem wygenerowanym w zmiennej armour takimi funkcjami jak

image_speed

image_index

itd.

 

Wielkie dzieki za odpowiedz :-)

Odnośnik do komentarza
Udostępnij na innych stronach

I tu Mark Overmars popełnił błąd. Niemal wszystkie wbudowane zmienne lokalne są zbędne. Są funkcje typu draw_sprite_ext(), draw_set_alpha() i inne. Moim zdaniem brak owych zmiennych odciążyło by nieco GMa, a początkujący i, nawet ci "średni" nie nabieraliby złych nawyków.

Odnośnik do komentarza
Udostępnij na innych stronach

ok ale mam w stepie caly kod poruszania sie na switchach, i dlatego chcialem to tam wpisac wszystko zebym mial w jednym miejscu, chodzi mi o to zeby to bylo synchronizowane, bo obiekt bohatera jest caly ja tylko nakladam na niego sprity zbroji czy broni czy helmu. Chodzi o to ze jesli postac idzie w jakims kierunku to wszystkie sprity poruszaja(i obracaja) sie w tej samej odpowiedniej szybkosci.

sprite w indexie wykona animacje ale zbroja juz nie.

 

do tego potrzebuje image_speed(tak mi sie wydaje)

kod poruszania jest z przykladu pitera6 wyglada on tak:

 

case vk_up: if global.entered

{

yy -= global.grid;

global.entered = false;

sprite_index=spriteup;

image_speed=0.2;

}

 

jak ma zrobic zeby wszystkie sprity poruszaly sie rownoczesnie wtedy kiedy wykonuje ruch(chodzi o animacje)

Odnośnik do komentarza
Udostępnij na innych stronach

LOL a jednak działa :o

sprite0.image_speed=5     // xD

 

Edit:

Sory a jednak można drawom sprawdzać id ki :D

twoim sposobem:
dd=draw_sprite(...)
dd.image_speed=5

:thumbsup:

 

 

jeszcze jeden problem - nie dziala:

dd.sprite_index = sprite;

 

a jest mi to potrzebne np. przy zmianie kierunków. to dobrze napisany kod czy cos robie zle? 0.o

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Tylu błędnych wypowiedzi w jednym temacie już dawno nie widziałem. ;)

 

natomiast chodzi mi o to jak wlasnie operowac tym drugim spritem wygenerowanym w zmiennej armour takimi funkcjami jak

image_speed

image_index

itd.

Drawy nic nie generują, a już na pewno nie sprity. Coś Ci się pomyliło. Tak wynika i z moich testów i z dokumentacji. Gdy funkcja nie zwraca nic konkretnego, to wtedy zmienna przybiera wartość domyślną czyli 0. Zmienne sprite_index, image_index, image_speed to zmienne obiektu, a nie sprite'a. Jeżeli ręcznie rysujesz sprite'y, to sam musisz zadbać o obsługę wyświetlania kolejnych klatek animacji. Zrób tak jak napisał Marek.S w swoim pierwszym poście w tym temacie czyli utwórz nowe zmienne i manipuluj nimi ręcznie.

 

A po co w step jak step i draw to to samo tongue2.gif
To nie to samo. Odsyłam do dokumentacji.

 

Sory a jednak można drawom sprawdzać id ki biggrin.gif
Nie można. W tym przypadku zostanie przypisana wartość 0, co GM zinterpretuje jako indeks typu obiektu. W takim przypadku jeżeli obiekt "aaa" ma indeks 0 w game makerze, to zmieniasz image_speed wszystkim instancjom tego obiektu. Dokumentacja -> GML -> Addressing variables in other instances.
Odnośnik do komentarza
Udostępnij na innych stronach

No fakt :P

to może napisz co było by poprawnym rozwiązaniem.

juz mam np.

 

create

obrazek = sprite
animacja = 0;

step

obrazek = inny_sprite //jesli musze go zmienic

animacja = -2 //rozpoczyna animacje

draw

draw_sprite_ext(obrazek,animacja,x,y,1,1,0,image_blend,image_alpha)

 

i dziala jak nalezy.

 

Dzieki wszystkim za pomoc :thumbsup: Po 3 godzinach meczenia tego wkoncu sukces

czas na :sleep1:

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

@Yoda:

Ale na odwrót już nie i wtedy trzeba stosować surface'y.

 

@Marek.S:

 

Hmmm...

Create oraz przy każdej zmianie sprite'a zbroi:

armor_sprite_index = nazwa_sprita;
armor_sprite_number = sprite_get_number( armor_sprite_index );
armor_image_index = 0;
armor_image_speed = 0.5;

 

draw:

armor_image_index += armor_image_speed;
if ( armor_image_index > sprite_image_number ) armor_image_index = 0;

draw_sprite( armor_sprite_index, armor_image_index, x, y );

 

I dzięki temu mamy zasymulowane armor_sprite_index, armor_image_index, armor_image_speed.

Odnośnik do komentarza
Udostępnij na innych stronach

mam cos takiego:

 

switch (keyboard_key)

{

case vk_up:

if global.entered

{

yy -= global.grid;

global.entered = false;

sprite_index=spriteup;

image_speed=0.2;

armour = armourup

animation = -2;

 

}

image_speed zmienia szybkosc animacji, armour zmienia sprite zbroji na odpowiedni kierunek.

Odnośnik do komentarza
Udostępnij na innych stronach

image_speed=0.2;
ale przecież tak zmienisz speed do wszystkich rysowanych spritów ...

(według tego co pisze Ranma)

Nie można. W tym przypadku zostanie przypisana wartość 0, co GM zinterpretuje jako indeks typu obiektu. W takim przypadku jeżeli obiekt "aaa" ma indeks 0 w game makerze, to zmieniasz image_speed wszystkim instancjom tego obiektu. Dokumentacja -> GML -> Addressing variables in other instances.
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ę...