GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Retorno da GMBR!!!
por theguitarmester Ter 19 Mar 2024, 22:38

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Mudar cor de apenas uma palavra
por lunalol Sex 01 Mar 2024, 13:42

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39

» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16

» a funçao approach ainda existe?
por PEDRINDEV Ter 26 Dez 2023, 20:05

» Inimigo ataca até por trás! >:(
por saim Sex 22 Dez 2023, 08:55

» [RESOLVIDO]Spawn após morte
por Deception_1999 Dom 17 Dez 2023, 16:39

» Remunerado $$$ - Procuro programador para ajudar a "montar" um jogo
por theguitarmester Sáb 02 Dez 2023, 16:28

» Game maker nao abre
por Cerf Dom 26 Nov 2023, 12:01


Terceira pessoa em gml- 3D

+2
LeandroDaher
LeeroyFan
6 participantes

Ir para baixo

Terceira pessoa em gml- 3D Empty Terceira pessoa em gml- 3D

Mensagem por LeeroyFan 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
LeeroyFan

Data de inscrição : 04/03/2010
Reputação : 0
Número de Mensagens : 13
Prêmios : Terceira pessoa em gml- 3D Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.drivingtokashmir.blogspot.com

Ir para o topo Ir para baixo

Terceira pessoa em gml- 3D Empty Re: Terceira pessoa em gml- 3D

Mensagem por LeandroDaher 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
LeandroDaher

Data de inscrição : 13/05/2010
Reputação : 3
Número de Mensagens : 357
Prêmios : Terceira pessoa em gml- 3D Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Terceira pessoa em gml- 3D Empty Re: Terceira pessoa em gml- 3D

Mensagem por Thiago_o_programador Dom 18 Jul 2010, 13:58

Bem legal esse tuto, continue assim! Happy
Thiago_o_programador
Thiago_o_programador

Games Ranking : Nota D

Notas recebidas : D - C - D - C
Data de inscrição : 14/05/2009
Reputação : 7
Número de Mensagens : 713
Prêmios : Terceira pessoa em gml- 3D Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Terceira pessoa em gml- 3D Empty Re: Terceira pessoa em gml- 3D

Mensagem por correiajoao Dom 18 Jul 2010, 14:56

Concordo com as opiniões, dos colegas anteriores!

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

Data de inscrição : 05/06/2010
Reputação : 0
Número de Mensagens : 353
Prêmios : Terceira pessoa em gml- 3D Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Terceira pessoa em gml- 3D Empty Re: Terceira pessoa em gml- 3D

Mensagem por iluga 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
iluga

Data de inscrição : 23/11/2010
Reputação : 0
Número de Mensagens : 23
Prêmios : Terceira pessoa em gml- 3D Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Terceira pessoa em gml- 3D Empty Re: Terceira pessoa em gml- 3D

Mensagem por dd123 Sáb 01 Jan 2011, 15:52

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

Obrigado pelo tópico, continue assim!
avatar
dd123

Data de inscrição : 12/04/2010
Reputação : -7
Número de Mensagens : 126
Prêmios : Terceira pessoa em gml- 3D Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Terceira pessoa em gml- 3D Empty Re: Terceira pessoa em gml- 3D

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


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