Entrar
Últimos assuntos
» player não consegue andarpor 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
Clicar e destruir o objeto da frente
4 participantes
Página 1 de 1
Clicar e destruir o objeto da frente
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...
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)
Re: Clicar e destruir o objeto da frente
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.
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.
Re: Clicar e destruir o objeto da frente
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 Obrigado...
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 Obrigado...
Re: Clicar e destruir o objeto da frente
- Código:
if obj_quadrado1.depth > obj_quadrado2.depth
{
instance_destroy();
}
else
{
with(obj_quadrado2){instance_destroy();}
}
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
Re: Clicar e destruir o objeto da frente
Não deu parceiro :s estou usando depth=-y no step para que ele possa ficar por baixo Vlws
Re: Clicar e destruir o objeto da frente
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:
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
}
}
}
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Clicar e destruir o objeto da frente
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: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.
- 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
}
}
}
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
Okay coloquei tudo isso no obj_parent:saim escreveu:use um global_left_pressed no 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
Sou leigo com var no evento step ainda nao sei como criar :s Mas e ai o que faremos agora? ta tenso o negocio hehesaim 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.
Re: Clicar e destruir o objeto da frente
Erro meu.Soul Limaloko escreveu:saim escreveu:use um global_left_pressed noparentControle
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- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Clicar e destruir o objeto da frente
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 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
Obs:. with e other eu sei 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
Re: Clicar e destruir o objeto da frente
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- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Clicar e destruir o objeto da frente
Então digamos assim, se eu criar uma var nafrente
isso no obj_controle.
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
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.
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
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.
Re: Clicar e destruir o objeto da frente
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
É 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!
}
}
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Clicar e destruir o objeto da frente
Aaaaaaaaaaa Vlws Aí professor! hahahahaha Perfeito man! Entendi tudo tbm hahahahaha Muito bom mesmo deu certinho! Aooow Felicidade hahahaha
Obs.: Feliz aniversário atrasado cara! auhsuhassauhasuhashaushuahaus
EDIT
Eu achava que "id" era uma variavel criada por você mesmo, mas ela é própria do gm então... LoL
Obs.: Feliz aniversário atrasado cara! auhsuhassauhasuhashaushuahaus
EDIT
Eu achava que "id" era uma variavel criada por você mesmo, mas ela é própria do gm então... LoL
Tópicos semelhantes
» Clicar em objeto colocar um fundo e clicar em outro mudar novamente
» {Resolvido} Minha plataforma quando eu vo pra frente e tem um objeto na minha frente ele fica bugado
» [Resolvido]como destruir um objeto com o codigo em outro objeto?
» Objeto na frente do alvo
» [Resolvido] Tiles na frente do objeto
» {Resolvido} Minha plataforma quando eu vo pra frente e tem um objeto na minha frente ele fica bugado
» [Resolvido]como destruir um objeto com o codigo em outro objeto?
» Objeto na frente do alvo
» [Resolvido] Tiles na frente do objeto
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos