Skocz do zawartości

Wahadło z dwóch spritów


Rekomendowane odpowiedzi

Cześć wszystkim..

narysowałem sobie sprite wahadło,który składa się z dwóch sprotów

 

1.ostrze

2.łańcuch(mam też linkę i trzpień jako osobny sprite)

 

No i chciałbym,żeby poruszało się to w ruchu wahadłowym...jak to też połączyć sobą????

bo w jednym spricie to ja mam już kod,ale tam tak jest,że już łańcuch daje mi obrażenia,a nie tylko ostrze,co jest idiotyczne..

Znalazłem tu projekt podobny,ale tu jest ruch okrężny,a mi chodzi o ruch wahadłowy i jak te dwa elementy ze sobą połączyć..

 

ostrze jako obiekt ,który daje obrażenia

łańcuch trzpień linka jako sprite który nie daje obrażeń

 

 

tu ten kod na ruch okrężny..można byłoby go użyć wykorzystać na ruch wahadłowy

 

 

create

obj_ostrze

GML
anim=0;

aspd=1;

x2=x;

y2=y;

dis=100;

 

 

 

step

 

GML
x=x2+dis*cos(degtorad(anim));

y=y2+dis*sin(degtorad(anim));

anim+=aspd;

 

 

 

draw

 

 

GML
for(a=0;a<7;a+=1)

{

draw_sprite(sprLancuch,0,x2+lengthdir_x(a*15,-anim),y2+lengthdir_y(a*15,-anim));

}

 

draw_sprite_ext(sprite_index,image_index,round(x),round(y),image_xscale,image_yscale,image_angle,image_blend,image_alpha);

Odnośnik do komentarza
Udostępnij na innych stronach

Równania ruchu wahadłowego dla dowolnego kąta nie są proste, ale istnieje forma dla małych kątów, która jest wygodna i dobrze je przybliża.

W Create dodaj:

GML
tmp_t=0;

gamma=30; //maksymalny kat wychylenia wahadla</span>

W Step zmień

GML
anim+=1;

na

GML
tmp_t+=K; //im wieksze K, tym szybsze wahadlo

anim=gamma*dsin(tmp_t)-90;
Odnośnik do komentarza
Udostępnij na innych stronach

Równania ruchu wahadłowego dla dowolnego kąta nie są proste, ale istnieje forma dla małych kątów, która jest wygodna i dobrze je przybliża.

W Create dodaj:

GMLtmp_t=0;

gamma=30; //maksymalny kat wychylenia wahadla

W Step zmień

GMLanim+=1;

na

GMLtmp_t+=K; //im wieksze K, tym szybsze wahadlo

anim=gamma*dsin(tmp_t)-90;

 

Dzięki bardzo ładnie działa..

ustawiłem też inny kąt odchylenia i kierunek

 

Mam jeszcze jedno pytanie..bo to się ładnie sprawdza przy cząstkowym spricie czyli draw_sprite_ext jak łącze to łańcuchem..

a co jak np mam sprita line stalową długą i chcę to połączyć z wahadłem? wtedy nie używać draw_sprite_ext rozumiem tylko innej funkcji?

 

Załóżmy pomijam teraz łańcuch który składa się z jednego oczka a draw_sprite_ext samo narysuje mi kilka niżej oczek.

mam teraz stalową linę jako całość jeden sprite,i nie chce np żeby mi coś dorysowało dodatkowo,tylko lina połączyła się ta stalowa z ostrzem? jak to wykonać w draw?

 

 

tu niżej te draw sprawdza się np do łańcucha żeby połączyć z ostrzem,a jak to zrobić,że mam w całości sprite stalowa lina i chcę go z ostrzem połączyć? nie zmieniając wielkości tej stalowej liny?

 

GML
///Wyswietlany lancuch i ostrze

for(a=0;a<7;a+=1)

{

draw_sprite(spr_lancuch_od_ostrza,0,x2+lengthdir_x(a*15,-anim),y2+lengthdir_y(a*15,-anim));

}

 

draw_sprite_ext(sprite_index,image_index,round(x),round(y),image_xscale,image_yscale,image_angle,image_blend,image_alpha);

Odnośnik do komentarza
Udostępnij na innych stronach

GML
//draw_sprite_line

//argumenty:

//sprite index, image index

//x1,y1 - pozycja poczatku linii

//x2,y2 - pozycja konca linii

//wazne, aby sprite byl symetryczny, a origin sprite'a byl na jego srodku (ale tylko w osi Y, w osi X moze byc gdzie chce)

var x1,y1,x2,y2;

x1=argument2;

x2=argument4;

y1=argument3;

y2=argument5;

//tu byl kod

//i go nie ma

draw_sprite_ext(argument0,argument1,

x1+(x2-x1)*(sprite_get_xoffset(sprite1)/sprite_get_width(sprite1)),

y1+(y2-y1)*(sprite_get_xoffset(sprite1)/sprite_get_width(sprite1)),

point_distance(x1,y1,x2,y2)/sprite_get_width(sprite1),1,point_direction(x1,y1,x2,y2),c_white,1);

powinni mi za to zapłacić w złocie

Odnośnik do komentarza
Udostępnij na innych stronach

GML//draw_sprite_line

//argumenty:

//sprite index, image index

//x1,y1 - pozycja poczatku linii

//x2,y2 - pozycja konca linii

//wazne, aby sprite byl symetryczny, a origin sprite'a byl na jego srodku (ale tylko w osi Y, w osi X moze byc gdzie chce)

var x1,y1,x2,y2;

x1=argument2;

x2=argument4;

y1=argument3;

y2=argument5;

//tu byl kod

//i go nie ma

draw_sprite_ext(argument0,argument1,

x1+(x2-x1)*(sprite_get_xoffset(sprite1)/sprite_get_width(sprite1)),

y1+(y2-y1)*(sprite_get_xoffset(sprite1)/sprite_get_width(sprite1)),

point_distance(x1,y1,x2,y2)/sprite_get_width(sprite1),1,point_direction(x1,y1,x2,y2),c_white,1);

powinni mi za to zapłacić w złocie

 

 

 

Garniec złota plus dobra flaszka;) jesteś niemożliwy Amaterasu ;]

Orgin już linki stalowej ustawiłem odpowiednio w pozycji Y

no dobra...w draw daje tak:

 

 

GML
draw_sprite_ext(argument0,argument1,

x1+(x2-x1)*(sprite_get_xoffset(spr_linka)/sprite_get_width(spr_linka)),

y1+(y2-y1)*(sprite_get_xoffset(spr_linka)/sprite_get_width(spr_linka)),

point_distance(x1,y1,x2,y2)/sprite_get_width(spr_linka),1,point_direction(x1,y1,x2,y2),c_white,1);

 

 

 

w stepie

 

GML
var x1,y1,x2,y2;

x1=argument2;

x2=argument4;

y1=argument3;

y2=argument5;

 

 

w create rozumiem,że bez zmian zostaje... bo jest var więc nie muszę zmiennych żadnych definiować..

 

ale błąd mi wywala.. jak to poskładać teraz...

 

create

GML
tmp_t=0;

gamma=60; //Kat wychylenia wahadla ostrza

nim=0;

aspd=1;

x2=x;

y2=y;

dis=100;

 

 

step

 

 

GML
x=x2+dis*cos(degtorad(anim));

y=y2+dis*sin(degtorad(anim));

tmp_t+=8; //szybkosc wahadla

anim=gamma*dsin(tmp_t)-280;

 

 

draw

 

GML
///Wyswietlany lancuch i ostrze

for(a=0;a<7;a+=1)

{

draw_sprite(spr_lancuch_od_ostrza,0,x2+lengthdir_x(a*15,-anim),y2+lengthdir_y(a*15,-anim));

}

 

draw_sprite_ext(sprite_index,image_index,round(x),round(y),image_xscale,image_yscale,image_angle,image_blend,image_alpha);

Odnośnik do komentarza
Udostępnij na innych stronach

uhhh

Jeżeli w kodzie (np. tym podanym przeze mnie) masz coś w stylu argumentX (gdzie X to liczba od 0 do 15), to ten kod jest skryptem i wkładasz go do zakładki "Scripts". Nazwij ten skrypt tak, jak w pierwszej linijce komentarza.

Po prostu w Draw walnij

GML
draw_sprite_line(spr,subimg,x1,y1,x2,y2)

gdzie zamiast tych podanych nazw wstawiasz to, co chcesz, zgodnie z regułami , które zapisałem w komentarzu.

Traktuj podany przeze mnie kod jak zwykłą funkcję, tak jak draw_sprite_ext(), tylko z nieco innymi argumentami i z nieco innym działaniem.

Odnośnik do komentarza
Udostępnij na innych stronach

uhhh

Jeżeli w kodzie (np. tym podanym przeze mnie) masz coś w stylu argumentX (gdzie X to liczba od 0 do 15), to ten kod jest skryptem i wkładasz go do zakładki "Scripts". Nazwij ten skrypt tak, jak w pierwszej linijce komentarza.

Po prostu w Draw walnij

GML
draw_sprite_line(spr,subimg,x1,y1,x2,y2)

gdzie zamiast tych podanych nazw wstawiasz to, co chcesz, zgodnie z regułami , które zapisałem w komentarzu.

Traktuj podany przeze mnie kod jak zwykłą funkcję, tak jak draw_sprite_ext(), tylko z nieco innymi argumentami i z nieco innym działaniem.

 

 

Ok rozumiem;-)

 

A reszte jal bylo w kodzie w create,step zostawiam bez zmian tylko skrypt to od Ciebie wrzucam ok dzięki;-)

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