Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
3D no GM - Parte 2
5 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
3D no GM - Parte 2
Se você tiver o projeto do fim do 1º tutorial, você poupa tempo, mas eu vou falar desde o início.
Importe dois backgrounds diferentes, um será o céu e o outro o chão. Nomeie-os de back_sky e back_floor, respectivamente.
Agora crie o obj_cam. No evento Create deste objeto, execute o script ini_3D:
Agora começa a mudar. Crie um script de nome ini_camera com esse código:
Execute este script no evento Create do obj_cam, após o script ini_3D.
Esse script vai declarar a variável zdirection(cujo uso será visto em breve) e criar uma instância do obj_player e uma obj_floors, assim você não vai precisar colocar estes objetos na room, bastará colocar um obj_cam no local onde você quer que o jogador comece.
Crie um objeto obj_player e no evento Create, em um Execute Code, declare a variável z, que representa a posição do player no eixo Z:
Agora crie um script dra_camera:
Execute esse script no evento Draw do obj_cam. Vamos analisar o código.
Como já foi visto, xf,yf,zf é de onde a câmera está, nesse caso, a câmera sempre estará onde o player estiver. Já xt,yt,zt é pra onde a câmera olha. Ela sempre vai olhar para um local que é relativo ao ponto(xf,yf,zf) e à direção da câmera.
direction é a direção no plano, é uma variável interna do GM.
zdirection é a variável que declaramos antes, e indica a direção vertical da câmera, se elá está olhando pra cima ou pra baixo.
Tudo bem, mas e o movimento?!
Vamos criar o script de movimento, scr_move, que será executado no evento Step do obj_player. Vamos construí-lo passo a passo:
Se a seta pra cima for pressionada, adicionará um vetor de movimento na direção da câmera, vai mover o player pra frente.
Se a seta pra baixo for pressionada, adicionará um movimento inverso, pra trás.
Se a seta pra esquerda for pressionada, mudará a direção do obj_cam. O contrário vale pra seta da direita.
Se as teclas W/S forem pressionads, mudará a zdirection, fazendo a câmera olhar para cima/baixo.
Essas duas linhas limitarão a velocidade de movimento.
Essa linha vai fazer com que a câmera sempre retorne aos poucos para a posição original, olhando reto.
Esse script acabou. Agora crie um novo script dra_floors:
Este script vai desenhar o chão e o céu, de acordo com os backgrounds que foram importados no início. Portanto crie um obj_floors, e no evento Draw execute esse script.
Último passo, crie uma room, coloque um obj_cam em algum lugar e rode o jogo. ;D
Pronto. Você tem um céu e um chão, e um herói que se movimenta, temos uma visão em primeira pessoa. ;)
Os dois tutoriais já dão uma base boa pra quem quer começar, além de mostrarem que dá um trabalho enorme fazer um jogo em 3D.
Importe dois backgrounds diferentes, um será o céu e o outro o chão. Nomeie-os de back_sky e back_floor, respectivamente.
Agora crie o obj_cam. No evento Create deste objeto, execute o script ini_3D:
- Código:
d3d_start();
d3d_set_perspective(true);
d3d_set_hidden(true);
d3d_set_lighting(false);
draw_set_color(c_white);
d3d_set_fog(true,c_white,1,1024);
d3d_set_culling(false);
d3d_set_shading(false);
texture_set_interpolation(true);
Agora começa a mudar. Crie um script de nome ini_camera com esse código:
- Código:
zdirection = 0;
instance_create(x,y,obj_player)
instance_create(0,0, obj_floors)
Execute este script no evento Create do obj_cam, após o script ini_3D.
Esse script vai declarar a variável zdirection(cujo uso será visto em breve) e criar uma instância do obj_player e uma obj_floors, assim você não vai precisar colocar estes objetos na room, bastará colocar um obj_cam no local onde você quer que o jogador comece.
Crie um objeto obj_player e no evento Create, em um Execute Code, declare a variável z, que representa a posição do player no eixo Z:
- Código:
z=0;
Agora crie um script dra_camera:
- Código:
xf = obj_player.x;
yf = obj_player.y;
zf = obj_player.z + 64;
xt = xf+cos(degtorad(direction));
yt = yf-sin(degtorad(direction));
zt = zf-sin(degtorad(zdirection));
d3d_set_projection(xf,yf,zf, xt,yt,zt, 0,0,1);
Execute esse script no evento Draw do obj_cam. Vamos analisar o código.
Como já foi visto, xf,yf,zf é de onde a câmera está, nesse caso, a câmera sempre estará onde o player estiver. Já xt,yt,zt é pra onde a câmera olha. Ela sempre vai olhar para um local que é relativo ao ponto(xf,yf,zf) e à direção da câmera.
direction é a direção no plano, é uma variável interna do GM.
zdirection é a variável que declaramos antes, e indica a direção vertical da câmera, se elá está olhando pra cima ou pra baixo.
Tudo bem, mas e o movimento?!
Vamos criar o script de movimento, scr_move, que será executado no evento Step do obj_player. Vamos construí-lo passo a passo:
- Código:
friction = 0.5
- Código:
if keyboard_check(vk_up) then {motion_add(obj_cam.direction,0.2);friction=0;}
else
if keyboard_check(vk_down) then {motion_add(obj_cam.direction+180,0.2);friction=0;}
Se a seta pra cima for pressionada, adicionará um vetor de movimento na direção da câmera, vai mover o player pra frente.
Se a seta pra baixo for pressionada, adicionará um movimento inverso, pra trás.
- Código:
if keyboard_check(vk_left) then {obj_cam.direction+=4;}
else
if keyboard_check(vk_right) then {obj_cam.direction-=4;}
Se a seta pra esquerda for pressionada, mudará a direção do obj_cam. O contrário vale pra seta da direita.
- Código:
if keyboard_check(ord('W')) and obj_cam.zdirection > -80 then {obj_cam.zdirection-=4;}
else
if keyboard_check(ord('S')) and obj_cam.zdirection < 80 then {obj_cam.zdirection+=4;}
Se as teclas W/S forem pressionads, mudará a zdirection, fazendo a câmera olhar para cima/baixo.
- Código:
if speed > 12 then speed = 12;
if speed < -6 then speed = -6;
Essas duas linhas limitarão a velocidade de movimento.
- Código:
obj_cam.zdirection *= 0.95
Essa linha vai fazer com que a câmera sempre retorne aos poucos para a posição original, olhando reto.
Esse script acabou. Agora crie um novo script dra_floors:
- Código:
text_floor = background_get_texture(back_floor)
text_ceil = background_get_texture(back_sky)
d3d_draw_floor(-4096,-4096,0, 4096,4096,0, text_floor, 1,1)
d3d_draw_floor(-4096,-4096,256, 4096,4096,256, text_ceil, 1,1)
Este script vai desenhar o chão e o céu, de acordo com os backgrounds que foram importados no início. Portanto crie um obj_floors, e no evento Draw execute esse script.
Último passo, crie uma room, coloque um obj_cam em algum lugar e rode o jogo. ;D
Pronto. Você tem um céu e um chão, e um herói que se movimenta, temos uma visão em primeira pessoa. ;)
Os dois tutoriais já dão uma base boa pra quem quer começar, além de mostrarem que dá um trabalho enorme fazer um jogo em 3D.
KJr- Games Ranking :
Notas recebidas : B
Data de inscrição : 20/03/2008
Reputação : 0
Número de Mensagens : 38
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: 3D no GM - Parte 2
cara eu fiz egostei mas so da pra aze no pro queria saber se tem algum seja possivel na verssao free do gm pois o pc que eu mais utilizo pra criaçao de jogos te so a verssao free
Re: 3D no GM - Parte 2
gostei tutourial...
nao tem o tutourial (3D no GM - Parte 3)? queria aprender mais, lol
_____________________________________________
nao tem o tutourial (3D no GM - Parte 3)? queria aprender mais, lol
_____________________________________________
Brevemente em www.studionatch.com
Re: 3D no GM - Parte 2
Cara eu fiz tudo o que você falou,ai quando vou testar fica tudo preto! :|
Markituh- Games Ranking :
Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Tópicos semelhantes
» Criando um RPG (Parte 2)
» 3D no GM - Parte 1
» [Tutorial] I.A - 1ª parte
» Caixas de diálogo em GML - Parte 2
» Criando um RPG (Parte 1)
» 3D no GM - Parte 1
» [Tutorial] I.A - 1ª parte
» Caixas de diálogo em GML - Parte 2
» Criando um RPG (Parte 1)
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos