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 7

Ir para baixo

3D Parte 7 Empty 3D Parte 7

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

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

Tutorial:

Degraus e rampas

O que você aprenderá: criar Degraus e rampas.

1.1. Introduction
O que você aprenderá:
· Montando os objetos,
· Montando os scripts,
· Batendo contra blocos,
· Caminhando em rampas,
· Trocando/alternando entre rampas e degraus.

1.2. Montando os objetos
Esse tutorial é sobre Degraus e rampas. Iremos ver que não há nenhuma diferença real entre eles.
A unica diferença esta no modo de ver, mas nao no modo de trabalhar/funcionar.
Para ver como funciona, Vamos dar uma olhada nos objetos e scripts que usaremos.
Existem 4 objetos que serao usados: a camera (obj_Camera), um chão (obj_Floor), um bloco (obj_Block) e uma rampa (obj_Ramp).
A camera é necessaria para "olhar" a cena (um planeta alienigina no caso). Também serve para a visao de primeira pessoa do nosso personagem.
O chao servira para o nosso objeto de terra que tem o valor z = 0 (altura zero). Iremos precisar de blocos objects para andar sobre eles e o objeto da rampa para subir nos blocos.

1.3. Montando os scripts

Como eu disse, tambem usaremos scripts. Vamos dar uma olhada em todos eles e ver o que fazem.
O script ‘scr_Start3D’ seta/liga o modo usual 3D (veja o tutorial ‘começando com 3D’).
O script ‘scr_Camera’ deve tambem lembrar algo familiar (veja o tutorial ‘Especificaçao do Seno’). Vamos lembrar do codigo:
Código:

//draw what the camera sees
xt=x+cos(direction*pi/180);
yt=y-sin(direction*pi/180);
zt=z+zdirection;
d3d_set_projection(x,y,z+64, xt,yt,zt+64, 0,0,1); //64 é altura de z (pé) do character's
Note que nao usamos seno para a zdirection da camera (pitch). Mas isso ainda funciona.

O script ‘scr_DeclareZ’ nao deve te surpreender tambem (veja o tutorial ‘Z values’),
Nem o script ‘scr_Mouselook’ (veja o tutorial ‘Z detection’). O script scr_Block simplifica desenhar do bloco e o script scr_Floor faz o mesmo para a terra/chao.
Nenhuma surpresa por enquanto, certo?

1.4. Batendo contra blocos

Nós não queremos que nossa camera (ou character) se mova dentro de um bloco, entao queremos que a camera/personagem bata contra os blocos quando nao estivermos no topo deles.
Iremos usar o script ‘scr_CameraBump’:
Código:

//camera bumps into solid things
x=xprevious;
y=yprevious;
speed=0;
Chamaremos esse script quando precisarmos dele. (Chamar um script por meio de executar e rodar um script com o "piece of code"). Quando a camera object (obj_Camera)
colidir com um bloco ira executar script ‘scr_BlockCheck’. Colocaremos um evento no evento de colisao da camera. O script (scr_BlockCheck) é esse:
Código:

//check for bumping against blocks
if collision_circle(x,y,2,obj_Block,false,false) then
{
near=instance_nearest(x,y,obj_Block);
if near.z>= z then script_execute(scr_CameraBump);
}
else
{zgravity=1;}
Primeiro checa se o character está tocando um bloco. Se nao, a gravidade sera ligada (veja a ultima linha do codigo).
Se o character tocar um bloco, checariamos o mais próximo block e verificariamos se esse valor z é maior ou igual a do nosso character (z).
Se for, sera executado o comando do script usado no ‘script_execute’ .

Esse meio nos proporcionara andar sobre os blocos(zgravity é zero) mas cairemos fora dos blocos quando nao estivermos sobre eles (zgravity é 1).
(Mais sobre o uso da gravidade pode ser encontrado no tutorial sobre ‘Platformas’.)

1.5. Caminhando sobre rampas

No Step event da camera object encontraremos dois scripts, O primeiro ‘scr_Move’ que tem o código seguinte:
Código:

//check for ramps
if collision_circle(x,y,2,obj_Ramp,false,false) then
{
zgravity=0;zspeed=0;
near=instance_nearest(x,y,obj_Ramp);
z=48-distance_to_point(near.x,near.y);
}
else
script_execute(scr_BlockCheck);
Primeiro verificariamos se aqui tiver uma rampa. Se nao, executara o script ‘scr_BlockCheck’ denovo (leia o paragrafo anterior).
Mas se aqui existir uma rampa, sera abilitado para andar sobre ela pela configuraçao de zgravity e zspeed serem setados
para zero e achando a mais próxima rampa object (obj_Ramp) e modificar o z do character (ou camera) para a altura dele mesmo (48) menos a distância
para o ponto (x,y) da mais próxima rampa.

O sprite da rampa aponta Leste.

Se você der uma olhada no sprite da rampa (spr_RampEast), vc vera aonde é a origem do sprite.
Iremos usar essa origem para calcular a altura do character.
Queremos que o character suba (valor de z mais alto) até alcançar o topo (origem) da rampa.
O sprite é chamado ‘spr_RampEast’ porque esta apontando para leste.

Em um game, você poderia querer criar mais rampas que apontem outras direções também.
O segundo script encontrado no Step event da camera object é ‘scr_MoveZ’.
O codigo dele:
Código:

//perform gravity
z+=zspeed;
zspeed-=zgravity;
if z<0 then {z=0;zspeed=0;zgravity=0;}
Isso simplesmente assegurara a velocidade e a gravidade a funcionar e para que o character nao va para baixo do nivel da terra (valor z de 0).

1.6. Trocando/alternando entre rampas e degraus

O codigo no script ‘scr_Ramp’ é esse:
Código:

//draw ramp
if stairs=0 then d3d_draw_floor(x-64,y-32,z, x,y+32,z+48,background_get_texture(bac_Ramp),1,1)
else
//draw stairs
{
d3d_draw_block(x,y-32,z, x-64,y+32,z+12,background_get_texture(bac_Ramp),1,1)
d3d_draw_block(x,y-32,z+12, x-48,y+32,z+24,background_get_texture(bac_Ramp),1,1)
d3d_draw_block(x,y-32,z+24, x-32,y+32,z+36,background_get_texture(bac_Ramp),1,1)
d3d_draw_block(x,y-32,z+36, x-16,y+32,z+48,background_get_texture(bac_Ramp),1,1)
}
A primeira linha checa se a variavel stairs é zero. Se for, desenhara a rampa (com o d3d_draw_floor.)
Caso contrário, desenhara uma sucessao de blocos também conhecido como degraus/escada.
A troca entre rampas e degraus é feita pelo Mouse event da rampa object (obj_Ramp). Veja o codigo para trocar a variavel stairs de zero para um e de um para zero (alavanca):
Código:

//change into stairs
stairs=abs(stairs)-1;
Note que vc nao precisa de um "if… then… loop" para alavancar o valor de stairs(1 ou 0).
Clicando com o botao direito do mouse, alancara a forma entre uma rampa ou de uma escada.
Esse é o princípio basico do código. Como eu disse: a unica diferença esta no modo olhar,nao no modo de funcionar.
***
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