Skocz do zawartości

Animacja oraz kilka pytań


Rekomendowane odpowiedzi

Witam.

 

Problem główny:

Mam sprite, który jest animacją złożoną z 60 klatek. Chcę ją wywołać dzięki komendzie draw_[...]. Niestety gdy używam draw_sprite to pozostaje na subimg=1 i się nie rusza. Moje pytanie jest następujące. Jakiej komendy użyć aby narysować sprite wraz z animacją. Najmądrzejszym moim posunięciem [według mnie] było

GML
draw_sprite(sKabanLogo,1/60,self.x-230,self.y)

no ale koniec końców, nie zadziałało.

 

 

Pytania mnie nurtujące od dawna:

1.Czy używając komendy "instance_destroy()" w step, można zdefiniować obiekt, coś w deseń "instance_destroy(other)" ?

 

2.Czy istnieje komenda odpowiadająca bloczkowi "Mouse enter" i "Mouse leave"? Ponieważ za każdym razem kiedy chce użyć ją w step, musze zdefiniować własną zmienną "mouseenter = 1" i "mouseenter = 0"

 

3.Czy istnieje komenda, odwołująca się do myszki np. "Left pressed", która będzię działać dopiero gdy myszka jest na obiekcie, a nie globalnie? Gdy używam mb_left, bądź mouse_check_button_pressed to działa ona globalnie, nawet poza obiektem.

 

4.Czy istnieje komenda, odpowiadająca bloczkowi "Animation End", którą będę mógł wykorzystać w Step ?

 

Z góry dziękuje za poświęcony czas :)

Odnośnik do komentarza
Udostępnij na innych stronach

Główny:

W image_index wpisałeś 1/60 a nie jedną na 60 klatek.

Zrób se zmienną pomocniczą, która będzie sie cały czas zwiększać i daj ją tam, gdzie ma 1/60

 

1) Nie można. Możesz użyć takiego myku:

GML
with(other) instance_destroy();

 

3) Z tego co wiem to nie ma.

 

4) Nie.

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki. Po 30-40 minutowym wytężeniu mózgu osiągnąłem pożądany efekt. Zrobiłem tak ja radziłeś, czyli własna zmienna. Jeśli ktoś by miał też z tym kłopot, to prosze bardzo.

 

GML
if cooldown=0

{

anim360 += 1 // dodawanie po jednej klatce

cooldown=1 // szybkosc obracania

}

cooldown=max(0,cooldown-1) // Magiczna komenda Threefa, działa i tak ma byc

if anim360 = 60 { // Gdy osiagnie 60 klatke zacznij od nowa

anim360 = 0

}

 

if mouseenter = 0 { // wyzerowanie animacji

anim360 = 0

}

 

Jeszcze raz dzięki za pomoc :)

Odnośnik do komentarza
Udostępnij na innych stronach

3. DO tego służy event "Mouse>Left Pressed"(który działa tylko wewnątrz maski obiektu, w przeciwności do "Mouse>Global Mouse>Left Pressed")

 

Alternatywnie minimum matmy. Jezeli masz origin sprite'a na [0,0] to:

GML
if mouse_check_button_pressed(mb_left) && mouse_x >= x && mouse_x <= x+sprite_width

&& mouse_y >= y && mouse_y <= y+sprite_height

{

//blabla

}

 

Edit: Tutaj ten sam kod co wyzej ale w wersji uniwersalnej, bioraca poprawke na maske kolizji i origin. Poczatkowo nie chcialem tego pisac zeby nie wydawalo sie zbyt skomplikowane, ale what the hell..:

 

GML
if mouse_check_button_pressed(mb_left) && mouse_x >= x-sprite_get_xoffset(sprite_index)+sprite_get_bbox_left(sprite_index) && mouse_x <= x-sprite_get_xoffset(sprite_index)+sprite_get_bbox_right(sprite_index)

&& mouse_y >= y-sprite_get_yoffset(sprite_index)+sprite_get_bbox_top(sprite_index) && mouse_y <= y-sprite_get_yoffset(sprite_index)+sprite_get_bbox_bottom(sprite_index)

{

//blabla

}

 

Alternatywnie dla skrócenia kodu walnij to sprawdzenie do oddzielnej funkcji nazwanej np. scr_check_click

GML (scrcheckclick)
///scr_check_click()

return (mouse_x >= x-sprite_get_xoffset(sprite_index)+sprite_get_bbox_left(sprite_index) && mouse_x <= x-sprite_get_xoffset(sprite_index)+sprite_get_bbox_right(sprite_index)

&& mouse_y >= y-sprite_get_yoffset(sprite_index)+sprite_get_bbox_top(sprite_index) && mouse_y <= y-sprite_get_yoffset(sprite_index)+sprite_get_bbox_bottom(sprite_index));

 

Wtedy kazdy kod w kazdym obiekcie maleje do:

GML
if mouse_check_button_pressed(mb_left) && scr_check_click()

{

//Blablabla

}

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