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
[resolvido] Deixar peça embaixo
3 participantes
Página 1 de 1
[resolvido] Deixar peça embaixo
Estou fazendo um quebra-cabeças e tendo dificuldades ao soltar as peças. Eu quero que, ao soltar, elas fiquem embaixo das demais. Pra arrastar, eu tenho uma variável, draggin, que mudo de true pra false conforme seja pra peça seguir ou ignorar o mouse.
No evento left_release (ou seja, só funciona quando o mouse está sobre a peça), eu coloco o seguinte (resumidamente):
Estranhamente, mesmo que a id seja menor que a da peça que está abaixo, ambas estando com depth igual a zero, a peça não vai pra trás.
Alguém pode me explicar porque?
No evento left_release (ou seja, só funciona quando o mouse está sobre a peça), eu coloco o seguinte (resumidamente):
- Código:
with (objPiece){
if draggin == true{
depth = 1;
}
else{
depth = 0;
}
}
Estranhamente, mesmo que a id seja menor que a da peça que está abaixo, ambas estando com depth igual a zero, a peça não vai pra trás.
Alguém pode me explicar porque?
Última edição por saim em Ter 20 Dez 2011, 14:14, editado 1 vez(es)
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: [resolvido] Deixar peça embaixo
- Código:
if (draggin == true){
event_perform(ev_trigger, 1);//movePiece();
}
mxp = mouse_x; myp = mouse_y;
- Código:
x += mouse_x - mxp; y += mouse_y - myp;
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: [resolvido] Deixar peça embaixo
Só pra constar saim, um objeto com depth 1 vai ficar em baixo dos que tem 0, mas um com -1 (menos um) vai ficar acima. E na condição da draggin você deixou depth 1, sendo que sua intenção era deixar a peça acima de todas.
Resumo: depth é que nem a Y, não a Z.
Resumo: depth é que nem a Y, não a Z.
Markituh- Games Ranking :
Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [resolvido] Deixar peça embaixo
Não, Markituh, o que eu quero é que, ao soltar a peça, ela vá pra baixo de todo mundo. Então, se estiver sendo arrastada (draggin = true) ela vá pra depth maior que as outras mesmo (então 1 se estiver sendo arrastada e 0 se não estiver).
Só que, quando eu solto uma peça que ESTÁ sendo arrastada ao mesmo tempo que "solto" uma que NÃO está sendo arrastada - ou seja, estou arrastando uma por cima de outra e, com o mouse sobre as duas, eu solto o botão - a depth das duas vai pra zero (eu debuguei) e não sei porque isso acontece.
Só que, quando eu solto uma peça que ESTÁ sendo arrastada ao mesmo tempo que "solto" uma que NÃO está sendo arrastada - ou seja, estou arrastando uma por cima de outra e, com o mouse sobre as duas, eu solto o botão - a depth das duas vai pra zero (eu debuguei) e não sei porque isso acontece.
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: [resolvido] Deixar peça embaixo
Ah, sim, erro meu. Lembro que fiz um quebra-cabeça e tive esse bug, ao menos um similiar, que quando eu estava carregando uma, se eu passasse por outra ela também ia junto O que fiz foi armazenar o objeto que cliquei em uma variável para esse propósito (global, diga-se), e quando eu soltasse já não havia erro, porque eu só iria soltar aquele que eu armazenei.
Mas se por ventura a peça que estiver abaixo também for computada, seria bom checar se a variável está com um valor que não um nulo (0, false, whatever) na hora de checar se está carregando, evitando assim que você também carregue a peça de baixo junto.
Mas se por ventura a peça que estiver abaixo também for computada, seria bom checar se a variável está com um valor que não um nulo (0, false, whatever) na hora de checar se está carregando, evitando assim que você também carregue a peça de baixo junto.
- Código:
// Isso vai pro evento clique do mouse
// Se estiver usando um evento próprio pra isso e não o Step, sei que você sabe adaptar.
if mouse_check_button_pressed(mb_left) and draggin == false and global.current_piece = none
{
draggin = true;
global.current_piece = instance_position(mouse_x, mouse_y, objPiece);
}
Markituh- Games Ranking :
Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [resolvido] Deixar peça embaixo
tenta inverter os depths, parece que vc trocou eles:
Testa aí.
- Código:
with (objPiece){
if draggin == true{
depth = 0;
}
else{
depth = 1;
}
}
Testa aí.
Re: [resolvido] Deixar peça embaixo
@Markituh: não, o valor de draggin também foi debugado. Está "1" na peça que se move e "0" na peça parada, que permanece parada até que eu clique nela e ela esteja por cima (tenho uma rotina bem chatinha de se fazer só pra poder pegar a peça que está por cima, independente da depth).
@mrbrum22: Eu quero que se o valor de draggin for verdadeiro ela vá pra baixo. COMO inverter os valores poderia me ajudar?
Mocada, é o seguinte:
arrastando: a peça vai pra cima (depth = -1, já resolvi isso)
soltei: a peça que está sendo arrastada vai pra baixo de TODAS (depth = 1, mas não está ficando igual a um)
não toquei na peça: ela fica numa posição qualquer em relação às outras (depth = 0, já resolvi também).
Edit: Pfff... É exatamente isso! Rodo o código na peça com draggin = true, o depth dela vai pra 1 E o draggin, pra false. Depois rodo na outra instância e como o draggin da primeira é false, o depth vai pra 0 também!
Agora é achar um jeito de evitar isso...
O problema está no evento de soltar o botão do mouse. Quando faço isso com duas peças sob o mouse, a depth das duas vai pra zero, quando eu esperava que a que eu estivesse arrastando fosse pra um (e a outra continasse em zero mesmo).
Teoricamente, não há erro no código. Se draggin = true, depth = 1. Simples. Mas não é o que está acontecendo, o depth está indo pra 0.
DEVE ser algum problema de ordem dos eventos - o código roda numa instância, joga pra um, depois roda de novo e joga pra zero. Só que eu não consigo imaginar onde está esse problema.
@mrbrum22: Eu quero que se o valor de draggin for verdadeiro ela vá pra baixo. COMO inverter os valores poderia me ajudar?
Mocada, é o seguinte:
arrastando: a peça vai pra cima (depth = -1, já resolvi isso)
soltei: a peça que está sendo arrastada vai pra baixo de TODAS (depth = 1, mas não está ficando igual a um)
não toquei na peça: ela fica numa posição qualquer em relação às outras (depth = 0, já resolvi também).
Edit: Pfff... É exatamente isso! Rodo o código na peça com draggin = true, o depth dela vai pra 1 E o draggin, pra false. Depois rodo na outra instância e como o draggin da primeira é false, o depth vai pra 0 também!
Agora é achar um jeito de evitar isso...
O problema está no evento de soltar o botão do mouse. Quando faço isso com duas peças sob o mouse, a depth das duas vai pra zero, quando eu esperava que a que eu estivesse arrastando fosse pra um (e a outra continasse em zero mesmo).
Teoricamente, não há erro no código. Se draggin = true, depth = 1. Simples. Mas não é o que está acontecendo, o depth está indo pra 0.
DEVE ser algum problema de ordem dos eventos - o código roda numa instância, joga pra um, depois roda de novo e joga pra zero. Só que eu não consigo imaginar onde está esse problema.
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: [resolvido] Deixar peça embaixo
:| ... Aposto muito que é a ordem dos eventos. Rapaz, não sei se vai funcionar contigo, mas tenta dar show_message após cada operação que você faz na variável, em todos os blocos de código. Geralmente faço isso no C++ para saber o porque do programa simplesmente deixar de responder depois de fazer uma operação.
De preferência (ou melhor, de obrigação), coloque qual é bloco no qual o respectivo show_message está. Aí vai ficar até que óbvio saber qual é o código que faz m%$#@
De preferência (ou melhor, de obrigação), coloque qual é bloco no qual o respectivo show_message está. Aí vai ficar até que óbvio saber qual é o código que faz m%$#@
Markituh- Games Ranking :
Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [resolvido] Deixar peça embaixo
RESOLVIDO!!!
O problema era que o código estava nas peças. Fiz isso pra facilitar, mas acabou complicando. Passei o código pra um controle que aí, não tem perigo do draggin passar pra false e o código ser rodado novamente. E, já que tenho a variável draggin e agora estou usando o evento global, nem preciso verificar se a peça está sob o mouse.
Parei de fazer o depth das outras ir pra zero, também. Faço isso quando pego uma peça, então não tem motivo pra fazer de novo ao soltar.
Obrigado pela ajuda, moçada!
O problema era que o código estava nas peças. Fiz isso pra facilitar, mas acabou complicando. Passei o código pra um controle que aí, não tem perigo do draggin passar pra false e o código ser rodado novamente. E, já que tenho a variável draggin e agora estou usando o evento global, nem preciso verificar se a peça está sob o mouse.
Parei de fazer o depth das outras ir pra zero, também. Faço isso quando pego uma peça, então não tem motivo pra fazer de novo ao soltar.
Obrigado pela ajuda, moçada!
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
Tópicos semelhantes
» [[Resolvido]]Deixar zoom no jogo, mas não deixar na HUD
» [Resolvido]deixar o teto invisivel
» [Resolvido]como deixar o sol no centro da room?
» [RESOLVIDO]Como deixar tile sólida?
» [Resolvido]Como deixar a room preta e branca?
» [Resolvido]deixar o teto invisivel
» [Resolvido]como deixar o sol no centro da room?
» [RESOLVIDO]Como deixar tile sólida?
» [Resolvido]Como deixar a room preta e branca?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos