Ajuda com Mouse Enter/Leave

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

Ajuda com Mouse Enter/Leave

Mensagem por chicoweb em Qua 26 Mar 2014, 11:12

To com um problema aqui que ta rachando a cuca e não achei solução, peço ajuda de vcs amigos:

Tenho um sistema de inventário básico:



1 - Ele cria via gml os slots, cada slot tem seu id, seu nome, preço, etc...

obj_control / Create


Código:
for (i = 0; i <= 4; i += 1){
    for (j = 0; j <= 6; j += 1){
        xx = 120 + (i * 32)
        yy = 120 + (j * 32)
        obj[i,j] = instance_create(xx,yy,obj_slot)
        obj[i,j].preco = random(2000)
    }
}

2 - Aí eu tenho um objeto que exibe a informação quando passa o mouse em cima de cada slot:

obj_item_descr / Draw


Código:
draw_set_halign(fa_center)
draw_sprite(sprite_index,0,x,y)
draw_set_color(c_white)
draw_text( x + (sprite_get_width(sprite_index) / 2), y + 4, texto)

3 - Aqui é o evento mouse_enter para cada slot lá do item (1)

obj_slot / Mouse Enter - Ele exibe o texto mostrando o preço do item


Código:
with obj_item_descr{
    instance_destroy()
}
instance_create(120 + (5 * 32),120,obj_item_descr)
obj_item_descr.texto = preco

4 - E o mouse leave:

obj_slot / Mouse Leave - Ele oculta o texto se estiver algum sendo exibido


Código:
//show_message("MOUSE LEAVE ID:" + string(id))
with obj_item_descr{
    instance_destroy()
}

Onde está a zica?

Acontece que ele executa primeiro o Mouse Enter do próximo slot, e depois o Mouse Leave do antigo.
Isso faz com que o passo 3 seja anulado com o passo 4.

Deu pra entender ai mais ou menos?
Alguem sabe como resolvo isso, por favor?

chicoweb

Ranking : Nota C
Número de Mensagens : 666
Idade : 40
Data de inscrição : 15/05/2012
Notas recebidas : B+C
Reputação : 49
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Ajuda com Mouse Enter/Leave

Mensagem por fredcobain em Qua 26 Mar 2014, 14:09

E se o obj_item_descr estivesse sempre "vivo" e fosse visível somente quando o mouse estiver em colisão com um slot ? (use collision_point com mouse_x e mouse_y)

E no step desse obj_item_descr ele pegasse as informações do slot que está em colisão ?

Acho que seria uma lógica que não teria esse problema de ordem de eventos.

fredcobain

Ranking : Sem avaliações
Número de Mensagens : 691
Idade : 35
Data de inscrição : 14/04/2011
Reputação : 162
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Ajuda com Mouse Enter/Leave

Mensagem por chicoweb em Qua 26 Mar 2014, 16:13

fred Tentei fazer o que vc sugeriu, só que eu preferi usar o position_meeting do que o colision_point.

Coloquei isso no step do obj_slot


Código:
if position_meeting(mouse_x,mouse_y,self){
    with obj_item_descr{
        instance_destroy()
    }
    instance_create(120 + (5 * 32),120,obj_item_descr)
    obj_item_descr.texto = preco
}else{
    with obj_item_descr{
        instance_destroy()
    }
}

Só que como isso é executado para cada instancia do obj_slot os outros objetoda da room entendem que o else deles é que tá funcionando, assim anula tb o instance-create anterior.

Na verdade eu já resolvi o problema, mas foi uma gambiarra tão fácil e rápida que vai ser a solução definitiva kkkk

Solução:

No projeto inicial, dentro do obj_slot, eu coloquei um alarm0

E dentro desse alarm0 eu transferi o seguinte código que estava no mouse enter:

Código:
with obj_item_descr{
    instance_destroy()
}
instance_create(120 + (5 * 32),120,obj_item_descr)
obj_item_descr.texto = preco

e Dentro do mouse enter eu so coloquei isso:

Código:
alarm[0] = 1

kkkkk acredite funcionando perfeitamente, eu apenas dei um atraso para ele não pegar primeiro a função leave do objeto anterior.

chicoweb

Ranking : Nota C
Número de Mensagens : 666
Idade : 40
Data de inscrição : 15/05/2012
Notas recebidas : B+C
Reputação : 49
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Ajuda com Mouse Enter/Leave

Mensagem por fredcobain em Qua 26 Mar 2014, 16:52

Nossa, gambiarra mesmo kkkk
Mas, como diz Maquiavel: "O fim justifica os meios"

Obs: Na minha sugestão não precisava criar e destruir os objetos, só mexer na visibilidade e no valor deles.
=)

fredcobain

Ranking : Sem avaliações
Número de Mensagens : 691
Idade : 35
Data de inscrição : 14/04/2011
Reputação : 162
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Ajuda com Mouse Enter/Leave

Mensagem por chicoweb em Qui 27 Mar 2014, 22:20

A gambiarra virou solução mesmo kkkk

Código:
Obs: Na minha sugestão não precisava criar e destruir os objetos, só mexer na visibilidade e no valor deles.
=)

Não pode fred, porque haveria momentos do game que apareceriam duas txt ao mesmo tempo, sei q isso é relativo no meu game aconteceria sim.
Por isso a necessidade de destruir e criar novamente, entendeu?

obs: tem um script q usa tanto para itens no chao quanto para itens no inventario, por isso quero uma uma coisa so t´ligado

chicoweb

Ranking : Nota C
Número de Mensagens : 666
Idade : 40
Data de inscrição : 15/05/2012
Notas recebidas : B+C
Reputação : 49
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Ajuda com Mouse Enter/Leave

Mensagem por Tanker GT em Qui 27 Mar 2014, 22:37

Você poderia fazer assim:

mouse enter:
infor=instance_create(120 + (5 * 32),120,obj_item_descr)
infor.texto = preco

mouse leave:
if instance_exists(infor)
{with(infor)
{instance_destroy()}}

Era isso que você queria?

Tanker GT

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

Voltar ao Topo Ir em baixo

Re: Ajuda com Mouse Enter/Leave

Mensagem por Conteúdo patrocinado Hoje à(s) 21:50


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