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
» Retorno da GMBR!!!
por theguitarmester Ter 19 Mar 2024, 22:38

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Mudar cor de apenas uma palavra
por lunalol Sex 01 Mar 2024, 13:42

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39

» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16

» a funçao approach ainda existe?
por PEDRINDEV Ter 26 Dez 2023, 20:05

» Inimigo ataca até por trás! >:(
por saim Sex 22 Dez 2023, 08:55

» [RESOLVIDO]Spawn após morte
por Deception_1999 Dom 17 Dez 2023, 16:39

» Remunerado $$$ - Procuro programador para ajudar a "montar" um jogo
por theguitarmester Sáb 02 Dez 2023, 16:28

» Game maker nao abre
por Cerf Dom 26 Nov 2023, 12:01


[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 : 1625
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 : 1625
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 : 1625
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 : 1625
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 : 1625
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