Brasil G4mes
Registre-se para ter acesso total à todas as seções do fórum!
Jogue, brinque e o mais importante, divirta-se!

Participe do fórum, é rápido e fácil

Brasil G4mes
Registre-se para ter acesso total à todas as seções do fórum!
Jogue, brinque e o mais importante, divirta-se!
Brasil G4mes
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

3D Parte 5

Ir para baixo

3D Parte 5 Empty 3D Parte 5

Mensagem por dodoop Qui Jul 09, 2009 11:24 am

Créditos:
psycon:Por traduzir o tutorial para o pôrtugues.
dodoop:Por disponibilizar.

Tutorial:
Plataformas

O que você aprenderá: criar um jogo de plataforma 3D.

1.1. Introduction
O que você aprenderá:
· Sobre jogos de plataforma,
· Usando gravidade,
· Designando niveis simples,
· Usando a visao de terceira pessoa,
· Animaçao através de deformação,
· Fazendo o personagem caminhar, pular, e cair.

1.2. Sobre jogos de plataforma

Nos tutorials anteriores vimos como declarar o valor de z e usar isso interativamente. Usamos algo como:
Código:

//set speed
if z>0 then speed*=.99;
Jogos de plataforma sao tipicamente jogos onde uma forma plana horizontal é usada sobre o qual um personagem pode caminhar, pular e entrar em todo tipo de dificuldade.
A Altura faz um papel crucial em tal jogo.
Nao faz muito sentido quando temos um jogo de plataforma sem alturas/niveis diferentes.
Se nao tem diferença de altura num jogo de plataforma, haverá só um fino pavimento(chao).
Temos aqui pontos onde você pode cair pela plataforma em sua profundidade ou algum caminho para subir pelas plataformas.
Se você tem um personagem que caminha em uma plataforma, ele terá que poder cair ou salta sobre outras plataformas.
A subida e caida é expressada pelo valor de z.

1.3. Usando gravidade

A força da gravidade é o que faz o jogo de plataforma trabalhar. Sem gravidade você teria um personagem que poderia andar em meio ao ar.
Até mesmo em desenhos animados onde o personagem pode caminhar para fora de um precipício com nada mais do que espaço em baixo dele,
ele eventualmente caira, até mesmo se ele tentar correr atrás do chão sólido.

Para nosso tutorial, temos duas texturas: uma superficie de metal e uma superficie de agua,
porque isso realmente é tudo que precisamos.
Quereremos que o personagem ande nas plataformas de metal e caia na superfície de água.
Nosso personagem será alérgico a água (mas nao ao metal).
No mundo real, a gravidade puxa todo o tempo. No mundo virtual do jogo de plataforma, a gravidade pode ser ligada e desligada.
Usamos isso para desligar a gravidade quando o personagem esta na plataforma sólida e liga-la quando não estiver.
No parágrafo 1.7 deste texto tutorial vc ve que a gravidade é usada para fazer o personagem andar, correr, pular, aterrisar e cair.

1.4. Designando niveis simples

Para simplificar criaremos plataformas simples, sobrepondo outras(umas sobre as outras). Sobrepondo plataformas pode-se caminhar em cima e ficar de debaixo delas.
Plataformas simples estao lado a lado(azulejo) mas em alturas diferentes.
Precisamos desenhar um nível/fase no Editor de Room do GM para colocar plataformas a diferente locais e alturas.
Para realizar isto, nós usaremos marcadores de altura que nós vamos colocar no layout da room de plataforma.
Por esse meio poderemos designar os niveis, ambos em plano e em altura (ou profundidade).
Os marcadores de altura colocados, desígnam os niveis da plataforma simples.
Se você der uma olhada no arquivo gm6 no script scr_Marker, vc vera que para
cada segmento da plataforma que nós nomeamos para um valor de z:
Código:

//make the height
if collision_rectangle(x-32,y-32,x+32,y+32,obj_Height0,false,false) then
z=0*global.Grid;
else
if collision_rectangle(x-32,y-32,x+32,y+32,obj_Height1,false,false) then
z=1*global.Grid;
else
if collision_rectangle(x-32,y-32,x+32,y+32,obj_Height2,false,false) then
z=2*global.Grid;
else
if collision_rectangle(x-32,y-32,x+32,y+32,obj_Height3,false,false) then
z=3*global.Grid;
else
if collision_rectangle(x-32,y-32,x+32,y+32,obj_Height4,false,false) then
z=4*global.Grid;
else
if collision_rectangle(x-32,y-32,x+32,y+32,obj_Height5,false,false) then
z=5*global.Grid;
else
if collision_rectangle(x-32,y-32,x+32,y+32,obj_Height6,false,false) then
z=6*global.Grid;
else
if collision_rectangle(x-32,y-32,x+32,y+32,obj_Height7,false,false) then
z=7*global.Grid;
else
if collision_rectangle(x-32,y-32,x+32,y+32,obj_Height8,false,false) then
z=8*global.Grid;
else
if collision_rectangle(x-32,y-32,x+32,y+32,obj_Height9,false,false) then
z=9*global.Grid;
Esse codigo (acima) faz as alturas de cada azulejo da plataforma. (A propósito, o valor global.Grid define a grade de altura).
Os azulejos atuais são desenhados no Draw event do objeto par_Child. (Parent-child metodo que foi usado no exemplo.)
Aqui o codigo para desenhar os azulejos que vc ve:
Código:

//draw a platform tile
d3d_draw_block(x-32,y-32,z-8,x+32,y+32,z,background_get_texture(bac_Metal),1,1);
Quando designamos seus niveis, é melhor para começar colocando os azulejos de plataforma,
entao colocanado os marcadores de altura e então finalmente a camera object (que cria o personagem, a proposito)na room.

------------------------------------------
1.5. Usando a visao de terceira pessoa

Claro, precisaremos duma camera para olhar a tela. Esse é o codigo da camera que se segue:
Código:

//draw what camera sees
//from x,y,z
xf=obj_Character.x-sin(degtorad(-obj_Character.direction+90))*global.Zoom
yf=obj_Character.y+cos(degtorad(-obj_Character.direction+90))*global.Zoom
zf=obj_Character.z+global.Zoom
//to x,y,z
xt=obj_Character.x
yt=obj_Character.y
zt=obj_Character.z
d3d_set_projection(xf,yf,zf, xt,yt,zt, 0,0,1);
A primeira parte define o ponto com que ela ve (xf,yf,zf). É baseado na posição e direção do personagem, como também no valor de zoom da camera.

Seno (e coseno) foram usados com o especifico proposito para girar a camera de tal modo que ficasse atrás do personagem.

A camera olha para a posição do objeto (xt,yt,zt). Finalmente, a projeção é mostrada como você esperaria (na ultima linha de codigo).

----------------------------------------
1.6. Animaçao através de deformação

Uma simples animaçao de pulo foi usada para mostrar ao jogador quando nós pulamos ou caimos ou quando nao.
A bola vermelha que é o personagem principal é deformada baseada em sua velocidade.
O codigo fala por si mesmo:
Código:

//animation (deform)
if abs(zspeed)<8 then deform=abs(zspeed);
//draw ball
d3d_draw_ellipsoid(x-16,y-16,z-deform, x+16,y+16,z+32+deform,background_get_texture(bac_Character),1,1,16);
-----------------------------------------------------------
1.7. Fazendo o personagem caminhar, pular, aterrisar e cair

O codigo que se trata de andar, pular, aterrisar e cair do personagem é bastante complicado.
Envolve bastante de lógica. No Step event do character(obj_Character) encontramos o script scr_Gravity.
Isso basicamente checa se o character esta sobre a plataforma ou nao. Olhe isso:
Código:

//checa se esta pulando
if jump=1 then exit;
//checa se esta caindo
if fall=1 then exit;
//define gravity
if collision_point(x,y,chi_Platform,false,false) then
{
znear=instance_nearest(x,y,chi_Platform).z;
if z=znear then zgravity=0;
else {fall=1;speed+=.2;zgravity=-.5;}
}
else {fall=1;speed+=.2;zgravity=-.5;}
No mesmo Step event do character ele é movido constantemente na direçao z:
Código:

//move in z direction
z+=zspeed;
zspeed+=zgravity;
//drowned
if z<-512-128 then game_restart();
A Checagem da aterrisagem do character tambem é feita no Step event. O codigo é algo como isso:
Código:

//check if not falling yet
if sign(zspeed)>=0 then exit;
//check if falling
if sign(zspeed)<0 then fall=1;
//land if falling
if collision_point(x,y,chi_Platform,false,false) then
{
znear=instance_nearest(x,y,chi_Platform).z;
if z=znear ||
(z>znear && z<znear+global.Grid/4)
then {jump=0;fall=0;z=znear; zspeed=0; zgravity=0}
}
Eu não irei entrar em detalhes nisso. É basicamente: se isto acontece então faça isso.
Isso fara o personagem aterrisar na plataforma.

Um final script que mensionarei é o script de pulo (encontrado no evento ao apertar espaço do obj_Character)
nomeado: scr_Jump. Seguindo o codigo:
Código:

//check if jumping
if jump=1 then exit;
//check if falling
if fall=1 then exit;
//check if you can jump
znear=instance_nearest(x,y,chi_Platform).z;
if z=znear then {jump=1;zspeed=8;zgravity=-.5}
Novamente a verificaçao de condiçoes. Basicamente, esse script checar Se o character
esta exatamente na plataforma ou nao, fazendo o character pular.
***
dodoop
dodoop
Membro
Membro

Mensagens Mensagens : 41
Fama Fama : 14

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos