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


[Resolvido]Movimentação inimigo 360º

3 participantes

Ir para baixo

[Resolvido]Movimentação inimigo 360º Empty [Resolvido]Movimentação inimigo 360º

Mensagem por marcin_w_ Qui 20 Jun 2013, 15:59

Meu Player se movimenta em 8 direções, porém usando sprites diferentes a cada 45º (8 sprites cima, baixo, direita, esquerda e diagonais)

Criei um inimigo que mira sempre no objeto player porém as sprites de todas as direções do inimigo estção em uma só sprite.

1 - Preciso que o inimigo use sprites diferentes pra cada uma das 8 direções e não uma das sprites dentro de um arquivo só.

2 - o tiro inimigo segue o obj.player muito diretamente ...preciso que esses tiros se tornem um pouco menos precisos.....

3 - o obj inimigo quando estiver em movimento deverá desviar de obstáculos porém obedecendo as sprites em 8 direções.

Desculpem se não fui claro em algum pedido. Desde já obrigado.
marcin_w_
marcin_w_

Data de inscrição : 25/11/2012
Reputação : 4
Número de Mensagens : 90
Prêmios : [Resolvido]Movimentação inimigo 360º 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

[Resolvido]Movimentação inimigo 360º Empty Re: [Resolvido]Movimentação inimigo 360º

Mensagem por saim Qui 20 Jun 2013, 17:14

1 - Acho que você quer imagens diferentes na mesma sprite.
Código:
image_index := direction / (360 / image_number);
360 / image_number: quantos graus cada imagem deve representar
direction / resultado_acima: redução da divisão (do círculo) em 360 graus pra uma divisão (do círculo) no número de imagens da sprite

2 - Você precisa acrescentar um erro ao ângulo. acrescente essas linhas ao criar o tiro:
Código:
erro := 10; //máximo de erro, em graus
direction += -erro + random(2 * erro); // vai de -erro a +erro

3 - aí, já é mais comlpicado. Pesquise no manual por "motion planning". Deve te dar uma luz. Depois volte a perguntar, com mais detalhes.
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : [Resolvido]Movimentação inimigo 360º Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Resolvido]Movimentação inimigo 360º Empty Re: [Resolvido]Movimentação inimigo 360º

Mensagem por marcin_w_ Qui 20 Jun 2013, 18:57

Obrigado pela ajuda porém acho que me expressei mal
no tópico

1- quero exatamente o contrário....quero poder usar um arquivo de sprite pra cada direção...e nao todos num arquivo soh....

2- queria nao precisar usar o point_direction para que o tiro inimigo acertasse o player.....pq isso faz com que o player nao tenha chance de desviar ...nem correndo....msmo com o random...
marcin_w_
marcin_w_

Data de inscrição : 25/11/2012
Reputação : 4
Número de Mensagens : 90
Prêmios : [Resolvido]Movimentação inimigo 360º 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

[Resolvido]Movimentação inimigo 360º Empty Re: [Resolvido]Movimentação inimigo 360º

Mensagem por saim Sex 21 Jun 2013, 16:25

1 - use um switch
Código:
var sprite_a_usar;
sprite_a_usar := direction / (360 / numero_de_sprites); //numero_de_sprites=8
switch(sprite_a_usar ){
case 0: sprite_index := sprite_zero; break;
case 1: sprite_index := sprite_um; break;
// etc;
}

2 - você vai usar o point_direction AO CRIAR a bala, não no step. Uma vez criada, ela não pode mudar de direção.
Se você definir direction e speed, pode deixar o step em branco.
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : [Resolvido]Movimentação inimigo 360º Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Resolvido]Movimentação inimigo 360º Empty Re: [Resolvido]Movimentação inimigo 360º

Mensagem por marcin_w_ Sex 21 Jun 2013, 21:07

Valeu Saim, a dúvida 2 era algo muito simples e eu sequer pensei nisso, muito obrigado problema resolviso.

decidi que na duvida 1 vou permanecer usando apenas uma sprite com todas as direções

mas no caso a sprite fica pesada....pq faço 360 imagens...uma pra cada grau....nao sei como definir isso usando apenas as 8 sprites necessárias....
marcin_w_
marcin_w_

Data de inscrição : 25/11/2012
Reputação : 4
Número de Mensagens : 90
Prêmios : [Resolvido]Movimentação inimigo 360º 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

[Resolvido]Movimentação inimigo 360º Empty Re: [Resolvido]Movimentação inimigo 360º

Mensagem por marcin_w_ Dom 23 Jun 2013, 14:18

Vou tentar explicar melhor o meu maior problema.

Eu tenho o objEnemy baseado num movimento de rotação 360º.

Porém ele não é uma sprite circular como a maioria dos jogos TDS, a sprite tem 360 imagens (gostaria que fossem só as 8 necessárias) apontando para (direita, esquerda, cima, baixo e diagonais).

O objEnemy aponta para o lado em q o player está.


1º possibilidade - Que me ajudem a criar um objEnemy que tenha sprites independentes para cada um dos 8 lados que aponta.

2º possibilidade - Caso não exista um jeito funcional de criar sprites independentes..como posso usar apenas 8 imagens ao invés das 360 na sprite do inimigo. ....
marcin_w_
marcin_w_

Data de inscrição : 25/11/2012
Reputação : 4
Número de Mensagens : 90
Prêmios : [Resolvido]Movimentação inimigo 360º 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

[Resolvido]Movimentação inimigo 360º Empty Re: [Resolvido]Movimentação inimigo 360º

Mensagem por Isaque Onix Dom 23 Jun 2013, 15:25

Tente isso: 


Código:
angle=round(point_direction(x,y,mouse_x,mouse_y)/45)*45
image_speed=0
switch(angle){
case 0: image_index=0; break;
case 45: image_index=1; break;
case 90: image_index=2; break;
case 135: image_index=3; break;
case 180: image_index=4; break;
case 225: image_index=5; break;
case 270: image_index=6; break;
case 315: image_index=7; break;
default: ;break;
}
Ps: não sei se vai funcionar pois não tenho experiencia em gms, mais testei no gm8 e deu certo!!
Isaque Onix
Isaque Onix

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 15/08/2010
Reputação : 147
Número de Mensagens : 1626
Prêmios : [Resolvido]Movimentação inimigo 360º 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
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Unity
  • C#
  • Outros


http://spyreserver.16mb.com

Ir para o topo Ir para baixo

[Resolvido]Movimentação inimigo 360º Empty Re: [Resolvido]Movimentação inimigo 360º

Mensagem por marcin_w_ Dom 23 Jun 2013, 15:39

Isaque funcionou perfeitamente!!!

Era um problema que estava me deixando louco!...valeuu!!

Mas como minha inexperiência sempre traz dúvidas....agora gostaria de saber como usar sprites animadas para cada direção...pro caso de quando o inimigo andar......tp umas 4 sprites pra cada uma das 8 direções com ele mechendo os pés....
marcin_w_
marcin_w_

Data de inscrição : 25/11/2012
Reputação : 4
Número de Mensagens : 90
Prêmios : [Resolvido]Movimentação inimigo 360º 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

[Resolvido]Movimentação inimigo 360º Empty Re: [Resolvido]Movimentação inimigo 360º

Mensagem por Isaque Onix Dom 23 Jun 2013, 16:05

é só colocar ao invez de image index você colocar o sprite_index = nome do sprite

depois quando você for mover o enemy, player sei la, vc coloca:

pra mover: image_speed=1
pra parar: image_speed=0

acho que dá certo...
Isaque Onix
Isaque Onix

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 15/08/2010
Reputação : 147
Número de Mensagens : 1626
Prêmios : [Resolvido]Movimentação inimigo 360º 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
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Unity
  • C#
  • Outros


http://spyreserver.16mb.com

Ir para o topo Ir para baixo

[Resolvido]Movimentação inimigo 360º Empty Re: [Resolvido]Movimentação inimigo 360º

Mensagem por marcin_w_ Dom 23 Jun 2013, 18:20

Cara, você não tem noção do quanto vc facilitou meu projeto, não mecho muito aqui no fórum...mas se puder ajudar em algo é só pedir...valeu!
marcin_w_
marcin_w_

Data de inscrição : 25/11/2012
Reputação : 4
Número de Mensagens : 90
Prêmios : [Resolvido]Movimentação inimigo 360º 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

[Resolvido]Movimentação inimigo 360º Empty Re: [Resolvido]Movimentação inimigo 360º

Mensagem por Isaque Onix Seg 24 Jun 2013, 09:07

de boua, precisando tamo aí, eu tive alguma facilidade porque tenho um projeto top-down que acho que dave ser tipo o seu... Zoombies... hehe

Flw, precisando..
Isaque Onix
Isaque Onix

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 15/08/2010
Reputação : 147
Número de Mensagens : 1626
Prêmios : [Resolvido]Movimentação inimigo 360º 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
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Unity
  • C#
  • Outros


http://spyreserver.16mb.com

Ir para o topo Ir para baixo

[Resolvido]Movimentação inimigo 360º Empty Re: [Resolvido]Movimentação inimigo 360º

Mensagem por saim Seg 24 Jun 2013, 09:41

Só um comentário no código do isaque...
Você notou que, em todos os casos, image_index é igual a "angle" / 45?
Outra coisa, o image_index pode usar valores não-inteiros, o que dispensa o uso de "floor".
É isso o que eu fazia no primeiro código que postei. Só que de forma mais direta.

O post dele ficou bem mais didático, mas o resultado é o mesmo.
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : [Resolvido]Movimentação inimigo 360º Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Resolvido]Movimentação inimigo 360º Empty Re: [Resolvido]Movimentação inimigo 360º

Mensagem por Isaque Onix Seg 24 Jun 2013, 10:11

Sain sempre reparando nos minimos detalhes... (Não é uma critica!)

saim escreveu:Você notou que, em todos os casos, image_index é igual a "angle" / 45?


não percebi...

saim escreveu:Outra coisa, o image_index pode usar valores não-inteiros, o que dispensa o uso de "floor".
??


saim escreveu:Só um comentário no código do isaque...
valeu!
Isaque Onix
Isaque Onix

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 15/08/2010
Reputação : 147
Número de Mensagens : 1626
Prêmios : [Resolvido]Movimentação inimigo 360º 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
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Unity
  • C#
  • Outros


http://spyreserver.16mb.com

Ir para o topo Ir para baixo

[Resolvido]Movimentação inimigo 360º Empty Re: [Resolvido]Movimentação inimigo 360º

Mensagem por saim Seg 24 Jun 2013, 10:42

Isaque Onix escreveu:
saim escreveu:Outra coisa, o image_index pode usar valores não-inteiros, o que dispensa o uso de "floor".
??
É o seguinte... Você usou o floor porque precisa de valores inteiros pra usar o switch. Se a gente definir o image_index diretamente em função do ângulo, não vamos precisar de usar o switch, o que dispensa o uso do "floor".
Mas image_index também precisa de um valor inteiro, certo? Não. Se jogarmos uma conta e o resultado de image_index for 2.554413, a imagem na tela será a imagem 2 - exatamente a mesma que será apresentada COM o uso da função "floor". Com uma função a menos, a gente dá um refresco pro computador.

Por isso que eu disse que o meu primeiro código faz a mesma coisa que o seu. A gente pega o ângulo e reduz pro número de imagens da sprite. No final, o resultado é igual.

Nesse caso, não é importante dar esse refresco pro computador, o seu código é rápido o suficiente, mas é bom cultivar esse hábito de procurar soluções mais leves, desde que não se perca qualidade do jogo com elas.
Muitas vezes, a qualidade do jogo até diminui, mas de uma forma tão pequena que vale a pena.
Por exemplo, eu sei de uma séria de jogos muito famosa que começou aproveitando sprites dos inimigos pra compor cenários e itens, pra economizar espaço nos cartuchos. Num contexto completamente diferente, o jogador era capaz de jurar que não havia semelhança nenhuma, ali.
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : [Resolvido]Movimentação inimigo 360º Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Resolvido]Movimentação inimigo 360º Empty Re: [Resolvido]Movimentação inimigo 360º

Mensagem por Isaque Onix Seg 24 Jun 2013, 11:40

agora eu intendi, na verdade eu uso o floor/round porque ainda não intendi a logica dessa sequencia: "Ex: round(X*32)/32" eu vi esse código aqui no fórum a muito tempo, mais não parei para estuda-lo, apenas o adaptei as minhas necessidades... mais agora que me toquei que o switch só lê números inteiros (puts)...
Valeu aê de novo!



Como o tópico ja foi resolvido, ele sera trancado.
Caso o autor deseje inserir mais alguma informação, contacte um moderador.
Att: CRP-Max.
Isaque Onix
Isaque Onix

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 15/08/2010
Reputação : 147
Número de Mensagens : 1626
Prêmios : [Resolvido]Movimentação inimigo 360º 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
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Unity
  • C#
  • Outros


http://spyreserver.16mb.com

Ir para o topo Ir para baixo

[Resolvido]Movimentação inimigo 360º Empty Re: [Resolvido]Movimentação inimigo 360º

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