[GEN-TIR] [Tutorial] Fazendo um jogo de tiro // vale a pena dar uma olhada.
Enviado: Qui Abr 28, 2016 11:42 pm
Introdução
E ai blz galera ? Bom eu tava sem nada pra faze e resolvi faze um tuto, ai veio a ideia de fazer um sobre jogos de tiro top view. Esse ensina mais a parte de fazer a arma mesmo, então se tiver interesado le ai, é no minimo interesante.
Fazendo sua arma atirar e mirar
Vamo começa então né, bom... fassa uma sprite de uma pessoa com uma arma,vista top view, centralizada no meio do player.
Exemplo tipo essa:
Agora crie o obj_player com a sprite dele é claro.
Em seu create coloque:
Código: Selecionar todos
atirar=true
cartucho=10
cartuchoo=10
municao=50
forca=35
veloci=14
velocii=15
recarrega=15
mira=15
arma=1
a=0
carregando=false
Alguma duvida ? Então vamo láatirar=true // essa var é a que define se pode atirar ou não, para não fica aquela rajada de tiros que nunca para
cartucho // esse é o tanto de tiro que tem na arma
cartuchoo // esse é o maximo de tiros que cabe na arma
municao // é o tanto de tiros que ainda pode usar
forca // o tando de vida que o tiro vai tirar do inimigo
veloci // velocidade do tiro
velocii // velocidade entre um tiro e o outro, EX: de uma pistola é 15, de uma metralha é 4
recarrega // tempo que leva para recarregar
mira // é o tanto de chance que tem de errar o tiro. O de uma sniper por exemplo é 0
arma // essa é a var que define com qual arma ele está tipo assim ARMA 1 = pistola, ARMA 2= AK47
a // esse é o valor que tem de balas sem nada, vc vai entender depois.
carregando=false // verifica se ta carregando.
Agora no step coloque:
Código: Selecionar todos
direction=point_direction(x,y,mouse_x,mouse_y)
image_angle=direction
Agora no mesmo codigo:
Código: Selecionar todos
if keyboard_check(vk_left) and place_free(x-4,y)
x-=4
if keyboard_check(vk_right) and place_free(x+4,y)
x+=4
if keyboard_check(vk_up) and place_free(x,y-4)
y-=4
if keyboard_check(vk_down) and place_free(x,y+4)
y+=4
Pronto agora o nosso player já mira e anda. Mas e os tiros ?
Antes de tudo crie um obj_tiro com uma sprite de tiro. Nele coloque assim no create:
Código: Selecionar todos
forca=0
Código: Selecionar todos
other.vida-=forca
instance_destroy()
Agora no step:
Código: Selecionar todos
image_angle=direction
Agore vamos voltar ao step do player que deve estar assim:
Código: Selecionar todos
direction=point_direction(x,y,mouse_x,mouse_y)
image_angle=direction
//
if keyboard_check(vk_left) and place_free(x-4,y)
x-=4
if keyboard_check(vk_right) and place_free(x+4,y)
x+=4
if keyboard_check(vk_up) and place_free(x,y-4)
y-=4
if keyboard_check(vk_down) and place_free(x,y+4)
y+=4
Código: Selecionar todos
if mouse_check_button_pressed(mb_left) and atirar=true and cartucho>=1 and arma=1 and carregando=false
{
cartucho-=1
atirar=false
alarm[0]=velocii
tiro=instance_create(x,y,obj_tiro)
tiro.speed=veloci
tiro.forca=forca
tiro.direction=direction
tiro.direction+=random_range(-mira,mira)
}
Caso o mouse sejá precionado e possa atirar e tenha bala, e a arma seja 1 e não estaja carregando:
perde uma bala
não pode atirar
ativa o alarm 0 de acordo com o tempo entre os tiros da arma
cria o tiro
tiro fica na velocidade dele
tiro fica com a força dele
tiro vai para a direção da direção do player (o mouse)
tiro aumenta a direção entre a mira negativa e a mira positiva, fazendo assim com que de aquela erradinha.
OBS1: Não esqueça o depth do player tem que ser menor que o da bala.
OBS2: Não esquece de marcar "Interpolate colors between pixels" lá em "Global Game Settings"
Seu codigo do step do player deve estar assim:
Código: Selecionar todos
direction=point_direction(x,y,mouse_x,mouse_y)
image_angle=direction
//
if keyboard_check(vk_left) and place_free(x-4,y)
x-=4
if keyboard_check(vk_right) and place_free(x+4,y)
x+=4
if keyboard_check(vk_up) and place_free(x,y-4)
y-=4
if keyboard_check(vk_down) and place_free(x,y+4)
y+=4
//
if mouse_check_button_pressed(mb_left) and atirar=true and cartucho>=1 and arma=1 and carregando=false
{
cartucho-=1
atirar=false
alarm[0]=velocii
tiro=instance_create(x,y,obj_tiro)
tiro.speed=veloci
tiro.forca=forca
tiro.direction=direction
tiro.direction+=random_range(-mira,mira)
}
Código: Selecionar todos
atirar=true
Lembra daquele varsinha chamada "a" ? Então vamu usa ela agora, coloca assim no step:
Código: Selecionar todos
a = cartuchoo - cartucho
Isso é, "a" é o tanto de balas que cabe na arma.10 - balas da arma = a
Ai vc coloca mais assim:
Código: Selecionar todos
if keyboard_check_pressed(vk_space) and carregando=false
{
alarm[1]=recarrega
carregando=true
}
Agora seu step deve estar assim:
Código: Selecionar todos
direction=point_direction(x,y,mouse_x,mouse_y)
image_angle=direction
//
if keyboard_check(vk_left) and place_free(x-4,y)
x-=4
if keyboard_check(vk_right) and place_free(x+4,y)
x+=4
if keyboard_check(vk_up) and place_free(x,y-4)
y-=4
if keyboard_check(vk_down) and place_free(x,y+4)
y+=4
//
if mouse_check_button_pressed(mb_left) and atirar=true and cartucho>=1 and arma=1 and carregando=false
{
cartucho-=1
atirar=false
alarm[0]=velocii
tiro=instance_create(x,y,obj_tiro)
tiro.speed=veloci
tiro.forca=forca
tiro.direction=direction
tiro.direction+=random_range(-mira,mira)
}
//
a = cartuchoo - cartucho
if keyboard_check_pressed(vk_space) and carregando=false
{
alarm[1]=recarrega
carregando=true
}
Código: Selecionar todos
municao -= a
cartucho +=a
carregando=false
tira o valor "a" da municao e aumenta o valor "a" do cartucho. e diz que não ta mais carregando
Pronto agora ele carrega e tudo mais. Mais falta mostrar as balas. Crie um obj_controle e em seu draw coloque:
Código: Selecionar todos
draw_text(0,0,"Balas: " + string(obj_player.cartucho) + " / " + string(obj_player.municao))
Então só o ultimo recadinho pessoal.
Eu demorei tempo para fazer esse tuto, e posso ter errado em alguma coisa, então se ver algo errado avisa ae que eu arrumo, eu fui fanzendo e testando, deu tudo certo aqui. Proxima aula vou ensinar a usar aquele var "arma"
FLW COMENTA AE.