Aula 8 - Matar, matar e matar

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

Qualidade Aula 8 - Matar, matar e matar

Mensagem por reddragon em Qua 18 Fev 2009, 18:41

Galera, nesta aula faremos nosso primeiro inimigo para que nosso jogo não fique sem graça. Aproveitaremos já os scripts de movimentação feitos s aula passada então se você não os fez, por favor, faça agora porque iremos precisar.

Planejamento:

1º inimigo andar de um lado para o outro aleatoriamente.

2º quando bater nele ele explodira.

Primeiro nosso sprite:

Nomeio de spr_inimigo_direita

seu tamanho sera de 40 x 56
Se você não entendeu clique aqui.

Agora duplique ele e clique em Edit sprite e na aba transform clique no item Mirror horizontal. O que fizemos? Duplicamos o sprite e o invertemos na horizontal. Nomeio agora de spr_inimigo_esquerda.

Esse é um bom truque para os sprites porque desse jeito não precisamos desenhar pra todos os lados só desenhando para um o outro é só dar o flip horizontal.

Vamos pensar um pouco!

Agora iremos montar uma IA para nosso inimigo, mas muitos já perguntarão: como se faz a IA de tal jogo. Como fazer para o inimigo andar de tal jeito...

Basicamente não tem segredo se você souber fazer o personagem andar você fazer seu inimigo andar. Eu fiz certo jogo uma vês chamado guerra 100 noção e criei um sistemas de armas avançado com pistolas refles e até um lança museu e pensei como fazer a inteligência artificial de meu jogo foi quando me veio uma idéia muito loca eu simplesmente peguei o player original e retirei o script de movimentação e coloquei mas um no lugar um script de campo de visão e meus inimigos começarão a me atacar como loucos ficou muito bom.

Mas para nosso jogo não iremos precisar de tanto só vamos fazer o inimigo andar de um lado para o outro e reagir a pancada dada nele e ele não fará o mesmo com a gente. Considerado a analise a cima, podemos definir então que iremos precisar das seguintes vars:

Código:
//vars de orientação
direita = true
andando = false

//vars de inteligência
alarm[0] = 30 + floor(random(60))
qual_movimento = 0

O que seria esse floor e o random? Random é um comando que gera um numero aleatório de 0 a até o numero colocado entro os parênteses mas ele gera esse numero com 2 cassas decimais por isso do Floor ele é um comando de arredondamento no casso ele arredonda para baixo. Mais explicações sobre o assunto e um exemplo do uso no tópico:

http://www.gamemakerbrasil.com/perguntas-respostas-f8/random-t65.htm?

Bom crie nosso obj_inimigo e nele coloque as vars a cima no create de nosso obj e também crie um evento alarm0 e não se esqusa de adicionar no create:

Código:
image_speed = 0.2

E nele coloque o seguinte script no evento alarm0:

Código:
qual_movimento = floor(random(3.99))

switch (qual_movimento){

case(0):
direita = true
andando = false
hspeed = 0
break;

case(1):
direita = false
andando = false
hspeed = 0
break;

case(2):
direita = true
andando = false
hspeed = 2
break;

case(3):
direita = false
andando = false
hspeed = -2
break;

}
alarm[0] = 15 + floor(random(30))

Como agora que temos algumas situações e temos que fazer modificações em cada uma delas separadamente podemos usar a case. Esse comando lê a var colocada e a partir de seu valor executa uma case.

Ficaria a mesma coisa se o script fosse feito assim.

Código:
qual_movimento = floor(random(3.99))

If qual_movimento = 0{
direita = true
andando = false
hspeed = 0}

if qual_movimento = 1{
direita = false
andando = false
hspeed = 0}

if qual_movimento = 2{
direita = true
andando = false
hspeed = 2}

if qual_movimento = 3{
direita = false
andando = false
hspeed = -2}

alarm[0] = 15 + floor(random(30))

Mais qual dos dois eu devo usar? Eu recomendo o primeiro porque ele só faz 1 identificação em vês de 4, agilizando seu processamento.

Agora criamos nosso script de troca de sprite para nosso mostro, crie o evento step e coloque um execute code.

Ficará assim:

Código:
if direita = true{
    sprite_index = spr_inimigo_direita
}else{
    sprite_index = spr_inimigo_esquerda
}

if andando = false{
    image_index = 0
}

Nosso inimigo já anda aleatoriamente e também troca o sprite junto, ta faltando o que? O inimigo andar no chão igual ao play.

Agora irei ser um pouco chato, mas é só para propor o desafio. Montem o script de gravidade é simples imitem o do player só tocando o nome do obj a quem o script referisse e também lembre se do evento colide com o chão.

Na aula 6 eu falei um pouco sobre efeitos mas agora estamos em uma situação parecida mas só queremos que o efeito se realize quando o play estiver atacando então devemos fazer o script desse jeito no obj_inimigo.

Collision / obj_player

Código:
if obj_player.atacando = true{
effect_create_above(ef_explosion,x,y,0,c_red)
instance_destroy()}

Na aula 3 eu falei que as vars locais para ser checadas em outro obj seria necessário índex essa índex é na verdade um número e esse número representa os objs que existe em seu jogo. No script a cima quando eu testo [color:31cd=800000]obj_player.atacando eu estou testando a var atacando do obj_player mas estou fazenda isso dentro do obj inimigo por isso que devo fazer dessa maneira.

Agora para ficar um pouco mais divertido vamos colocar um monte de inimigos em nosso jogo, mas acho que a tela será pequena para isso então vamos aumentar nosso campo para isso e só seguir os passos a baixo.



O que foi feito?

Foi feito duas coisas foi aumentado o campo na primeira parte que tinha uma largura de 640px para 3200px (px = pixels) e depois foi ordenada a existência de uma view.

View é a sua tela a área de visualização de seu jogo. Tivemos de fase la porque sem ela nosso jogo iria ficar muito maior que a tela de nossos computadores, o meu é de 17 polegadas e minha resolução esta em 1024 x 768 para poder ver toda a tela de nosso jogo seria necessário mais 3 monitores ao lado do meu.

Para você poder usar as views você tem de começar marcando as opções Enable the use of Views e Visible when room starts. Enable the use of Views autoriza o uso de views e Visible when room starts deixa a view visível logo quando o jogo se inicia.

Ma área View in room você define 2 coisas em X, Y você define a posição inicial da view orientada pelo ponto direito superior da view, e em W, H você define o tamanho da view W para horizontal H para vertical.

Port on screen não sei bem como funciona.

Já na aba object folloing você define qual obj a tela ira seguir Hbor, Vbor define a distancia que a tela ira começar a andar quando você começar a chegar perto da borda. Hsp, Vsp define a velocidade que a tela ira andar para te seguir se estiver em -1 ela te segue esatamente onde você estiver.

Dica se você quiser que seu personagem fique no meio da tela programe em Hbor e Vbor a metade do tamanho de sua tela.

Galera como prometido explique como montar um inimigo e como fazer como que ele explode dando atacado, mas como isso é um jogo RPG vamos fazer com que ele tenha uma vida.

tutorial feito por RedDragon


Última edição por reddragon em Sex 27 Mar 2009, 21:44, editado 2 vez(es)

reddragon

Número de Mensagens : 267
Idade : 27
Data de inscrição : 19/03/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por Dark-Yes em Dom 01 Mar 2009, 16:58

Então Eu programei Tudo Certinho mais tipo:

Quando se ta "JOGANDO" os Inimigos se movem normal Mas a sprite só passa a 1º sub-imagem e ai para nele
Resumindo:
Se o inimigo vai para direita :
ele se meche normal mas a sprite para na 1º sub-Imagem

e vice-versa....

========================================================================

EDIT


if direita = true{
sprite_index = spr_inimigo_direita
}else{
sprite_index = spr_inimigo_esquerda
}

if andando = false{
image_index = 0
}

Deixei ele Assim e o Problema Acabou lol! :

if direita = true{
sprite_index = spr_inimigo_direita
}else{
sprite_index = spr_inimigo_esquerda
}

Dark-Yes

Número de Mensagens : 265
Data de inscrição : 27/12/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por reddragon em Dom 01 Mar 2009, 21:22

Dark-Yes valeu por sua opinião mas usando seu jeito o inimigo continua andando se estiver parado mas se vc quiser fazer desse jeito cara o jogo é seu

reddragon

Número de Mensagens : 267
Idade : 27
Data de inscrição : 19/03/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por lee sensei em Sex 13 Mar 2009, 11:19

naum concigo fazer a gravidade do inimigo, sempre q eu troco o o nome do player pelo do inimigo da erro scratch

lee sensei

Número de Mensagens : 10
Data de inscrição : 09/03/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por lee sensei em Sex 13 Mar 2009, 11:24

consegui fazer d outro jeito, coloquei sem gravidade quase no chão assim dá uma impressão que estão voando quase tocando no chão What a Face

lee sensei

Número de Mensagens : 10
Data de inscrição : 09/03/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por Anderson3d em Sex 27 Mar 2009, 13:40

gostei do comando random, muito útil mesmo cara para criar um jogo de luta ou um boss!!!!

Anderson3d

Ranking : Nota A
Número de Mensagens : 1479
Idade : 33
Data de inscrição : 15/02/2009
Notas recebidas : A - A
Reputação : 9
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

http://www.indiegamebr.com

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por rafel_game em Ter 19 Maio 2009, 19:05

to com problema toda vez que tento jogar aparesse


of Step Event
for object object4:

Error in code at line 1:
gravidade(object4,0.75,pe_no_chao)

at position 24: Unknown variable pe_no_chao

___________________________________________

rafel_game

Número de Mensagens : 10
Idade : 19
Data de inscrição : 19/05/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por rafel_game em Dom 07 Jun 2009, 20:24

ja ressovi e so adicionar o vars
pe_no_chao = false

rafel_game

Número de Mensagens : 10
Idade : 19
Data de inscrição : 19/05/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por make em Ter 24 Nov 2009, 11:14

ocorre esse ero comigo alguem pode ajudar?

___________________________________________
ERROR in
action number 1
of Step Event
for object object4:

Error in code at line 2:
sprite_index = spr_inimigo_direita

at position 17: Unknown variable spr_inimigo_direita

make

Número de Mensagens : 7
Idade : 20
Data de inscrição : 23/11/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por sonicfan1 em Ter 24 Nov 2009, 11:47

make você nomeou o sprite inimigo como spr_inimigo_direita?
porque na parte que tem:
sprite_index = spr_inimigo_direita

significa que o inimigo vai mudar para o sprite desejado então lá onde tem:
spr_inimigo_direita você apaga e bota o nome do sprite do inimigo pra direita
porque como não tem sprites com esse nome o gm não vai conhecer
e vai dar erro

sonicfan1

Número de Mensagens : 138
Data de inscrição : 26/07/2009
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por vitinhow013 em Dom 17 Jan 2010, 14:00

tem outra maneira legal de destruir o inimigo que não precise de de GM PRO ?
tipo, sem ser explodir
ex : já que ele é um esqueleto, fazer um script de quando a bonequinha atacar ele trocasse pra um sprite que ele desmonta e fica os ossos dele no chão e dpois de uns 3 segundos os ossos somem ( exemplo )

desse jeito sabe ? um que dê pra fazer na versão lite

vitinhow013

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

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por _riqueikki_ em Qui 21 Jan 2010, 12:24

gostei do comando random,foi muito bom para criar animção dos chars e boss ainda sim para um jogo de luta

_riqueikki_

Número de Mensagens : 79
Idade : 21
Data de inscrição : 11/01/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://www.essb-nero.blogspot.com

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por Caçador em Ter 16 Mar 2010, 18:46

To com um problema, o esqueleto ñ quer ir pro chão! Fica flutuano la. Ta andano normal, consigo destruiu ele, mais ele ñ sai do ar. Shocked

No q eu errei? confused

EDIT

Ñ precisa mais gente, descobri o erro. Era só mudar o nome player por inimigo. xD

Caçador

Número de Mensagens : 5
Idade : 25
Data de inscrição : 10/03/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por luishadow em Seg 19 Abr 2010, 09:29

Boas pessoal.
(Antes que reclamem) Eu sei que estou a reviver o tópico mas eu só cria fazer uma correcção pequena no código que o RD postou sobre a mudança de sprite do inimigo:

reddragon escreveu:
Código:
qual_movimento = floor(random(3.99))

switch (qual_movimento){

case(0):
direita = true
andando = false
hspeed = 0
break;

case(1):
direita = false
andando = false
hspeed = 0
break;

case(2):
direita = true
andando = false
hspeed = 2
break;

case(3):
direita = false
andando = false
hspeed = -2
break;

}
alarm[0] = 15 + floor(random(30))

No case 2 e 3 a var andando é igual a = true, pois se for false o inimigo andara mas a sprite nunca se mecherá.

ficando o codigo assim:
Código:
qual_movimento = floor(random(3.99))

switch (qual_movimento){

case(0):
direita = true
andando = false
hspeed = 0
break;

case(1):
direita = false
andando = false
hspeed = 0
break;

case(2):
direita = true
andando = true
hspeed = 2
break;

case(3):
direita = false
andando = true
hspeed = -2
break;

}
alarm[0] = 15 + floor(random(30))

De resto ñ tenho mais nada a dizer, a ñ ser, que pelo que vi até agora tens feito um óptimo trabalho, sou novo no GM mas graças ao que vi dos teus tutos já aprendi bastante.
Continua com o bom trabalho e empenho.E que nunca percas o gosto pelo que tens feito.

Obrigado e bons jogos Very Happy

luishadow

Número de Mensagens : 16
Data de inscrição : 15/04/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por Slipknot em Dom 15 Ago 2010, 18:15

Ta dando erro no meu inimigo toda hora
1° ele só anda pra direita quando vai andar pra esquerda ele nao troca de sprite
2° da esse erro quando começa o jogo ERROR in
action number 2
of Step Event
for object obj_inimigo:

Error in code at line 1:
gravidade(obj_inimigo,0.75,pe_no_chao)
^
at position 28: Unknown variable pe_no_chao

Slipknot

Ranking : Sem avaliações
Número de Mensagens : 300
Idade : 18
Data de inscrição : 02/08/2010
Reputação : -2
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.gamemakerbrasil.com/galeria-de-projetos-f5/um-jogo-qu

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por Assassino em Seg 30 Ago 2010, 21:20

Este seu Tuto é óptimo para fazer jogos de Plataforma em 2d. Very Happy

Assassino

Número de Mensagens : 390
Idade : 20
Data de inscrição : 13/08/2010
Reputação : 6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://rockstarfamilies.blogspot.com/

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por luuizinho.oliveira em Qua 16 Mar 2011, 09:32

sobre aquele problema da mudança de sprites do inimigo eu fiz esse codigo:
Código:
if hspeed>0
{
sprite_index=spr_inimigo_direita

}else{
if hspeed<0{
sprite_index=spr_inimigo_esquerda
}else{
parado=true
{image_index=0}
}}


Qualquer erro me avisem ! ;)

luuizinho.oliveira

Número de Mensagens : 12
Idade : 19
Data de inscrição : 18/12/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por lfonseca em Qua 25 Maio 2011, 17:17

A quem puder me ajudar
Porque o sprite do inimigo vem com todas as imagens paradas, tipo não está como subimagens

lfonseca

Número de Mensagens : 5
Data de inscrição : 23/05/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por Stick-Man em Seg 05 Set 2011, 13:38


___________________________________________
ERROR in
action number 1
of Step Event
for object obj_inimigo:

Error in code at line 1:
if direita = true{
^
at position 4: Unknown variable direita[b]



sempre da esse erro =x

Stick-Man

Número de Mensagens : 3
Data de inscrição : 04/09/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por Luca$ em Seg 05 Set 2011, 14:02

Stickman,você no evento Create,declarou essa variavel?
Que seria assim:
Código:
direita[b]=valor

Off:
Spoiler:
Vi que você é novo aqui no forum,você ja leu as regras?
Podia lê-las:
Entre neste link e veja os tópicos nele.

Regras

Luca$

Ranking : Nota D
Número de Mensagens : 582
Data de inscrição : 10/10/2010
Notas recebidas : D-C
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

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por onyxx em Qui 05 Set 2013, 10:49

ou cara eu nao sabia mer em nada no gm e entao vi seus tuto e tou criando um rpg avançado:lol: 

onyxx

Número de Mensagens : 1
Data de inscrição : 30/08/2013
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Qualidade Re: Aula 8 - Matar, matar e matar

Mensagem por Conteúdo patrocinado Hoje à(s) 07:39


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