[TUTORIAL] Fazendo um jogo de Plataforma em 1 script

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

[TUTORIAL] Fazendo um jogo de Plataforma em 1 script

Mensagem por Vikintor em Dom 13 Fev 2011, 15:04

Se lembram da minha antiga engine ? essa: http://gmbr.forumeiros.com/t7815-plataforma-em-um-script-iniciantes . Eu não expliquei quase nada sobre aquela engine.
Por isso resolvi trazer um tutorial para que vocês possam criar sua própria engine de plataforma e aprender mais sobre gml na prática.

PLATAFORMA EM 1 SCRIPT


O que é uma engine:
Engine é o motor que fara seu jogo funcionar,numa engine de plataforma temos o
funcionamento do personagem principal e sua interação com blocos e inimigos,etc.


Esse turorial é destinado a?
Esse tutorial é destinado a usuários de Gm8 PRO.


Descrição do tutorial:
Esse tutorial irá ensinar a fazer uma base para jogos de plataforma utilizando apenas um script .
Mas é necessario seguir as instruções .

Você esta livre para usar esse script inclusive
para jogos comerciais sem pressisar dar crédito.Essa é uma engine básica
e traz alguns bonus alem da engine de plataforma.


Oquê é traz essa engine:
-Engine de plataforma
-Suporte a Joystick (não foi testado)
-Barra de HP e marcador de vidas
-Plataformas
-Views altomáticos que seguem o player
-Pause
-Efeito de rastro no heroi


Como usar:
Crie um sprite com o nome de 'player_walk' onde deve estar o desenho do heroi virado para a
direita.
crie um objeto com o sprite que quiser e nomeie como 'block' mas
ignore as aspas.Esse ultimo sera os pisos e paredes.


Importante:
Desmarque o pressision check nas propriedades do sprite do heroi e da caixa que servira como piso
e paredes e marque full image,
ou edite o tamanho da caixa de colisão para a sua preferencia.
Crie um objeto com um nome qualquer e copie e cole o script dentro da ação CREATE do objeto.
Para faser as views da room basta apenas marcar 'Enable the use of views' e 'Visible when room
starts' em todas rooms em suas propriedades.


Resumindo
Para que o script funcione você vai precisar primeiro de...
1. 1 Sprite com o nome de player_walk Onde deve ter o heroi virado para a direita e já com
sua animação andando.
2. 1 Sprite com o nome de player_jump Onde deve ter o heroi dando um salto para a direita
3. 1 Sprite com qualquer nome .Esse servira como blocos(Paredes e chão)
4. 1 Objeto chamado block. Pode ser sólido ou não.
5. 1 Room com as opções Enable the use of views e Visible when room starts ativadas na aba
View nas propriedades da room. Não precisa mexer em mais nada.O script va fazer o resto.


Como criar mais ações para o heroi
O objeto onde você insere esse código não é o heroi.
O heroi é um outro objeto que é criado quando a room vai se iniciar (Ou seja global.player_1).
Para adicionar mais eventos e comandos ao heroi pelo modo convencional siga essas etapas.
1. Crie um novo objeto e coloque o nome que quiser.
2. Agora no script retire as // da segunda linha e coloque o nome do objeto criado no lugar do 'seu
objeto'. Mas lembresse!O objeto não pode ter esse script senão o jogo vai travar.
Depois todos eventos criados para o outro objeto valerão para esse tambem.
Como mudar os controles
Para mudar os controles vá até a linha 18 do script onde temos isso:
    //Controles
    global.andar_para_esquerda = vk_left
    global.andar_para_direita = vk_right
    global.saltar = vk_up
    global.botao_de_pause = vk_enter

Agora é só trocar os valores vk_... por qual botão você quiser.

vk_left Seta para esquerda

vk_right Seta para direita
vk_up Seta para cima
vk_down Seta para baixo
vk_control Tecla Ctrl
vk_shift Tecla Shift
ord('X') Tecla X.Troque pela letra que quiser.


Como modificar o script
Para mudar os parâmetros do herói é muito simples. Aprenda oquê cada linha faz
global.sprite_do_heroi = player_walk Nome do sprite do heroi virado para a direita.
global.nome_dos_blocos = block Nome do objeto que servira de blocos e paredes.
global.sprite_do_heroi_pulando = player_jump Nome do sprite do heroi pulando
global.Frame_do_heroi_parado = 0 Frame do heroi quando se recuperar de um salto
global.Frame_do_heroi_pulando = 3 Frame do salto. Cloque -1 para com movimento
global.velocidade_ao_andar = 6 Velocidade do herói ao andar
global.gravidade = .5 Gravidade
global.velocidade_maxima_ao_cair = 10 velocidade maxima para o heroi cair
global.tamanho_do_pulo = 10 tamanho do salto do heroi
global.sprite_control = 0 Nunca mude essa variavel
global.tamanho_x_da_tela = 640 tamanho da x tela (se mudar o script irá adequar)
global.tamanho_y_da_tela = 480 tamanho da y tela
global.velocidade_da_tela = -1 velocidade do view ao seguir o player.
global.blocos_visiveis = true se as paredes e pisos devem ser visíveis


Como criar mais blocos
para criar mais blocos(paredes e pisos) é super simples.
Crie um objeto com o nome e sprite que quiser e nas opções desse objeto selecione Parent. Agora
escolha o objeto que é o bloco atual.


Script
Espero que eu tenha ajudado. Agora vamos para o único script necessário.Cole ele no evento Create
de qualquer objeto desejado e coloque esse mesmo objeto na room no local onde você deseja que o
heroi surja.
Código:

global.player_1 = object_add() // Nunca modifique essa linha
//object_set_parent(global.player_1,seu objeto)
global.sprite_do_heroi = player_walk //Nome do sprite do heroi.Pode ser alterado
global.nome_dos_blocos = block //Nome dos blocos e pisos.Pode ser alterado
global.sprite_do_heroi_pulando = player_jump//global.sprite_do_heroi //Mude para o de sua
preferencia.
global.Frame_do_heroi_parado = 0
global.Frame_do_heroi_pulando = 3
global.velocidade_ao_andar = 6
global.gravidade = .5
global.velocidade_maxima_ao_cair = 10
global.tamanho_do_pulo = 10
global.sprite_control = 0 //Não modifique essa
global.tamanho_x_da_tela = 640
global.tamanho_y_da_tela = 480
global.velocidade_da_tela = -1
global.blocos_visiveis = true //mostrar paredes e pisos
//Controles
global.andar_para_esquerda = vk_left
global.andar_para_direita = vk_right
global.saltar = vk_up
global.botao_de_pause = vk_enter
//BARRA DE HP
global.mostrar_HP = true //Mostra saude do heroi
global.barra_hp_posicao_x = 3
global.barra_hp_posicao_y = 1
//VIDAS
global.vidas = 'VIDAS' //Deve aparecer no marcador de vidas
global.mostrar_VIDAS = true //Mostra as vidas do heroi
global.vidas_posicao_x = 500
global.vidas_posicao_y = 1
//EFEITOS ESPECIAIS
global.mostrar_rastro = true //mostra or rastro do personagem
global.transparencia_do_rastro = 0.2
global.cor_do_rastro = c_red
global.duracao_do_rastro = 19
global.taxa_de_aparicao_do_rastro = 4 //tempo para o rastro surgir.Quanto maior menos rastro terá.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
object_set_sprite(global.player_1,global.sprite_do_heroi)
//Eventos do heroi//
//--STEP--
object_event_add(global.player_1,ev_create,0,'alarm[0] = global.taxa_de_aparicao_do_rastro')
object_event_add(global.player_1,ev_step,0,'
if keyboard_check_pressed(global.botao_de_pause)
{
message_alpha(0.7)
message_text_font("arial",12,c_white,1)
message_button_font("arial",12,c_green,1)
show_message(">>>>>>> Jogo em Pausa <<<<<<<")
} if place_free(x,y+1)
{
gravity=global.gravidade
image_index= global.Frame_do_heroi_pulando
if global.sprite_control = 1
{s
prite_index= global.sprite_do_heroi_pulando
global.sprite_control = 0
}} else
{ if global.sprite_control =
0
{i
mage_index = 0
sprite_index= global.sprite_do_heroi
global.sprite_control = 1
}
gravity=0;
} if vspeed >
global.velocidade_maxima_ao_cair then vspeed=global.velocidade_maxima_ao_cair;
if(keyboard_check(global.andar_para_esquerda)=0 &&
keyboard_check(global.andar_para_direita)=0)image_speed=0 and
image_index=global.Frame_do_heroi_parado;
else image_speed=0.2;
if keyboard_check(global.saltar)
{ if place_free(x,y+1)= false then vspeed=-global.tamanho_do_pulo;
} if keyboard_check(global.andar_para_esquerda)
{ if place_free(x-4,y)
{i
mage_xscale = -1;
x-=global.velocidade_ao_andar;
}} if keyboard_check(global.andar_para_direita)
{ if place_free(x+4,y)
{i
mage_xscale = +1;
x+=global.velocidade_ao_andar;
}}'
)
//--JOYSTICK--
object_event_add(global.player_1,ev_step,0,'
if joystick_exists(1)
{ if joystick_direction(1)=vk_numpad4
{ if place_free(x-3,y)
{i
mage_xscale = -1;
x-=global.velocidade_ao_andar;
}} if joystick_direction(1)=vk_numpad6
{ if place_free(x+3,y)
{i
mage_xscale = +1;
x+=global.velocidade_ao_andar;
}} if joystick_direction(1)=vk_numpad8
{ if place_free(x,y+1)= false then vspeed=-global.tamanho_do_pulo;
} if joystick_check_button(1,1) or joystick_check_button(1,2) or joystick_check_button(1,3)
{ if place_free(x,y+1)= false then vspeed=-global.tamanho_do_pulo;
}}'
)
//--COLISÃO--
object_event_add(global.player_1,ev_collision,global.nome_dos_blocos,'
move_contact_solid(direction,10);
vspeed=0;
')
//Eventos dos blocos//
object_event_add(global.nome_dos_blocos,ev_create,0,'
visible = global.blocos_visiveis
solid = true
')
//DRAW
//Apartir daqui serão criados os eventos para mostrar os pontos e vidas
global.draw_object = object_add()
object_event_add(global.draw_object,ev_draw,0,'
depth = 1
if global.mostrar_HP = true
{
draw_set_color(c_black)
draw_text(view_xview+global.barra_hp_posicao_x + 1,view_yview+global.barra_hp_posicao_y +
1,"HP")
draw_set_color(c_white)
draw_text(view_xview+global.barra_hp_posicao_x,view_yview+global.barra_hp_posicao_x,"HP")
draw_healthbar(view_xview+global.barra_hp_posicao_x+30,view_yview+global.barra_hp_posicao
_y+5,view_xview+200,view_yview+global.barra_hp_posicao_y
+10,200,c_black,c_red,c_green,0,true,true)
} if global.mostrar_VIDAS =
true
{
draw_set_color(c_black)
draw_text(view_xview+ global.vidas_posicao_x +1,view_yview+ global.vidas_posicao_y
+1,global.vidas)
draw_set_color(c_gray)
draw_text(view_xview+ global.vidas_posicao_x ,view_yview+
global.vidas_posicao_y,global.vidas)
draw_set_color(c_black)
draw_text(view_xview+ global.vidas_posicao_x +64,view_yview+ global.vidas_posicao_y
+1,lives)
draw_set_color(c_red)
draw_text(view_xview+ global.vidas_posicao_x +64,view_yview+ global.vidas_posicao_y,lives)
draw_set_color(c_white)
}
')
global.draw_restroobject = object_add()
object_event_add(global.draw_restroobject,ev_create,0,'
x = global.player_1.x
y = global.player_1.y
alarm[0] = global.duracao_do_rastro
depth = 1
posex_scale = global.player_1.image_xscale
posey_scale = global.player_1.image_yscale
posepose = global.player_1.image_index
')
object_event_add(global.draw_restroobject,ev_draw,0,'
if global.mostrar_rastro = true
{
draw_sprite_ext(global.sprite_do_heroi,posepose,x,y,posex_scale,posey_scale,0,global.cor_do_rastr
o,global.transparencia_do_rastro)
}'
)
object_event_add(global.draw_restroobject,ev_alarm,0,'
instance_destroy()
')
object_event_add(global.player_1,ev_alarm,0,'
instance_create(x,y,global.draw_restroobject);
alarm[0] = global.taxa_de_aparicao_do_rastro;
')
//CONFIGURAR TELA
view_visible[0] = true
view_enabled[0] = true
view_xview[0] = 0
view_yview[0] = 0
view_wview[0] = global.tamanho_x_da_tela
view_hview[0] = global.tamanho_y_da_tela
view_xport[0] = 0
view_yport[0] = 0
view_wport[0] = global.tamanho_x_da_tela
view_hport[0] = global.tamanho_y_da_tela
view_angle[0] = 0
view_hborder[0] = global.tamanho_x_da_tela /2
view_vborder[0] = global.tamanho_y_da_tela /2
view_hspeed[0] = global.velocidade_da_tela
view_vspeed[0] = global.velocidade_da_tela
view_object[0] = global.player_1
window_set_size(global.tamanho_x_da_tela,global.tamanho_y_da_tela)
window_center()
//INICIA A FASE//
instance_create(x,y,global.player_1)
instance_create(x,y,global.draw_object)

Vocês podem ver o script aqui também : http://pastebay.com/114532
Se quiserem uma demostração da engine em funcionamento sigam Link e no final da página clique para baixar.
http://vikintor.wordpress.com/2011/02/13/tutorial-plataforma-em-1-script/

Vikintor

Ranking : Nota B
Número de Mensagens : 901
Idade : 26
Data de inscrição : 28/03/2010
Notas recebidas : B
Reputação : 17
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://vikintor.tumblr.com/

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Fazendo um jogo de Plataforma em 1 script

Mensagem por MemBru em Dom 13 Fev 2011, 15:37

Cara, bem legal, gostei! Como sempre, sempre te vejo respondendo, ajudando o pessoal, muito bom!

MemBru

Número de Mensagens : 74
Idade : 18
Data de inscrição : 05/02/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Fazendo um jogo de Plataforma em 1 script

Mensagem por Vikintor em Dom 13 Fev 2011, 17:01

MemBru escreveu:Cara, bem legal, gostei! Como sempre, sempre te vejo respondendo, ajudando o pessoal, muito bom!
Obrigado por comentar.
E se sinta a vontade se quiser usar o script.
Happy

Vikintor

Ranking : Nota B
Número de Mensagens : 901
Idade : 26
Data de inscrição : 28/03/2010
Notas recebidas : B
Reputação : 17
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://vikintor.tumblr.com/

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Fazendo um jogo de Plataforma em 1 script

Mensagem por Andrei Christopher em Seg 14 Fev 2011, 16:59

eu num vi pelo visto deve tar xuxu beleza kkk ae Victor_follador como faz pra bota a engine na net

Andrei Christopher

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

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Fazendo um jogo de Plataforma em 1 script

Mensagem por Vikintor em Seg 14 Fev 2011, 17:21

Andrei Christopher escreveu:eu num vi pelo visto deve tar xuxu beleza kkk ae Victor_follador como faz pra bota a engine na net
Obrigado por comentar . Você fala de como a colocar para download certo ? Se for eu uso o 4shared ,simplesmente faço um upload para esse site com a minha conta.
http://www.4shared.com/

Vikintor

Ranking : Nota B
Número de Mensagens : 901
Idade : 26
Data de inscrição : 28/03/2010
Notas recebidas : B
Reputação : 17
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://vikintor.tumblr.com/

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Fazendo um jogo de Plataforma em 1 script

Mensagem por Conteúdo patrocinado Hoje à(s) 05:48


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