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
» player não consegue andar
por 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

» (Resolvido) 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

» (RESOLVIDO) 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


[Tutorial] FPS + Sistema de Gravidade + Escada

2 participantes

Ir para baixo

gravidade - [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:
gravidade - [Tutorial] FPS + Sistema de Gravidade + Escada Metal_dark

Use essa para a câmera e para o obj_up:
gravidade - [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 : gravidade - [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

gravidade - [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 : gravidade - [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

gravidade - [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 : gravidade - [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

gravidade - [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