Fazer Homen: Correr, Pular e Colisão com Objetos...

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Fazer Homen: Correr, Pular e Colisão com Objetos...

Mensagem por caradealho em Ter 23 Nov 2010, 01:00

GENTE EU CONSIGI MODELAR O BONECO SE VOCÊS QUISEREM VER EU POSTO A ENGINE ATUALIZADA
RUNNING MAN EXAMPLE
by John J.A.H. Weeren (aka "ThatGamesGuy")


- Essa Engine requere muito conhecimento em inglês e matemática do game maker, eu fiquei estudando ela umas 3 semanas mas ainda não decorei nem si quer metade dos códigos;
- Ela precisa-se do Game Maker Pro;
- Essa Engine não foi feita por min então eu falo logo;
- Ela foi feita por um cara Americano; vamos lá...
A primeira coisa que devemos fazer é isso:
Criar:
- spr_Camera - Aqui vai ser a Câmera
- spr_Character - Aqui vai ser o personagem
- spr_Wall - Aqui vai ser a parede
As Texturas do Mundo 3D - Crie Backgrounds como:
- Coloque o nome de bac_Floor
- Coloque o nome de bac_Metal
- Coloque o nome de bac_Sky
Agora vamos para a parte mais chata os Scripts.
Vá na pasta do lado do game maker e bote add script:
Esse vai ter o nome de: ani_Character
Código:
if z>0 then
{
ani+=speed/16;
}
else
{
ani+=speed*2;
}

if ani>360 then ani-=360;

if speed<.2 then
    {
    ani=0;
    }
Esse vai ter o nome de: col_CharacterWall - Colisão com o obj_Wall
Código:
//movendo-se ao obj_solido(0);
speed=0;
x=xprevious;
y=yprevious;
Essa vai ter o nome de: con_Camera
Código:
if keyboard_check(vk_left) then {direction-=1;}
else
if keyboard_check(vk_right) then {direction+=1;}

if keyboard_check(vk_up) then {zdirection-=1;}
else
if keyboard_check(vk_down) then {zdirection+=1;}

Essa vai ter o nome de: con_Character

Código:
//jump
if keyboard_check(vk_space) && z=0 then {zspeed+=8;}

//no controls when jumping
if z>0 then {friction=0.05;exit;} else {friction=.1;}

amount=.25;
if speed<1 then amount+=.75;

Essa vai ter o nome de: con_Camera
//front & back
if keyboard_check(ord('W')) then {motion_add(obj_Camera.direction,amount);}
else
if keyboard_check(ord('S')) then {motion_add(obj_Camera.direction+180,amount);}

//strafe
if keyboard_check(ord('A')) then {motion_add(obj_Camera.direction+90,amount);}
else
if keyboard_check(ord('D')) then {motion_add(obj_Camera.direction-90,amount);}

Essa vai ter o nome de: dra_Camera - aqui vai criar a câmera do mundo 3D

Código:
//zoom
zoom=128;

//localização
x=obj_Character.x;
y=obj_Character.y;
z=obj_Character.z;

//de
xf=x+cos(degtorad(direction+180))*zoom;
yf=y-sin(degtorad(direction+180))*zoom;
zf=z-tan(degtorad(zdirection))*zoom;

//para
xt=x;
yt=y;
zt=z+64;

//desenhar
d3d_set_projection_ext(xf,yf,zf,    xt,yt,zt,  0,0,1,  60,1.33,1,1024+256);
Essa vai ter o nome de: dra_Character - Aqui vai criar o personagem; Código pra caramba:
Código:
//draw character

d3d_transform_set_identity();
d3d_transform_add_rotation_y(sin(degtorad(ani*2))*speed/8);
d3d_transform_add_rotation_z(direction+sin(degtorad(ani))*speed);
d3d_transform_add_translation(x,y,z+sin(degtorad(ani*2))*speed/4);
//body upper
d3d_draw_ellipsoid(-8,-10,+64-16,        +9,+10,64+2,      tex,1,1,16);
d3d_draw_cylinder(-7,-8,+32+8,    +8,+8,+64-8,      tex,1,1,    1,16);
//body lower
d3d_draw_ellipsoid(-10,-10,+32-2,    +8,+10,+48,      tex,1,1,    16);
d3d_transform_set_identity();


d3d_transform_set_identity();
d3d_transform_add_rotation_y(sin(degtorad(ani*2))*speed/8);
d3d_transform_add_rotation_z(direction+sin(degtorad(ani))*speed*2);
d3d_transform_add_translation(x,y,z+sin(degtorad(ani*2))*speed/4);

//neck
d3d_draw_cylinder(-3,-3,+64-2,      +3,+3,+64+8,    tex,1,1,    1,16);

//head
d3d_draw_ellipsoid(-4,-4,+64+3,      +5,+4,+64+12,    tex,1,1,16);
d3d_draw_ellipsoid(-6,-5,+64+4,      +5,+5,+64+16,    tex,1,1,16);

d3d_transform_set_identity();

//shift arms
shift1=10;
aa=45;      //angle a
ab=30;      //angle b

//arm upper (side A)
d3d_transform_set_identity();
d3d_transform_add_rotation_y(z+sin(degtorad(ani))*aa);
d3d_transform_add_rotation_x(-15);
d3d_transform_add_rotation_z(direction);
d3d_transform_add_translation(x,y,z+64-4+sin(degtorad(ani*2))*speed/4);
d3d_draw_cylinder(-2,-2+shift1,-16,      +2,+3+shift1,-2,    tex,1,1,    1,16);
d3d_draw_ellipsoid(-4,-4+shift1,-8,      +4,+4+shift1,2,    tex,1,1,16);
d3d_transform_set_identity();

//arm lower (side A)
d3d_transform_set_identity();
d3d_transform_add_rotation_y(z*1.3+sin(degtorad(ani))*ab+30);
d3d_transform_add_translation(0,0,-16);
d3d_transform_add_rotation_y(z+sin(degtorad(ani))*aa);
d3d_transform_add_rotation_x(-15);
d3d_transform_add_rotation_z(direction);
d3d_transform_add_translation(x,y,z+64-4+sin(degtorad(ani*2))*speed/4);
d3d_draw_cylinder(-2,-2+shift1,-12,      +2,+2+shift1,0,    tex,1,1,    1,16);
d3d_draw_ellipsoid(-3,-2+shift1,-16,      +3,+2+shift1,-11,    tex,1,1,16);
d3d_transform_set_identity();

//arm upper (side B)
d3d_transform_set_identity();
d3d_transform_add_rotation_y(z+sin(degtorad(-ani))*aa);
d3d_transform_add_rotation_x(15);
d3d_transform_add_rotation_z(direction);
d3d_transform_add_translation(x,y,z+64-4+sin(degtorad(ani*2))*speed/4);
d3d_draw_cylinder(-2,-3-shift1,-16,      +2,+2-shift1,0,    tex,1,1,    1,16);
d3d_draw_ellipsoid(-4,-4-shift1,-8,      +4,+4-shift1,2,    tex,1,1,16);
d3d_transform_set_identity();

//arm lower (side B)
d3d_transform_set_identity();
d3d_transform_add_rotation_y(z*1.3+sin(degtorad(-ani))*ab+30);
d3d_transform_add_translation(0,0,-16);
d3d_transform_add_rotation_y(z+sin(degtorad(-ani))*aa);
d3d_transform_add_rotation_x(15);
d3d_transform_add_rotation_z(direction);
d3d_transform_add_translation(x,y,z+64-4+sin(degtorad(ani*2))*speed/4);
d3d_draw_cylinder(-2,-2-shift1,-12,      +2,+2-shift1,0,    tex,1,1,    1,16);
d3d_draw_ellipsoid(-3,-2-shift1,-16,      +3,+2-shift1,-11,    tex,1,1,16);
d3d_transform_set_identity();



//shift legs
shift2=6;
aa=45;      //angle a
ab=30;      //angle b


//leg upper (side A)
d3d_transform_set_identity();
d3d_transform_add_rotation_y(z-(sin(degtorad(ani))*aa));
d3d_transform_add_rotation_x(-5);
d3d_transform_add_rotation_z(direction);
d3d_transform_add_translation(x,y,z+32+sin(degtorad(ani*2))*speed/4);
d3d_draw_cylinder(-4,-4+shift2,-16,      +4,+4+shift2,4,    tex,1,1,    1,16);
d3d_transform_set_identity();

//leg lower (side A)
d3d_transform_set_identity();
d3d_transform_add_rotation_y(-z-(sin(degtorad(ani))*ab+30));
d3d_transform_add_translation(0,0,-16);
d3d_transform_add_rotation_y(z-(sin(degtorad(ani))*aa));
d3d_transform_add_rotation_x(-5);
d3d_transform_add_rotation_z(direction);
d3d_transform_add_translation(x,y,z+32+sin(degtorad(ani*2))*speed/4);
d3d_draw_cylinder(-5,-5+shift2,-16,      +5,+5+shift2,0,    tex,1,1,    1,16);
d3d_draw_cylinder(-5,-5+shift2,-16,      +10,+5+shift2,-12,    tex,1,1,    1,16);
d3d_transform_set_identity();

//leg upper (side B)
d3d_transform_set_identity();
d3d_transform_add_rotation_y(z-(sin(degtorad(-ani))*aa));
d3d_transform_add_rotation_x(5);
d3d_transform_add_rotation_z(direction);
d3d_transform_add_translation(x,y,z+32+sin(degtorad(ani*2))*speed/4);
d3d_draw_cylinder(-4,-4-shift2,-16,      +4,+4-shift2,4,    tex,1,1,    1,16);
d3d_transform_set_identity();

//leg lower (side B)
d3d_transform_set_identity();
d3d_transform_add_rotation_y(-z-(sin(degtorad(-ani))*ab+30));
d3d_transform_add_translation(0,0,-16);
d3d_transform_add_rotation_y(z-(sin(degtorad(-ani))*aa));
d3d_transform_add_rotation_x(5);
d3d_transform_add_rotation_z(direction);
d3d_transform_add_translation(x,y,z+32+sin(degtorad(ani*2))*speed/4);
d3d_draw_cylinder(-5,-5-shift2,-16,      +5,+5-shift2,0,    tex,1,1,    1,16);
d3d_draw_cylinder(-5,-5-shift2,-16,      +10,+5-shift2,-12,    tex,1,1,    1,16);
d3d_transform_set_identity();

Esse vai ter o nome de: dra_Wall - Aqui vai criar a parede do jogo
Código:
d3d_draw_block(x-32,y-32,0,    x+32,y+32,128,      tex,1,1);

Esse vai ter o nome de: dra_World - Aqui vai criar o mundo 3D

Código:
px=obj_Character.x;
py=obj_Character.y;

d3d_set_lighting(0);
d3d_set_fog(0,c_black,256,1024);      //use fog?
d3d_draw_ellipsoid(px-1024,py+1024,-1024,  px+1024,py-1024,1024,  background_get_texture(bac_Sky),1,1,16);
d3d_set_fog(true,c_black,256,1024);      //use fog?

d3d_draw_floor(-2048,2048,0,  2048,-2048,0,  background_get_texture(bac_Floor),32,32);
d3d_set_lighting(1);

Esse vai ter o nome de: ini_Camera

Código:
d3d_start();        //go to 3d
d3d_set_perspective(true);      //use perspective?
d3d_set_hidden(true);      //remove hidden surfaces?
d3d_set_lighting(false);        //use lighting?
draw_set_color(c_white);        //drawing color
d3d_set_fog(true,c_black,256,1024);      //use fog?
d3d_set_culling(true);    //use culling?
d3d_set_shading(true);    //smooth textures when lit?
texture_set_interpolation(true);        //smooth pixels?

//set values
z=0;
zdirection=-30;
depth=8192;

d3d_set_lighting(1);
d3d_light_define_direction(0,      -.5,.5,-1,c_red);
d3d_light_enable(0,1);

d3d_light_define_direction(1,      .5,.5,-.5,c_red);
d3d_light_enable(1,1);

d3d_light_define_direction(2,      0,-1,0,c_silver);
d3d_light_enable(2,1);

//create instances
instance_create(x,y,obj_Character);
instance_create(0,0,obj_World);

Esse vai ter o nome de: ini_Character

Código:
z=0;
friction=.1;
tex=background_get_texture(bac_Metal);
zspeed=0;
ani=0;

Esse vai ter o nome de: ini_Wall

Código:
tex=background_get_texture(bac_Wall);

Esse vai ter o nome de: mot_Character

Código:
//limit speed
if abs(speed)>16 then speed*=.98;

z+=zspeed;
zspeed-=.75;
if z<0 then {z=0;zspeed=0;}

- Pronto aqui acaba os Códigos;
- Agora vamos criar os objetos:
obj_Camera - Coloque a spr_Camera
obj_Character - Coloque a spr_Character
obj_World - Sem spr
obj_Wall - Coloque a spr_Wall

Agora vamos adicionar os Códigos:
Vá no obj_Camera. Add Evento Create e coloque execute script, não é execute pieco of code não é execute script. E coloque ini_Camera.
Add evento Step no obj_Camera dinovo, e coloque execute script con_Camera.
Add evento Draw no obj_Camera também, e coloque execute script dra_Camera.
Pronto Nossa Movimentação em 3D está pronta.
Agora vamos para o obj_Character:
Add um evento create nele e coloque também execute script ini_Character.
Add outro evento Step, nele vamos executar 3 tipos de códigos.
1º. Execute Script con_Character
2º. Execute Script mot_Character
3º. Execute Script ani_Character
Pronto agora vamos adicionar uma colisão com o obj_Wall - obj_Parede.
Coloque Execute Script col_CharacterWall.
Agora vamos criar o Personagem em 3D.
Add o Evento Draw nele e adicione Execute Script dra_Character.
Pronto nosso Personagem em 3D está criado.
Agora no obj_World adicione o evento Draw e Execute Script dra_World.
E o nosso mundo está tbm criado.
Agora a parte mais fácil a colisão.
Vai no obj_Wall add um Evento Create e Execute Script ini_Wall.

Add outro Evento Draw e Execute Script dra_Wall.
Pronto agora crie uma Room do Tam. 1024 Widht e 768 Height e na Opção Snap X: bote 64 e na Snap Y: bote 64 tbm.
Coloque os obj_Wall, quantos quiserem e o obj_Camera no meio da room ou em qualquer lugar.
E Pronto agora rode a room e pegou.

Uma Engine Pronta: http://www.4shared.com/file/G-rw-Pyz/Homen_Correndo_TUTORIAL_BY_CAR.html
DICAS:
Barra de Espaço Pula, setas do teclado mudam a posição da câmera e w,a,s,d, controla o personagem.


Última edição por caradealho em Ter 23 Nov 2010, 13:53, editado 4 vez(es)

caradealho

Número de Mensagens : 164
Idade : 18
Data de inscrição : 28/10/2010
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://caradealho.blogspot.com/

Voltar ao Topo Ir em baixo

Re: Fazer Homen: Correr, Pular e Colisão com Objetos...

Mensagem por Isaias em Ter 23 Nov 2010, 01:08

Omg! isso é 3d né? O.O
3d é meio dificil, alem de consumir muita memória..

--
coloca os créditos do criador ai, de onde ela foi tirada ;)

Isaias

Número de Mensagens : 374
Idade : 23
Data de inscrição : 16/08/2008
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://isaiasramos.com

Voltar ao Topo Ir em baixo

Re: Fazer Homen: Correr, Pular e Colisão com Objetos...

Mensagem por caradealho em Ter 23 Nov 2010, 01:12

Se vocês conseguirem modelar o personagem vai ajudar muito.
Esse é um 3D Bem Pesado agora o Personagem não é Modelado com Textura só são Eslipses com Cilinder e Um Efeito de Sombra com o bac_Metal.

caradealho

Número de Mensagens : 164
Idade : 18
Data de inscrição : 28/10/2010
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://caradealho.blogspot.com/

Voltar ao Topo Ir em baixo

Re: Fazer Homen: Correr, Pular e Colisão com Objetos...

Mensagem por Conteúdo patrocinado Hoje à(s) 09:57


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum