game maker
Gebruikersnaam:
Wachtwoord:
Home Info Forums Help
Welkom, Gast. Alsjeblieft inloggen of registreren.
De activerings e-mail gemist?
+  Forums
|-+  Werken met Game Maker
| |-+  Experts
| | |-+  1 lichaam of allemaal ledenmaten?
Pagina's: 1 2 3 [4]
« vorige volgende »
Print
Advertenties

yazid
Gebruiker


Offline Offline

Berichten: 444


« Antwoord #45 Gepost op: 18 April 2012, 13:43:03 »

Om dat simpel op te lossen zou ik de hoek van het bovenlichaam tegengesteld meedraaien zoals jij al zei volgen mij.

En inderdaad jij gebruikt heel veel berekeningen nog tussendoor zie ik Tong


I am a in the GM Quiz!
Naar boven Gelogd

sommers9
Gebruiker


Offline Offline

Berichten: 59


« Antwoord #46 Gepost op: 27 Juni 2014, 13:55:45 »

Er zijn hele mooie programmas waarin je keyframes kan zetten en het object automatisch alle translaties uitrekend. Je kan om de 5 steps een export van je model in een bepaalde staat inladen. Dat je netzoals bij sprites een soort sub-images / sub-modellen hebt.
Is vrij makkelijk te maken maar lijkt me niet efficiŽnt

Je kunt ook ledematen los maken. En deze individueel verplaatsen of afhankelijk van elkaar maken. Mocht je dit zomaar in code typen is dit inderdaad wat veel werk.
Als je een geniale oplossing hiervoor kunt vinden... een soort animatiescripts en een goed opgezette basisskelet kan het wat makkelijker zijn.
Je kunt een onderarm aan een bovenarm maken door hem een vaste lengte te geven en te kijken naar zijn startpunt en richting, wat daar uit komt is het startpunt van de onderarm. Als je een programma hebt waatmee je voor elk onderdeel de rotatie en punten kunt uitrekenen zou je elk animatie-scriptje zo kunnen inladen maarja?


GML:
while(1 != 2){}
Naar boven Gelogd

StefanJanssen
Gebruiker


Offline Offline

Berichten: 5211

Was StefannafetS


WWW
« Antwoord #47 Gepost op: 27 Juni 2014, 14:20:18 »

Gm heeft tegenwoordig spine support toch?


Begrijp je iets niet in een uitleg van een gebruiker? Bekijk eerst de helpfile voor je iets vraagt
Naar boven Gelogd

3D Maker
Gebruiker


Offline Offline

Berichten: 468

http://joostverbraeken.com


WWW
« Antwoord #48 Gepost op: 28 Juni 2014, 12:36:26 »

Professionele programmeurs gebruiken losse ledematen en na wat testjes ben ik er vrijwel zeker van dat losse ledematen ook efficiŽnter zijn dan duizenden modellen om voor alle animaties mooie 'frames' te hebben.
Ik heb een script gebouwd waarmee je ontzettend realistisch animaties kan maken, het kost alleen wel erg veel tijd om een animatie te maken (ongeveer 1 uur voor 2 seconden).

Step-event:
GML:
if running
 {
  anim_run();
  cycli=17;
  duration=0.7;
  current_animation=5;
 }

timer+=1/duration/global.rfps;
if timer>=1
{
 timer-=1;
}

char_xx=0;
char_yy=0;
char_zz=0;

xrotation=0;
yrotation=0;
zrotation=0;

headxrotation=0;
headyrotation=0;
headzrotation=0;

luarmxrotation=0;
luarmyrotation=10;
luarmzrotation=0;
llarmxrotation=0;
llarmyrotation=5;
llarmzrotation=0;

ruarmxrotation=0;
ruarmyrotation=-10;
ruarmzrotation=0;
rlarmxrotation=0;
rlarmyrotation=-5;
rlarmzrotation=0;

lulegxrotation=0;
lulegyrotation=0;
lulegzrotation=0;
lllegxrotation=0;
lllegyrotation=0;
lllegzrotation=0;

rulegxrotation=0;
rulegyrotation=0;
rulegzrotation=0;
rllegxrotation=0;
rllegyrotation=0;
rllegzrotation=0;

weapxrotation=0;
weapyrotation=0;
weapzrotation=0;

flo=floor(timer*cycli);
cei=ceil(timer*cycli);
//char_xx
one=animxx[current_animation,flo];
two=animxx[current_animation,cei];
char_xx=one+((timer-flo/cycli) / (cei/cycli-flo/cycli))*(two-one);
//char_zz
one=animzz[current_animation,flo];
two=animzz[current_animation,cei];
char_zz=one+((timer-flo/cycli) / (cei/cycli-flo/cycli))*(two-one);
//body rotations
one=xrot[current_animation,flo];
two=xrot[current_animation,cei];
xrotation=one+((timer-flo/cycli) / (cei/cycli-flo/cycli))*(two-one);
//headyrotation
one=headyrot[current_animation,flo];
two=headyrot[current_animation,cei];
headyrotation=one+((timer-flo/cycli) / (cei/cycli-flo/cycli))*(two-one)-yrotation;
//luarm
one=luarmxrot[current_animation,flo];
two=luarmxrot[current_animation,cei];
luarmxrotation=one+((timer-flo/cycli) / (cei/cycli-flo/cycli))*(two-one)-xrotation;

one=luarmyrot[current_animation,flo];
two=luarmyrot[current_animation,cei];
luarmyrotation=one+((timer-flo/cycli) / (cei/cycli-flo/cycli))*(two-one)-yrotation;
//llarm
one=llarmxrot[current_animation,flo];
two=llarmxrot[current_animation,cei];
llarmxrotation=one+((timer-flo/cycli) / (cei/cycli-flo/cycli))*(two-one)-xrotation;

one=llarmyrot[current_animation,flo];
two=llarmyrot[current_animation,cei];
llarmyrotation=one+((timer-flo/cycli) / (cei/cycli-flo/cycli))*(two-one)-yrotation;
//ruarm
one=ruarmxrot[current_animation,flo];
two=ruarmxrot[current_animation,cei];
ruarmxrotation=one+((timer-flo/cycli) / (cei/cycli-flo/cycli))*(two-one)-xrotation;

one=ruarmyrot[current_animation,flo];
two=ruarmyrot[current_animation,cei];
ruarmyrotation=one+((timer-flo/cycli) / (cei/cycli-flo/cycli))*(two-one)-yrotation;
//rlarm
one=rlarmxrot[current_animation,flo];
two=rlarmxrot[current_animation,cei];
rlarmxrotation=one+((timer-flo/cycli) / (cei/cycli-flo/cycli))*(two-one)-xrotation;

one=rlarmyrot[current_animation,flo];
two=rlarmyrot[current_animation,cei];
rlarmyrotation=one+((timer-flo/cycli) / (cei/cycli-flo/cycli))*(two-one)-yrotation;
//luleg
one=lulegxrot[current_animation,flo];
two=lulegxrot[current_animation,cei];
lulegxrotation=one+((timer-flo/cycli) / (cei/cycli-flo/cycli))*(two-one)-xrotation;
//llleg
one=lllegxrot[current_animation,flo];
two=lllegxrot[current_animation,cei];
lllegxrotation=one+((timer-flo/cycli) / (cei/cycli-flo/cycli))*(two-one)-xrotation;
//ruleg
one=rulegxrot[current_animation,flo];
two=rulegxrot[current_animation,cei];
rulegxrotation=one+((timer-flo/cycli) / (cei/cycli-flo/cycli))*(two-one)-xrotation;
//rlleg
one=rllegxrot[current_animation,flo];
two=rllegxrot[current_animation,cei];
rllegxrotation=one+((timer-flo/cycli) / (cei/cycli-flo/cycli))*(two-one)-xrotation;
//weap
one=weapxrot[current_animation,flo];
two=weapxrot[current_animation,cei];
weapxrotation=one+(two-one)*(ceil(timer)-timer)-xrotation;

one=weapyrot[current_animation,flo];
two=weapyrot[current_animation,cei];
weapyrotation=one+(two-one)*(ceil(timer)-timer)-yrotation;

one=weapzrot[current_animation,flo];
two=weapzrot[current_animation,cei];
weapzrotation=one+(two-one)*(ceil(timer)-timer)-zrotation;

Script anim_run():
GML:
//om de 0.05 seconden, dus 20 cycli. Dit beschouw ik als animatie 5. Hij duurt 0.85 seconde
xrot[5,0]=22;
xrot[5,1]=22;
xrot[5,2]=22;
xrot[5,3]=22;
xrot[5,4]=22;
xrot[5,5]=22;
xrot[5,6]=22;
xrot[5,7]=22;
xrot[5,8]=22;
xrot[5,9]=22;
xrot[5,10]=22;
xrot[5,11]=22;
xrot[5,12]=22;
xrot[5,13]=22;
xrot[5,14]=22;
xrot[5,15]=22;
xrot[5,16]=22;
xrot[5,17]=xrot[5,0];

mul=2;
animzz[5,0]=-0.1*mul;
animzz[5,1]=-0.01*mul;
animzz[5,2]=0.12*mul;
animzz[5,3]=0.2*mul;
animzz[5,4]=0.26*mul;
animzz[5,5]=0.25*mul;
animzz[5,6]=0.15*mul;
animzz[5,7]=0*mul;
animzz[5,8]=-0.08*mul;
animzz[5,9]=-0.05*mul;
animzz[5,10]=0.08*mul;
animzz[5,11]=0.17*mul;
animzz[5,12]=0.26*mul;
animzz[5,13]=0.28*mul;
animzz[5,14]=0.25*mul;
animzz[5,15]=0.16*mul;
animzz[5,16]=0*mul;
animzz[5,17]=animzz[5,0]*mul;

mul=3.5;
headyrot[5,0]=-6/mul;
headyrot[5,1]=-4.3/mul;
headyrot[5,2]=-3.5/mul;
headyrot[5,3]=-2/mul;
headyrot[5,4]=-1/mul;
headyrot[5,5]=0/mul;
headyrot[5,6]=2/mul;
headyrot[5,7]=4/mul;
headyrot[5,8]=6/mul;
headyrot[5,9]=4/mul;
headyrot[5,10]=3/mul;
headyrot[5,11]=2/mul;
headyrot[5,12]=0/mul;
headyrot[5,13]=-2/mul;
headyrot[5,14]=-3/mul;
headyrot[5,15]=-4/mul;
headyrot[5,16]=-5/mul;
headyrot[5,17]=headyrot[5,0]/mul;

luarmxrot[5,0]=37;
luarmxrot[5,1]=26;
luarmxrot[5,2]=14;
luarmxrot[5,3]=0;
luarmxrot[5,4]=-11;
luarmxrot[5,5]=-14;
luarmxrot[5,6]=1;
luarmxrot[5,7]=21;
luarmxrot[5,8]=32;
luarmxrot[5,9]=41;
luarmxrot[5,10]=45;
luarmxrot[5,11]=50;
luarmxrot[5,12]=54;
luarmxrot[5,13]=53;
luarmxrot[5,14]=51;
luarmxrot[5,15]=48;
luarmxrot[5,16]=43;
luarmxrot[5,17]=luarmxrot[5,0];

luarmyrot[5,0]=10;
luarmyrot[5,1]=10;
luarmyrot[5,2]=10;
luarmyrot[5,3]=10;
luarmyrot[5,4]=10;
luarmyrot[5,5]=10;
luarmyrot[5,6]=10;
luarmyrot[5,7]=10;
luarmyrot[5,8]=10;
luarmyrot[5,9]=10;
luarmyrot[5,10]=10;
luarmyrot[5,11]=10;
luarmyrot[5,12]=10;
luarmyrot[5,13]=10;
luarmyrot[5,14]=10;
luarmyrot[5,15]=10;
luarmyrot[5,16]=10;
luarmyrot[5,17]=luarmyrot[5,0];

llarmxrot[5,0]=-79;
llarmxrot[5,1]=-84;
llarmxrot[5,2]=-93;
llarmxrot[5,3]=-100;
llarmxrot[5,4]=-107;
llarmxrot[5,5]=-106;
llarmxrot[5,6]=-92;
llarmxrot[5,7]=-75;
llarmxrot[5,8]=-62;
llarmxrot[5,9]=-49;
llarmxrot[5,10]=-37;
llarmxrot[5,11]=-27;
llarmxrot[5,12]=-18;
llarmxrot[5,13]=-16;
llarmxrot[5,14]=-25;
llarmxrot[5,15]=-40;
llarmxrot[5,16]=-60;
llarmxrot[5,17]=llarmxrot[5,0];

llarmyrot[5,0]=0;
llarmyrot[5,1]=-4;
llarmyrot[5,2]=-4;
llarmyrot[5,3]=-4;
llarmyrot[5,4]=-4;
llarmyrot[5,5]=-4;
llarmyrot[5,6]=-4;
llarmyrot[5,7]=-4;
llarmyrot[5,8]=-4;
llarmyrot[5,9]=-4;
llarmyrot[5,10]=-4;
llarmyrot[5,11]=-4;
llarmyrot[5,12]=-4;
llarmyrot[5,13]=-4;
llarmyrot[5,14]=-4;
llarmyrot[5,15]=-4;
llarmyrot[5,16]=-4;
llarmyrot[5,17]=llarmyrot[5,0];

ruarmxrot[5,0]=32;
ruarmxrot[5,1]=41;
ruarmxrot[5,2]=45;
ruarmxrot[5,3]=50;
ruarmxrot[5,4]=54;
ruarmxrot[5,5]=53;
ruarmxrot[5,6]=51;
ruarmxrot[5,7]=48;
ruarmxrot[5,8]=43;
ruarmxrot[5,9]=37;
ruarmxrot[5,10]=26;
ruarmxrot[5,11]=14;
ruarmxrot[5,12]=0;
ruarmxrot[5,13]=-11;
ruarmxrot[5,14]=-14;
ruarmxrot[5,15]=1;
ruarmxrot[5,16]=21;
ruarmxrot[5,17]=ruarmxrot[5,0];

ruarmyrot[5,0]=-10;
ruarmyrot[5,1]=-10;
ruarmyrot[5,2]=-10;
ruarmyrot[5,3]=-10;
ruarmyrot[5,4]=-10;
ruarmyrot[5,5]=-10;
ruarmyrot[5,6]=-10;
ruarmyrot[5,7]=-10;
ruarmyrot[5,8]=-10;
ruarmyrot[5,9]=-10;
ruarmyrot[5,10]=-10;
ruarmyrot[5,11]=-10;
ruarmyrot[5,12]=-10;
ruarmyrot[5,13]=-10;
ruarmyrot[5,14]=-10;
ruarmyrot[5,15]=-10;
ruarmyrot[5,16]=-10;
ruarmyrot[5,17]=ruarmyrot[5,0];

rlarmxrot[5,0]=-62;
rlarmxrot[5,1]=-49;
rlarmxrot[5,2]=-37;
rlarmxrot[5,3]=-27;
rlarmxrot[5,4]=-18;
rlarmxrot[5,5]=-16;
rlarmxrot[5,6]=-25;
rlarmxrot[5,7]=-40;
rlarmxrot[5,8]=-60;
rlarmxrot[5,9]=-79;
rlarmxrot[5,10]=-84;
rlarmxrot[5,11]=-93;
rlarmxrot[5,12]=-100;
rlarmxrot[5,13]=-107;
rlarmxrot[5,14]=-106;
rlarmxrot[5,15]=-92;
rlarmxrot[5,16]=-75;
rlarmxrot[5,17]=rlarmxrot[5,0];

rlarmyrot[5,0]=-4;
rlarmyrot[5,1]=-4;
rlarmyrot[5,2]=-4;
rlarmyrot[5,3]=-4;
rlarmyrot[5,4]=-4;
rlarmyrot[5,5]=-4;
rlarmyrot[5,6]=-4;
rlarmyrot[5,7]=-4;
rlarmyrot[5,8]=-4;
rlarmyrot[5,9]=-4;
rlarmyrot[5,10]=-4;
rlarmyrot[5,11]=-4;
rlarmyrot[5,12]=-4;
rlarmyrot[5,13]=-4;
rlarmyrot[5,14]=-4;
rlarmyrot[5,15]=-4;
rlarmyrot[5,16]=-4;
rlarmyrot[5,17]=rlarmyrot[5,0];

lulegxrot[5,0]=-12;
lulegxrot[5,1]=3;
lulegxrot[5,2]=13;
lulegxrot[5,3]=15;
lulegxrot[5,4]=25;
lulegxrot[5,5]=24;
lulegxrot[5,6]=14;
lulegxrot[5,7]=0;
lulegxrot[5,8]=-12;
lulegxrot[5,9]=-27;
lulegxrot[5,10]=-38;
lulegxrot[5,11]=-38;
lulegxrot[5,12]=-35;
lulegxrot[5,13]=-30;
lulegxrot[5,14]=-30;
lulegxrot[5,15]=-29;
lulegxrot[5,16]=-24;
lulegxrot[5,17]=lulegxrot[5,0];

lllegxrot[5,0]=52;
lllegxrot[5,1]=55;
lllegxrot[5,2]=60;
lllegxrot[5,3]=68;
lllegxrot[5,4]=79;
lllegxrot[5,5]=90;
lllegxrot[5,6]=102;
lllegxrot[5,7]=111;
lllegxrot[5,8]=113;
lllegxrot[5,9]=98;
lllegxrot[5,10]=75;
lllegxrot[5,11]=49;
lllegxrot[5,12]=25;
lllegxrot[5,13]=3;
lllegxrot[5,14]=-4; if room!=Intro {if lllegxrotation<3 && step_sound_teller {num=string(ceil(random(8))); play_sound('Movement/stone_0'+num+'.mp3','Stone_0'+num,0.76*global.rfps); step_sound_teller=0;}}
lllegxrot[5,15]=11;
lllegxrot[5,16]=32;
lllegxrot[5,17]=lllegxrot[5,0];

rulegxrot[5,0]=-12;
rulegxrot[5,1]=-27;
rulegxrot[5,2]=-38;
rulegxrot[5,3]=-38;
rulegxrot[5,4]=-35;
rulegxrot[5,5]=-30;
rulegxrot[5,6]=-30;
rulegxrot[5,7]=-29;
rulegxrot[5,8]=-24;
rulegxrot[5,9]=-12;
rulegxrot[5,10]=3;
rulegxrot[5,11]=13;
rulegxrot[5,12]=15;
rulegxrot[5,13]=25;
rulegxrot[5,14]=24;
rulegxrot[5,15]=14;
rulegxrot[5,16]=0;
rulegxrot[5,17]=rulegxrot[5,0];

rllegxrot[5,0]=113;
rllegxrot[5,1]=98;
rllegxrot[5,2]=75;
rllegxrot[5,3]=49;
rllegxrot[5,4]=25;
rlegxrot[5,5]=3;
rllegxrot[5,6]=-4; if room!=Intro {if rllegxrotation<3 && step_sound_teller {num=string(ceil(random(8))); play_sound('Movement/stone_0'+num+'.mp3','Stone_0'+num,0.76*global.rfps); step_sound_teller=0;}}
rllegxrot[5,7]=11;
rllegxrot[5,8]=32;
rllegxrot[5,9]=52;
rllegxrot[5,10]=55;
rllegxrot[5,11]=60;
rllegxrot[5,12]=68;
rllegxrot[5,13]=79;
rllegxrot[5,14]=90;
rllegxrot[5,15]=102;
rllegxrot[5,16]=111;
rllegxrot[5,17]=rllegxrot[5,0];
anim_run_weapon();
Het resultaat is een vrijwel levensechte animatie, maar kijk eens... het is verschrikkelijk veel doodsaai werk, dus gebruik een methode als deze enkel als de animatie heel veel wordt gebruikt (bijv. rennen)


Jij ziet de dingen en zegt: Waarom? Ik droom de dingen en zeg: Waarom niet?
http://www.joostverbraeken.com/
Naar boven Gelogd

StefanJanssen
Gebruiker


Offline Offline

Berichten: 5211

Was StefannafetS


WWW
« Antwoord #49 Gepost op: 28 Juni 2014, 19:46:59 »

Dit kun je met een (zelf geschreven) animeer programma veel sneller doen. Als je ook nog een beetje op efficientie wil letten kun je natuurlijk bv de start rotatie en eind rotatie bekijken en dan er heen bewegen.


Begrijp je iets niet in een uitleg van een gebruiker? Bekijk eerst de helpfile voor je iets vraagt
Naar boven Gelogd

Advertenties
« vorige volgende »
Pagina's: 1 2 3 [4]
Print


Topic Informatie
0 geregistreerde leden en 1 gast bekijken dit topic.

Ga naar:  

Powered by SMF 1.1.21 | SMF © 2006-2007, Simple Machines
www.game-maker.nl © 2003-2020 Nederlandse Game Maker Community