Conectar-se
Quem está conectado
13 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 13 Visitantes

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 30/06/2010
Número de Mensagens : 628
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 15

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

[Resolvido]Ajuda com tower defense

em Ter 09 Ago 2011, 09:28
Bom pessoal(¬¬), eu e meu amg estamos no começo de um jogo de Defender A Base, mais eu tow querendo saber como eu faria p que:
se o obj_inimigo estiver 200 pixels ou menos, perto do obj_gun, que o obj_gun atire o obj_tiro, mais que saia só daquele obj_gun que o obj_inimigo está perto, porque tem mais obj_gun na room, alguem entendeu alguma coisa Razz ?

PS: o jogo é TOP-DOWN(acho eu)Razz

Razz:P



Última edição por Mentos e Coca-cola em Ter 09 Ago 2011, 16:04, editado 1 vez(es)
avatar
Ranking : Sem avaliações
Data de inscrição : 11/10/2009
Número de Mensagens : 2184
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 106

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: [Resolvido]Ajuda com tower defense

em Ter 09 Ago 2011, 10:22
Há uma função que checa a distância (em pixels) entre dois objetos. Ela é distance_to_object e seu único argumento é o objeto para checar a distância. Então, no Step objeto que atira (obj_gun):
Código:
if pode_atirar and distance_to_object(obj_inimigo) <= 200
/* Se pode atirar for igual a true(a comparação é implícita, mas há) e a distância entre mim e o objeto inimigo for menor ou igual a 200 */
{
instance_create(x,y,obj_tiro) // Cria o tiro
pode_atirar = false
alarm[0] = 30  // Recarrega o tiro
}
A variável "pode_atirar" é básica, caso contrário seriam criados um monte de obj_tiro. O alarm[0] é básico também, segue a mesma linhagem da variável. Sobre haver vários objetos:
GM Help escreveu:distance_to_object(obj) Returns the distance of the instance to the nearest instance of object obj. (If the instance or object does not have a sprite or mask, the result of the function is undefined.)
A função retorna a distância da instância em que o código está para a instância mais próxima, ou seja, a que estiver na frente, do objeto "obj". O tio Mark pensou nisso também tongue

Nota: Há um trecho que diz: "If the distance or object..." - esse trecho quer dizer que se a instância não tem uma sprite ou mask, o resultado que a função vai retornar é indefinido.


Última edição por Markituh em Ter 09 Ago 2011, 10:24, editado 2 vez(es) (Razão : Nota)
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 30/06/2010
Número de Mensagens : 628
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 15

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: [Resolvido]Ajuda com tower defense

em Ter 09 Ago 2011, 10:30
foi mal mais não funcionou, será que alguem topa consertar a engine ?
avatar
Ranking : Nota B
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Número de Mensagens : 2964
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 121

Prêmios
   : 1
   : 0
   : 3
Ver perfil do usuário

Re: [Resolvido]Ajuda com tower defense

em Ter 09 Ago 2011, 11:25
Deveria funcionar. O que deu errado?
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 30/06/2010
Número de Mensagens : 628
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 15

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: [Resolvido]Ajuda com tower defense

em Ter 09 Ago 2011, 11:28
os inimigos chegam perto mais nada acontece, eu tembém achei estranho
avatar
Ranking : Nota B
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Número de Mensagens : 2964
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 121

Prêmios
   : 1
   : 0
   : 3
Ver perfil do usuário

Re: [Resolvido]Ajuda com tower defense

em Ter 09 Ago 2011, 11:57
Algumas sugestões do que pode estar errado:
- pode_atirar pode estar com o valor “false” (o Markituh não pôs no texto, mas você deve usar o alarm pra resetar a variável pra “true”)
- a distância pode estar pequena (embora eu ache que 200 sejam suficientes). Tente aumentar pra 5000, só pra testar.
- o inimigo pode não ser chamado de obj_inimigo. Se houver diferença nos nomes, corrija.
- o tiro está sendo criado sem velocidade nenhum, dando a impressão que ele não está lá. Mostre, em algum debug, o valor de "instance_number(obj_tiro)".
Se não for nenhuma dessas possibilidades, volte que pensaremos em algo novo. Se alguma se confirmar, a correção é simples.

Edit:
de fato, não está funcionando quando eu ponho objetos sem sprites - tanto a torre quanto o inimigo. Porém, ao definir uma sprite e uma mask pra esses objetos, ele passa a criar os tiros.
O código que estou usando é:
Código:
if (podeAtirar==true && distance_to_object(obj_inimigo)<=distMin){//point_distance(x, y, obj_inimigo.x, obj_inimigo.y)<=distMin){//
   var vitima;
   vitima=collision_circle(x, y, distMin, obj_inimigo, 1, 1);
   with (instance_create(x, y, obj_bala)){
      dir=point_direction(other.x, other.y, obj_inimigo.x, obj_inimigo.y);//vitima.x, vitima.y);
      }
   alarm[0]=cadencia;
   podeAtirar=false;
   }
os códigos em comentário são testes que eu usei até fazer funcionar. Eles também funcionam, em muitos casos, mas podem gerar alguns bugs, principalmente o "vitima.x, vitima.y);". Parece que a distância entre os objetos pode ser menor que distMin sem que a collision_circle retorne "true".
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 30/06/2010
Número de Mensagens : 628
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 15

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: [Resolvido]Ajuda com tower defense

em Ter 09 Ago 2011, 16:03
resolvido, muito obrigado ae, pode trancar o tópico
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum