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
» Colisões não funcionando
por RastaMaan Hoje à(s) 19:49

» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Hoje à(s) 16:45

» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18

» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

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

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

» 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


[Tutorial] FPS + Sistema de Gravidade + Escada

2 participantes

Ir para baixo

[Tutorial] FPS + Sistema de Gravidade + Escada Empty [Tutorial] FPS + Sistema de Gravidade + Escada

Mensagem por Thiago_o_programador Qua 18 Jul 2012, 16:33

Nome: Câmera estilo FPS e um sistema simples de gravidade
Nível de dificuldade: mediano
Requerimentos: Versão do GM 8 - Pro

Bem pessoal boa tarde, hoje irei ensinar como fazer uma câmera no estilo de Fisrt Personal Shooter (Tiro em Primeira Pesooal) e também um sistema de gravidade simples e uma escada.

Câmera


Vamos começar pela parte mais importante do jogo, a câmera, crie um objeto e nomeio de 'obj_cam', no evento CREATE dele adicione:

Código:
d3d_start()
Inicia o modo 3D

Código:
texture_set_interpolation(true)
Melhora significativamente a qualidade das texturas.

Código:
draw_set_color(c_white)
draw_set_alpha(1)
Seta a cor padrão de desenho em branco e o valor de alpha em 1

Código:
z=0
zspeed=0
zgravity=0
Variaveis de 'Localização' no mundo 3d, mesmo x e y já sendo variaveis padrão no game maker, z não é, o que obriga o programador a declara-la.

Código:
friction=.4
Seta a fricção absoluta do objeto

Agora no STEP adicione:

Código:
if keyboard_check(vk_left) {direction+=4}
if keyboard_check(vk_right) {direction-=4}
if keyboard_check(vk_up) {if speed<7 {speed+=.5}}
if keyboard_check(vk_down) {if speed>-7 {speed-=.5}}
Movimentos baseados nas teclas de navegação.

Posteriormente vamos criar um sistema de grids mas já vamos adiantando para ajustarmos a gravidade...

Código:
if z>global.grid*16&&zspeed=0 {zgravity+=.5}
Gravidade simples levando em conta a variavel global.grid que será explicada mais tarde...

Código:
if z<=global.grid*16 {zgravity=0 z=global.grid*16}
if zspeed>0 {zspeed-=.5}
if keyboard_check_pressed(vk_space) {zspeed=12}
if distance_to_object(obj_block)>1 {global.grid=16*-16}
if z<=16*-16 {room_restart()}
Restante do código de gravidade em função de global.grid e do obj_blcok que será criado posteriormente.

Bem, vamos agora passar para o END STEP:

Código:
z+=zspeed
z-=zgravity
z estará sempre em função de zspeed e zgravity.

No DRAW coloque:

Código:
xto=x+cos(direction*pi/180)
yto=y-sin(direction*pi/180)
zto=z+40
Faz com que a câmera carregue os valores de para onde ela olhara (xto,yto,zto) atravez da variavel direction, e o zto será uma pequena altura implementada para não dar a sensação que o player está deitado

Código:
d3d_set_projection(x,y,z+40,xto,yto,zto,0,0,1)
Projeta o horizonte de acordo com os valores encontrados antes.

Grid


Agora crie um script e chame-o de 'grade', adicione:

Código:
if z=0 {global.grid=0}
if z=16 {global.grid=1}
if z=16*2 {global.grid=2}
if z=16*3 {global.grid=3}
if z=16*4 {global.grid=4}
if z=16*5 {global.grid=5}
if z=16*6 {global.grid=6}
if z=16*7 {global.grid=7}
if z=16*8 {global.grid=8}
if z=16*9 {global.grid=9}
if z=16*10 {global.grid=10}
A variavel falada anteriormente (global.grid) será definida a partir daí ela servira para informar ao player onde está o chão, é interessante notar que serão todos multiplos de 16 então nesse caso quando for usa-la é só multiplicar por 16, ex:

Código:
if z>global.grid*16&&zspeed=0 {zgravity+=.5}
Se o valor z for maior que o valor de global.grid*16 e zspeed estiver igual a zero vai haver gravidade.

Por exemplo se z for igual a 64 e global.grid*16 for igual a 16 o player vai saber que está acima do chão então vai acionar a gravidade.

Chão


Crie um obj_up, ele vai fazer o chao subir, no END STEP adicione:

Código:
if distance_to_object(obj_block)<1 {instance_destroy()}
No contato com o obj_block ele será destruido.

Crie um objeto chamado: obj_block, ele vai ser nosso 'chão'.

No CREATE defina a variavel z:

Código:
z=0

E a grade:
Código:
global.grid=0

Na colisão com a câmera coloque:
Código:
if z>obj_cam.z+16 {with (obj_cam) {
  x = xprevious;
  y = yprevious;
  if (abs(hspeed) >= abs(vspeed) && not place_meeting(x+hspeed,y,obj_block))
    { x += hspeed; exit;}
 if (abs(vspeed) >= abs(hspeed) && not place_meeting(x,y+vspeed,obj_block))
    { y += vspeed; exit;}
  speed = 0;}}
Se o obj_block estiver com o valor z muito maior que o do obj_cam então o ele vai parar.

Código:
else{grade()}
Caso contrario ele vai chamar nosso script e o obj_cam vai subir.

Na colisão com o obj_up adicione:

Código:
z+=16
Ele vai subir um nivel

No DRAW coloque:

Código:
d3d_draw_block(x,y,z,x+64,y+64,-2,sprite_get_texture(sprite_index,0),1,1)
Desenha um paralelepípedo que vai da posição -2 até sua posição z. (seja ela qual for)

Texturas


Agora só falta as texturas, utlize essa para o sprite do obj_block:
[Tutorial] FPS + Sistema de Gravidade + Escada Metal_dark

Use essa para a câmera e para o obj_up:
[Tutorial] FPS + Sistema de Gravidade + Escada Sprite1

Pronto!
Agora basta criar uma room e adicionar os objetos.
Obs.: Crie primeiro o obj_cam (Importante); quanto mais obj_up você colocar sobre o obj_block mais alto ele ficara.

Bem gente é isso, espero que tenham gostado, e para quem quiser clique aqui e obtenha a engine pronta.

Flw!


Última edição por Thiago_o_programador em Sáb 25 Ago 2012, 09:03, editado 1 vez(es)
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 : [Tutorial] FPS + Sistema de Gravidade + Escada 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

[Tutorial] FPS + Sistema de Gravidade + Escada Empty Re: [Tutorial] FPS + Sistema de Gravidade + Escada

Mensagem por GMaker 81 Dom 19 Ago 2012, 12:54

modifica o topico, ai. isso só pega na versão Pro
GMaker 81
GMaker 81

Data de inscrição : 27/07/2012
Reputação : 0
Número de Mensagens : 26
Prêmios : [Tutorial] FPS + Sistema de Gravidade + Escada 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

[Tutorial] FPS + Sistema de Gravidade + Escada Empty Re: [Tutorial] FPS + Sistema de Gravidade + Escada

Mensagem por Thiago_o_programador Qua 26 Set 2012, 17:23

É, realmente, valeu cara, tinha esquecido isso.
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 : [Tutorial] FPS + Sistema de Gravidade + Escada 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

[Tutorial] FPS + Sistema de Gravidade + Escada Empty Re: [Tutorial] FPS + Sistema de Gravidade + Escada

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