Terceira pessoa em gml- 3D

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

Terceira pessoa em gml- 3D

Mensagem por LeeroyFan em Dom 18 Jul 2010, 05:15

- Tutorial: Terceira pessoa em GML-

Antes de mais nada, quero apenas esclarecer que neste tutorial, não trataremos de modelos complicados nem de animações. Ele é só uma iniciação à programação em 3d na terceira pessoa.

Começando: Abra sua versão do Game Maker. Eu sei que funciona na versão 8.0 PRO e 6.1 PRO, mas deve funcionar nas outras também.
Primeiramente, crie uma sprite (ela vai representar seu personagem na room, portanto, você NÃO verá ela no modo 3D), e coloque o nome de "spr_player" (sem as aspas).
Esta sprite, como já foi citado, apenas representará o player na room, então você pode desenhar o que quiser (círculo, quadrado, pac-man).

Crie um Background (que vai ser a textura do player) e nomeie-o de "b_player". Para começar, pinte o quadrado padrão de alguma cor e desmarque a opção de tranparência. Se você quiser, pode ir mexendo e testando outros modos para que a textura do seu player fique mais elaborada. Uma dica é fazer um quadrado amarelo e, no meio, desenhar um rosto sorritente (tipo smiley).
Agora crie um background para o chão e nomeie-o de "b_floor". Uma dica é pintá-lo em "quadrados", como se fosse um azulejo de banheiro, para contrastar bem com o seu personagem.

Feito isso, crie um objeto, que será o player e coloque o nome de "obj_player". Associe-o à sprite do player e na opção "Depht:" Coloque o valor de 100.
No evento Create >> Execute a piece of Code, coloque:
Código:

z=10;
friction=1.3;
camdirection=direction;
camzdirection=0;

zdirection=0;

draw_set_color(c_white);

d3d_start()
display_mouse_set(display_get_width()/2, display_get_height()/2);

O "z=10" é uma variável usada no modo 3d. O problema é que o próprio game maker reconhece as variáveis "X" e "Y", mas não a "Z" (que seria a 'profundidade'), portanto, temos que criar uma variável "Z" e dá-la o valor de 10, para que o personagem não fique na mesma altura que o chão (evitando bugs idiotas).
A "camdirection=direction" é uma variável criada para que, quando a câmera for criada, ela fique atrás do player, então ela tem que ficar na mesma direção que ele. Já a utilidade desta variável é diferente: Ela simplesmente existe porque a direção para qual o player está virado não é a mesma que a câmera, então, para evitar maaaais bugs idiotas e conflitos estúpidos, criamos, então, esta variável.
A "frction=1.3" é, oviamente, a fricção, mas retornaremos à ela quando estivermos programando os movimentos.

Para começar o modod 3D, usamos o comando "d3d_start()".
E linha "display_mouse_set(display_get_width()/2, display_get_height()/2);" serve para, quando o jogo começar, o mouse se mova para o centro da tela, assim evitando maais códigos idiotas.

_________________

Agora, no evento Draw >> Execute a piece of Code, coloque:
Código:

distance=60;

distance=60;

d3d_set_projection(
x-cos(degtorad(camdirection))*cos(degtorad(camzdirection))*distance,
y+sin(degtorad(camdirection))*cos(degtorad(camzdirection))*distance,
z+sin(degtorad(camzdirection))*distance,

x,y,z,

0,0,1);

d3d_transform_add_rotation_z(direction)
d3d_transform_add_translation(x,y,z)

d3d_draw_ellipsoid(10, 10, -10,  -10, -10, 10, b_player, 1, 1, 20)

d3d_transform_set_identity();

d3d_transform_add_rotation_z(direction)
d3d_transform_add_translation(x,y,z)

d3d_draw_ellipsoid(10, 10, -10,  -10, -10, 10, b_player, 1, 1, 20)

d3d_transform_set_identity();

Criamos, então, uma variável chamada "Distance", que será a dstância entre o player e a câmera. O valor "60" pode ser mudado de acordo com a preferência ou exigência do POGramador.

As linhas "distance=60;

d3d_set_projection(
x-cos(degtorad(camdirection))*cos(degtorad(camzdirection))*distance,
y+sin(degtorad(camdirection))*cos(degtorad(camzdirection))*distance,
z+sin(degtorad(camzdirection))*distance,

x,y,z,

0,0,1);
" São feitas para definir a distância entre o plaer e a câmera e a posição do mesmo.
"d3d_draw_ellipsoid" é o comando usado para cria o player em si, e aqui também associamos a textura.

______________

Agora, no Step >> Execute a piece of Code:
Código:

camdirection-=(display_get_width()/2 - display_mouse_get_x())/2;
camzdirection+=(display_get_height()/2-display_mouse_get_y())/2;

display_mouse_set(display_get_width()/2, display_get_height()/2);

if camzdirection>80 {camzdirection=80}
if camzdirection<-20 {camzdirection=-20}

Isso serve para que o mouse fique sempre no centro e para que a câmera não possa ultrapassar os limites do chão e da cabeça do player (você vai entender quando rodar o jogo).

Agora crie OUTRO "exectue a piece of code " no Step e coloque:
Código:

if (keyboard_check(ord("S")))
{motion_add(camdirection-180,2)}

if (keyboard_check(ord("W")))
{motion_add(camdirection,2)}

if (keyboard_check(ord("D")))
{motion_add(camdirection-90,2)}

if (keyboard_check(ord("A")))
{motion_add(camdirection+90,2)}

Esses são os movimentos. A configuração está no famoso WASD, mas pode, obviamente, ser modificado. Os valores também podem ser modificados, mas a velocidade é um pouco complicada (a não ser se usarmos de gambiarras).

Agora você já pode rodar o jogo e ver o que temos. Mas ainda falta o chão.

Para criá-lo, crie um objeto chamado "obj_floor" e não associe-o a nenhuma sprite.
Nele, crie um evento Create >> Execute a piece of Code, e escreva:
Código:

z=0;
Isto serve para, como já dito, criar a variável "Z".

Agora, no evento Draw >> Execute a piece of Code, coloque:
Código:

d3d_draw_floor(0,0,0,room_width*2,room_height*2,0,background_get_texture(b_floor),24,24);

Aqui, criamos um chão com o tamanho de duas vezes o tamnaho da room (isso pode ser modificado), e colocamos a textura. Reparem que, enquanto o valor de "Z" do chão é de 0, o do player é de 10, para que o player fique um pouco acima do chão.

Agora rodem e divirtam-se!

Conclusão:
Traduzido e adaptado por LeeroyFan de SamusRidley.
Razz


Última edição por LeeroyFan em Dom 18 Jul 2010, 14:35, editado 1 vez(es)

LeeroyFan

Número de Mensagens : 13
Idade : 20
Data de inscrição : 04/03/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.drivingtokashmir.blogspot.com

Voltar ao Topo Ir em baixo

Re: Terceira pessoa em gml- 3D

Mensagem por LeandroDaher em Dom 18 Jul 2010, 08:56

muinto bom tuto,quem quiser começar a fazer jogos em 3D,pode começar a aprender aqui.flws

LeandroDaher

Número de Mensagens : 357
Idade : 20
Data de inscrição : 13/05/2010
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Terceira pessoa em gml- 3D

Mensagem por Thiago_o_programador em Dom 18 Jul 2010, 13:58

Bem legal esse tuto, continue assim! Happy

Thiago_o_programador

Ranking : Nota D
Número de Mensagens : 709
Idade : 19
Data de inscrição : 14/05/2009
Notas recebidas : D - C - D - C
Reputação : 6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://www.jogosdahora.maisblog.net

Voltar ao Topo Ir em baixo

Re: Terceira pessoa em gml- 3D

Mensagem por correiajoao em Dom 18 Jul 2010, 14:56

Concordo com as opiniões, dos colegas anteriores!

Continue assim, melhorando cada vez mais este fórum!

correiajoao

Número de Mensagens : 353
Idade : 20
Data de inscrição : 05/06/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Terceira pessoa em gml- 3D

Mensagem por iluga em Sex 26 Nov 2010, 14:32

eu testei com o gm 7 pro e deu.
Concordo com todos que postaram atras de mim, ficou muito irada!

iluga

Número de Mensagens : 23
Data de inscrição : 23/11/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Terceira pessoa em gml- 3D

Mensagem por dd123 em Sab 01 Jan 2011, 15:52

Gostei... deu pra entender como funciona...
espero aprender a fazer mais detalhes!!

Obrigado pelo tópico, continue assim!

dd123

Número de Mensagens : 126
Idade : 21
Data de inscrição : 12/04/2010
Reputação : -7
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Terceira pessoa em gml- 3D

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


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