Skocz do zawartości

Bieganie i view


uzu13

Rekomendowane odpowiedzi

Witam. Tak jak w temacie, nie wychodzi bieganie. W sumie to mam bieganie ale z shiftem, a mi chodzi o takie ze jak wcisne D, puszcze i zaraz znow szybko wcisne bedzie biegl, jak nie wcisne 2 raz to po prostu idzie. Dzialalo mi to na nowym projekcie a jak przelorzylem do gry to nie dziala :) Prosil bym o nowy kodzik jak mozna. 2 sprawa dotyczy viewa, a mianowicie chodzi mi o taki efekt aby 2 obiekty byly caly czas w viewie a on sam sie pomniejszal i powiekszal ( aby te obiekty nie mogly wyjsc za krawedz ekranu ) czyli jak sa na krawedziach i dalej sie idzie po za nie, to view sie oddala.

Odnośnik do komentarza
Udostępnij na innych stronach

Co do pierwszego to zrób sobie jakąś zmienną stan.

I przyjmijmy, że jeśli stan=0 to znaczy, że postać stoi, jeśli 1 to idzie, a jak 2 to biegnie.

Przy puszczeniu klawisz ustawiamy stan na 0.

Przy naciśnięciu:

GML
if(stan==0) //jeśli stoi

{

stan=1; //zaczyna iść

alarm[0]=30; //i ustawiamy alarm

}

else if(stan==1 && alarm[0]>0) //jeśli idzie i nacisnęliśmy 2 raz przed końcem alarmu

{

stan=2; //zaczyna biec

}

 

A w step daj poruszanie się zależnie od zmiennej stan.

Tylko w alarmie musisz dać cokolwiek, chociażby pusty komentarz, żeby w ogóle się odliczał. Przynajmniej w GM6 tak było.

 

Co do viewa to nie chce mi się teraz, może później. :)

 

EDIT:

Ok, do drugiego. Po pierwsze wszystkim obiektom, które mają być widoczne w view tworzysz wspólnego parenta. Nazywjmy go na przykład obj_parent.

W End Step jakiegoś obiektu co ma jeden egzemplarz i służy do takich generalnych obliczeń jak właśnie to:

GML
var xmin;

var ymin;

var xmax;

var ymax;

xmin=view_xview[0];

ymin=view_yview[0];

xmax=view_xview[0]+view_wview[0];

ymax=view_yview[0]+view_hview[0];

 

with(obj_parent)

{

xmin=min(xmin,x);

ymin=min(ymin,y);

xmax=max(xmax,x);

ymax=max(ymax,y);

}

 

view_xview[0]=(xmin)/2;

view_yview[0]=(ymin)/2;

view_wview[0]=(xmax-xmin);

view_hview[0]=(ymax-ymin);

 

Spróbuj, może zadziała. Nie sprawdzałem, bo bym musiał na Windowsa się przełączać.

Odnośnik do komentarza
Udostępnij na innych stronach

Ach, fakt. Nie przewidziałem tego. Spróbuj tego:

GML
stosunek=view_wview[0]/view_hview[0];

var xmin;

var ymin;

var xmax;

var ymax;

xmin=view_xview[0];

ymin=view_yview[0];

xmax=view_xview[0]+view_wview[0];

ymax=view_yview[0]+view_hview[0];

 

with(obj_parent)

{

xmin=min(xmin,x);

ymin=min(ymin,y);

xmax=max(xmax,x);

ymax=max(ymax,y);

}

 

if((xmax-xmin)/(ymax-ymin) > stosunek)

{

view_xview[0]=(xmin)/2;

view_yview[0]=(ymin)/2;

view_wview[0]=(xmax-xmin);

view_hview[0]=view_wview[0]*(1/stosunek);

}

else

{

view_xview[0]=(xmin)/2;

view_yview[0]=(ymin)/2;

view_wview[0]=view_hview[0]*stosunek;

view_hview[0]=(ymax-ymin);

}

Odnośnik do komentarza
Udostępnij na innych stronach

View ma śledzić jakąś postać? Jeśli tak to zamień początkowy fragment mojego kodu na coś takiego:

 

GML
stosunek=view_wview[0]/view_hview[0];

var xmin;

var ymin;

var xmax;

var ymax;

xmin=postac.x-320;

ymin=postac.y-240;

xmax=postac.x+320;

ymax=postac.y+240;

Resztę kodu, pozostaw jak jak było. Tylko 4 linijki się zmieniły.

 

I nie śłuchaj kt1117. Bredzi, bo nie rozumie o czego oczekujesz. :)

Odnośnik do komentarza
Udostępnij na innych stronach

O O O już prawie! Efekt jest taki jaki być powinien, ale brakuje jeszcze czegoś takiego, jakby granic oddalenia- bo jak mam rooma 1000x1000 i wyjdę po za niego to mi pokazuje to co jest za nim, a chciałbym aby do granic rooma się oddalało dalej nie.

Odnośnik do komentarza
Udostępnij na innych stronach

Spróbuj tego:

 

GML
stosunek=view_wview[0]/view_hview[0];

 

var xmin;

var ymin;

var xmax;

var ymax;

xmin=max( 0 , min(hero1.x,hero2.x)-320 );

ymin=max( 0 , min(hero1.y,hero2.y)-240 );

xmax=min( room_width , max(hero1.x,hero2.x)+320 );

ymax=min( room_height , max(hero1.y,hero2.y)+240 );

 

if((xmax-xmin)/(ymax-ymin) > stosunek)

{

view_xview[0]=(xmin);

view_yview[0]=(ymin);

view_wview[0]=(xmax-xmin);

view_hview[0]=view_wview[0]*(1/stosunek);

}

else

{

view_xview[0]=(xmin);

view_yview[0]=(ymin);

view_wview[0]=view_hview[0]*stosunek;

view_hview[0]=(ymax-ymin);

}

Odnośnik do komentarza
Udostępnij na innych stronach

Po pierwsze to jeśli z PrintScreenem naciśniesz Alt to możesz zrobić screen samego aktywnego okna, bez pulpitu naokoło.

 

A wracając do tematu to musiałem się gdzieś pomylić, już spoglądam...

...no i już mam. Ale jestem głupi. Zamień miejscami 2 ostatnie instrukcje:

GML
(...)

view_hview[0]=(ymax-ymin);

view_wview[0]=view_hview[0]*stosunek;

}

Nie wiem czy powodowało twoje błędy, ale z całą pewnością ich odwrotne kolejność mogła powodować różne dziwolągi. Więc pewnie również te twoje problemy.

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