[Resolvido]Movimentação inimigo 360º

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

Resolvido [Resolvido]Movimentação inimigo 360º

Mensagem por marcin_w_ em 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_

Número de Mensagens : 77
Idade : 26
Data de inscrição : 25/11/2012
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

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

Mensagem por saim em 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

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

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

Mensagem por marcin_w_ em 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_

Número de Mensagens : 77
Idade : 26
Data de inscrição : 25/11/2012
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

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

Mensagem por saim em 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

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

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

Mensagem por marcin_w_ em 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_

Número de Mensagens : 77
Idade : 26
Data de inscrição : 25/11/2012
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

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

Mensagem por marcin_w_ em 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_

Número de Mensagens : 77
Idade : 26
Data de inscrição : 25/11/2012
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

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

Mensagem por Isaque Onix em 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

Número de Mensagens : 1597
Idade : 23
Data de inscrição : 15/08/2010
Reputação : 147
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://spyreserver.16mb.com

Voltar ao Topo Ir em baixo

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

Mensagem por marcin_w_ em 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_

Número de Mensagens : 77
Idade : 26
Data de inscrição : 25/11/2012
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

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

Mensagem por Isaque Onix em 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

Número de Mensagens : 1597
Idade : 23
Data de inscrição : 15/08/2010
Reputação : 147
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://spyreserver.16mb.com

Voltar ao Topo Ir em baixo

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

Mensagem por marcin_w_ em 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_

Número de Mensagens : 77
Idade : 26
Data de inscrição : 25/11/2012
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

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

Mensagem por Isaque Onix em 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

Número de Mensagens : 1597
Idade : 23
Data de inscrição : 15/08/2010
Reputação : 147
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://spyreserver.16mb.com

Voltar ao Topo Ir em baixo

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

Mensagem por saim em 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

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

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

Mensagem por Isaque Onix em 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

Número de Mensagens : 1597
Idade : 23
Data de inscrição : 15/08/2010
Reputação : 147
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://spyreserver.16mb.com

Voltar ao Topo Ir em baixo

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

Mensagem por saim em 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

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

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

Mensagem por Isaque Onix em 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

Número de Mensagens : 1597
Idade : 23
Data de inscrição : 15/08/2010
Reputação : 147
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://spyreserver.16mb.com

Voltar ao Topo Ir em baixo

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

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


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