Clicar e destruir o objeto da frente

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

Clicar e destruir o objeto da frente

Mensagem por Limalokão em Ter 05 Jun 2012, 23:07

Digamos que eu tenho um quadrado parado(quadrado1), e o mesmo quadrado do lado esquerdo (quadrado2).

O quadrado2 começa a andar para o lado direito passando atras do quadrado1.

Quando eu clico no quadrado1 ele exclui os 2 quadrados de uma só vez.

Como excluir só o que está na frente? Obrigado...


Última edição por Soul Limaloko em Ter 05 Jun 2012, 23:42, editado 1 vez(es)

Limalokão

Ranking : Nota C
Número de Mensagens : 803
Idade : 24
Data de inscrição : 24/11/2009
Notas recebidas : C
Reputação : 10
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Clicar e destruir o objeto da frente

Mensagem por theguitarmester em Ter 05 Jun 2012, 23:39

Objeto do Mouse
CREATE:
destruirquadrado=0
STEP:(mosue_click(desclick) não é o nome certo.)
if mouse_click(left) and destruirquadrado=0 {destruirquadrado=1}
if mouse_desclick(left) {destruirquadrado=0 }

Objeto Quadrado
EVENT>mouse_click(left) >> if Mouse.destruirquadrado=1 {Mouse.destruirquadrado=0 intance_destroy()}

mude o Mouse_click pelo nme certo, é que estou com pressa por isso coloquei assim.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: Clicar e destruir o objeto da frente

Mensagem por Limalokão em Ter 05 Jun 2012, 23:40

Vish cara não deu certo não...

Esqueci de dizer que a visão é de plataforma... Aí é o seguinte... sua mão direita é o quadrado 2, e sua mão esquerda o quadrado 1, sua mão esquerda passa por baixo da mão direita, e fica ali em baixo parada. Quando eu clico na mão direita (que esta por cima) exclui também a mão esquerda, e é isso que eu não quero entende? Primeiro exclua a mão direita depois a esquerda Happy Obrigado...

Limalokão

Ranking : Nota C
Número de Mensagens : 803
Idade : 24
Data de inscrição : 24/11/2009
Notas recebidas : C
Reputação : 10
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Clicar e destruir o objeto da frente

Mensagem por Esaucm98 em Qua 06 Jun 2012, 00:52

Código:
if obj_quadrado1.depth > obj_quadrado2.depth
  {
  instance_destroy();
  }
else
  {
    with(obj_quadrado2){instance_destroy();}
  }
isso no mouse_left_button!

cara, eu nao tenho a minima ideia se isso vai da certo, nunca tentei nada parecido... mas se esta da duvida, tenta ver se da certo

flws

Esaucm98

Ranking : Nota D
Número de Mensagens : 275
Data de inscrição : 13/05/2012
Notas recebidas : D
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.legioncrafters.tk

Voltar ao Topo Ir em baixo

Re: Clicar e destruir o objeto da frente

Mensagem por Limalokão em Qua 06 Jun 2012, 00:57

Não deu parceiro :s estou usando depth=-y no step para que ele possa ficar por baixo Very Happy Vlws

Limalokão

Ranking : Nota C
Número de Mensagens : 803
Idade : 24
Data de inscrição : 24/11/2009
Notas recebidas : C
Reputação : 10
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Clicar e destruir o objeto da frente

Mensagem por saim em Qua 06 Jun 2012, 08:39

Crie um controlador e um parent. O parent serve pra tratar os dois quadrados como se fossem instâncias do mesmo objeto (então ele deve ser parent de ambos quadrados, dã), o controlador serve pra executar o evento de forma "imparcial".

Ao invés de colocar o evento mouse_left_pressed nos quadrados ou no parent, use um global_left_pressed no parent e já comece o evento com um if:
if (instance_position(mouse_x, mouse_y, objQuadradoParent)){
Isso vai servir como um left_pressed no parent, mas vindo do controlador vai acontecer só uma vez por clique (se fosse colocado no parent ou nos quadrados, aconteceria uma vez em cada objeto).
Agora você vai usar um with pra rodar por todas as instâncias sob o mouse. Vai escolher a primeira ou a última e deletar só ela. Pra deletar a primeira instância, faz assim:
Código:
if (instance_position(mouse_x, mouse_y, objQuadradoParent)){ // se tem qualquer instância sob o mouse
   var jaDeletou;
   jaDeletou = false; //ainda não deletou ninguém
   with(objQuadradoParent){ //pra todos os quadrados
      if (jaDeletou == false && instance_position(mouse_x, mouse_y, id)){ //se não deletou ninguém e o quadrado está sob o mouse
         instance_destroy(); //bum!
         jaDeletou = true; //já deletou alguém
         }
      }
   }
Pra deletar a última instância, você cria uma variável var pra armazenar a id do objeto dentro do with, de forma que sempre que houver uma instância sob o mouse, o valor dessa variável passa a ser igual ao da id mais recente. Aí, você usa um outro with pra deletar a instância que estiver na variável.

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

Re: Clicar e destruir o objeto da frente

Mensagem por Limalokão em Qua 06 Jun 2012, 13:18

saim escreveu:Crie um controlador e um parent. O parent serve pra tratar os dois quadrados como se fossem instâncias do mesmo objeto (então ele deve ser parent de ambos quadrados, dã), o controlador serve pra executar o evento de forma "imparcial".

Ao invés de colocar o evento mouse_left_pressed nos quadrados ou no parent, use um global_left_pressed no parent e já comece o evento com um if:
if (instance_position(mouse_x, mouse_y, objQuadradoParent)){
Isso vai servir como um left_pressed no parent, mas vindo do controlador vai acontecer só uma vez por clique (se fosse colocado no parent ou nos quadrados, aconteceria uma vez em cada objeto).
Agora você vai usar um with pra rodar por todas as instâncias sob o mouse. Vai escolher a primeira ou a última e deletar só ela. Pra deletar a primeira instância, faz assim:
Código:
if (instance_position(mouse_x, mouse_y, objQuadradoParent)){ // se tem qualquer instância sob o mouse
   var jaDeletou;
   jaDeletou = false; //ainda não deletou ninguém
   with(objQuadradoParent){ //pra todos os quadrados
      if (jaDeletou == false && instance_position(mouse_x, mouse_y, id)){ //se não deletou ninguém e o quadrado está sob o mouse
         instance_destroy(); //bum!
         jaDeletou = true; //já deletou alguém
         }
      }
   }
Pra deletar a última instância, você cria uma variável var pra armazenar a id do objeto dentro do with, de forma que sempre que houver uma instância sob o mouse, o valor dessa variável passa a ser igual ao da id mais recente. Aí, você usa um outro with pra deletar a instância que estiver na variável.

Ok vamos juntos hehe

Ja tenho um obj_controlador, e criei um obj_parent(sem sprite)
Coloquei os dois quadrados para serem parent do obj_parent

saim escreveu:use um global_left_pressed no parent
Okay coloquei tudo isso no obj_parent:
if (instance_position(mouse_x, mouse_y, objQuadradoParent Aqui vai o nome dos quadrados ou do obj_parent?)){ // se tem qualquer instância sob o mouse
var jaDeletou;
jaDeletou = false; //ainda não deletou ninguém
with(objQuadradoParent Aqui tbm dos quadrados ou do obj_parent?){ //pra todos os quadrados
if (jaDeletou == false && instance_position(mouse_x, mouse_y, id)){ //se não deletou ninguém e o quadrado está sob o mouse
instance_destroy(); //bum!
jaDeletou = true; //já deletou alguém
}
}
}

E o obj_controle entra onde nessa história? hehehehehehehehehehehehehehe

saim escreveu:Pra deletar a última instância, você cria uma variável var pra armazenar a id do objeto dentro do with, de forma que sempre que houver uma instância sob o mouse, o valor dessa variável passa a ser igual ao da id mais recente. Aí, você usa um outro with pra deletar a instância que estiver na variável.
Sou leigo com var no evento step ainda nao sei como criar :s Mas e ai o que faremos agora? ta tenso o negocio hehe

Limalokão

Ranking : Nota C
Número de Mensagens : 803
Idade : 24
Data de inscrição : 24/11/2009
Notas recebidas : C
Reputação : 10
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Clicar e destruir o objeto da frente

Mensagem por saim em Qua 06 Jun 2012, 14:51

Soul Limaloko escreveu:
saim escreveu:use um global_left_pressed no parent Controle
Erro meu. envergonhado
No código, você coloca o nome do parent. Ele realmente não precisa ter sprite nem fazer nada além de ser um parent. Só que o código vai no global_left_pressed do controle, não do parent (mais uma vez: foi viagem minha).

Usar var é só um jeito de dizer "essa variável só vale pra esse código". No final do código, OU FORA DELE, o jogo ignora a variável.
O "ou fora dele" significa o seguinte: se o código está rodando na instância X, o instância Y não tem conhecimento dela, mesmo que eu use "with(Y)". Isso é útil pra evitar o uso de "other". Dentro de um "with", "other" significa "a instância em que o código está escrito", então se eu quero me referenciar a uma variável da instância, posso usar "other.variável" dentro do "with". Mas se trata-se de uma variável var, o uso do "other" torna-se dispensável (e até gera erros, já que a variável NÃO EXISTE na instância, apenas no código).

Basicamente o que eu estou fazendo é:
- tira o clique dos objetos, colocando o evento num objeto imparcial
- esse objeto imparcial vai passar em um por um dos objetos e verificar se ele tem condições de reagir ao clique.
- tendo condições, ele vai ver qual tem a maior (ou menor) id e deletar. O código, então, pára de deletar os demais objetos (hmm... devia ter usado um exit...)

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

Re: Clicar e destruir o objeto da frente

Mensagem por Limalokão em Qua 06 Jun 2012, 14:57

Boa saim! Funcionou agora. MAAAASS (sempre tem um mas ¬¬') Ele está deletando o de trás por primeiro teria que ser o da frente... o que pode ser?

Obs:. with e other eu sei Happy Ajuda e muito com moedas por exemplo hehe

Ae meu cód ficou assim:
no controle:
if (instance_position(mouse_x, mouse_y, obj_parente)){ // se tem qualquer instância sob o mouse
var jaDeletou;
jaDeletou = false; //ainda não deletou ninguém
with(obj_parente){ //pra todos os quadrados
if (jaDeletou == false && instance_position(mouse_x, mouse_y, id)){ //se não deletou ninguém e o quadrado está sob o mouse
instance_destroy(); //bum!
jaDeletou = true; //já deletou alguém
}
}
}

De certo mas ta destruindo o de tras hehe

Limalokão

Ranking : Nota C
Número de Mensagens : 803
Idade : 24
Data de inscrição : 24/11/2009
Notas recebidas : C
Reputação : 10
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Clicar e destruir o objeto da frente

Mensagem por saim em Qua 06 Jun 2012, 15:01

Ah, então você deve ter que deletar a ÚLTIMA instância (o código deleta a primeira). Daqui a pouco eu edito, mas até lá, vai tentando aí. A dica eu já dei:
saim escreveu:Pra deletar a última instância, você cria uma variável var pra armazenar a id do objeto dentro do with, de forma que sempre que houver uma instância sob o mouse, o valor dessa variável passa a ser igual ao da id mais recente. Aí, você usa um outro with pra deletar a instância que estiver na variável.

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

Re: Clicar e destruir o objeto da frente

Mensagem por Limalokão em Qua 06 Jun 2012, 21:13

Então digamos assim, se eu criar uma var nafrente

isso no obj_controle.
Código:
var nafrente;
nafrente=0

no obj_quadrado1
with(obj_controle){
nafrente+=1
}

é isso? apartir dai eu nao sei mais o que fazer =/

Edit estou desdas 21:30 tentando criar variaves, criar mais objetos etc...
eu até pensei assim, vou criar um obj_bala como se fosse um tiro e se esse objeto colidir com o quadrado exclui-o MAS NÃO O GM INSISTE EM EXCLUIR O DE TRÁS!!!! To Mad Evil or Very Mad pale scratch

Edit 2

É muito parecido com isso, só que eu não entendi nada o que os caras falaram :s além de nao entender muito bem o inglês LoL
Jogo de cartas - yoyogamesForum

Edit 3

Ultima tentativa de explicação, aplicando-se ao que está escrito acima:

O quadrado 1 e o quadrado 2 fazem parte do mesmo objeto ou seja: obj_inimigo ou seja² quadrado1=obj_inimigo quadrado2=obj_inimigo
Um controlador cria esses inimigos aleatoriamente.

suponhamos que foram criado 6 inimigos(cada um deles tem 2 vidas). Quando eles chegam perto de uma parede eles param, mas não se batem e sim se encaixam um por cima do outro como se fosse um deck de cartas. (ta mais como eu sei que ele está excluindo o de trás? Simples, a parede não é reta e sim na diagonal ou seja um inimigo para no x=10 o outro para no x=8, outro x=6 e assim da para ver um de cada vez)

Como o próprio saim disse "tente criar uma variável nas opções em que eu dei" e quem disse que eu consegui, tentei de muitos modos mais nada =/ Obrigado.

Limalokão

Ranking : Nota C
Número de Mensagens : 803
Idade : 24
Data de inscrição : 24/11/2009
Notas recebidas : C
Reputação : 10
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Clicar e destruir o objeto da frente

Mensagem por saim em Qui 07 Jun 2012, 10:00

Hehehe... Você está fritando do lado errado...
É o seguinte, por mais rápido que seja, o computador não faz tudo AO MESMO TEMPO. Não de verdade. Quando você usa um "with", o código acontece em todas as instâncias do objeto chamado, mas uma de cada vez.
Quer fazer isso entrar na cabeça? Crie umas 3 instâncias (pode ser mais, mas não muitas) do mesmo objeto, um controle e, ao apertar uma determinada tecla (no controle), coloque o comando "with(outroObjeto){show_message(string(id))}". Repare na ordem numérica, que não varia, não importa quantas vezes você aperte a tecla.

Se você deleta uma instância e, a partir desse momento, parar de deletar, vai ter deletado a PRIMEIRA instância encontrada. É o que eu fiz aí acima.
Se olhar uma-por-uma e, quando não tiver mais nenhuma, deletá-la, você vai ter deletado a última. Mais ou menos o contrário do que eu fiz.
Só que você não quer a última instância, quer a última instância SOB O MOUSE. Pra isso, tem que olhar uma por uma e só levar em conta as que estão sob o mouse.

O que eu vou fazer é:
- primeiro, vejo se tem ALGUMA instância sob o mouse (pra não perder tempo, se não tiver)
- tendo, vou gravar a id delas, na verdade de uma-por-uma delas numa variável descartável. As id's das últimas instâncias vão substituindo as id's das anteriores, de forma que só a id da última instância fique na variável
- deleto aquela que ficou, no final

Código:
if (instance_position(mouse_x, mouse_y, objQuadradoParent)){ // se tem qualquer instância sob o mouse
  var vaiMorrer; //aquela instância que vai morrer
  with(objQuadradoParent){ //pra todos os quadrados
      if (instance_position(mouse_x, mouse_y, id)){ //é um dos quadrados sob o mouse
        vaiMorrer = id; //aqui que eu marco o defunto
        }
      }
  with(vaiMorrer){
      instance_destroy(); //bum!
      }
  }
Se o objeto é um só, você não precisa usar um parent, mas o controle ainda é importante.

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

Re: Clicar e destruir o objeto da frente

Mensagem por Limalokão em Qui 07 Jun 2012, 13:50

Aaaaaaaaaaa Vlws Aí professor! hahahahaha Perfeito man! Entendi tudo tbm hahahahaha Muito bom mesmo deu certinho! Very Happy Aooow Felicidade hahahaha

Obs.: Feliz aniversário atrasado cara! Happy auhsuhassauhasuhashaushuahaus

EDIT

Eu achava que "id" era uma variavel criada por você mesmo, mas ela é própria do gm então... LoL

Limalokão

Ranking : Nota C
Número de Mensagens : 803
Idade : 24
Data de inscrição : 24/11/2009
Notas recebidas : C
Reputação : 10
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Clicar e destruir o objeto da frente

Mensagem por Conteúdo patrocinado Hoje à(s) 12:04


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