Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

self,other e outras coisas

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
Eduardo Macedo
Programador
Programador
Reações: 0
Mensagens: 31

self,other e outras coisas

Mensagem por Eduardo Macedo » Ter Out 11, 2016 1:13 am

Tenho 3 baús na room feito com um objeto
cada um foi configurado pra ter um loot diferente
quando clico ele abre o inventário contendo o que tem dentro.

uso uma variável open pra aparecer ou não o inventário de cada baú
o problema vem agora.
as condições são :

Código: Selecionar todos

se algum baú estiver aberto
{
       fecha todos os baús;
       abre somente o baú que foi clicado;
}
senão se estão fechados
{       
       abre o baú que foi clicado;
}
ja usei other, self , obj.open. mas sempre da algum tipo de bug , as vezes funciona somente com o primeiro baú , mas quando faço o teste com o resto não da certo
sempre abre vários baús.

Avatar do usuário
Drako
Novato
Novato
Reações: 0
Mensagens: 16

Re: self,other e outras coisas

Mensagem por Drako » Ter Out 11, 2016 2:46 am

Cara acho que isso resolve se o clique for no objeto em questão.

Código: Selecionar todos

// Se for clicado
repeat (instance_count) {
    with (object) {
        other.open := false;
    };
    object.open := true;
};
Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam.

Avatar do usuário
Superbomber
Programador
Programador
Reações: 0
Mensagens: 283
Localização: Natal-RN

Re: self,other e outras coisas

Mensagem por Superbomber » Ter Out 11, 2016 11:42 am

A resposta do Drako é quase perfeita...
Mas o repeat é desnecessário, o object.open não vai ter o resultado desejado e o other.open irá alterar o valor somente do objeto que executou tal código.

Passando um objeto para o with o código é executado para todas as instâncias do mesmo.
E ao definir o valor de um objeto é também definido para todas as instâncias.

Faça desta maneira:

Código: Selecionar todos

// Evento de clique do baú
obj_bau.open = false;
open                = true;
Simples, não? Primeiro definimos o valor open de TODAS(inclusive esta) as instâncias para falso, e então muda open para true desta instância específica que foi clicada.
A ordem das coisas muda tudo. Algo que costumo dizer, talvez lhe ajude a raciocinar melhor sobre o assunto.

Algumas informações úteis: https://docs.yoyogames.com/source/dadiospice/002_reference/001_gml%20language%20overview/401_18_with.html

Bye. :flw:
Entrem neste link com o JavaScript desabilitado e vejam a mágica: https://tgmbrasil.com.br/?PageSpeed=n0script

Avatar do usuário
Drako
Novato
Novato
Reações: 0
Mensagens: 16

Re: self,other e outras coisas

Mensagem por Drako » Ter Out 11, 2016 12:02 pm

Putz! Nem percebi o que tinha escrito de fato (que gafe)!
Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam.

Avatar do usuário
Eduardo Macedo
Programador
Programador
Reações: 0
Mensagens: 31

Re: self,other e outras coisas

Mensagem por Eduardo Macedo » Ter Out 11, 2016 4:36 pm

desculpe , esqueci de mencionar que se o baú clicado esta aberto ele fecha , o problema maior é ai , eu ja tentei antes fazer dessa forma , fechando todos primeiro
mas o q ocorre é que o clicado é fechado logo após aberto novamente, por causa da condição if open == false{open =  true}.

Avatar do usuário
Superbomber
Programador
Programador
Reações: 0
Mensagens: 283
Localização: Natal-RN

Re: self,other e outras coisas

Mensagem por Superbomber » Ter Out 11, 2016 4:48 pm

'-'

Bom, Eduardo.... Neste caso suma com esta dita condição. Dá adeus pra ela. :yes:

E usa o código:

Código: Selecionar todos

// Evento clique no baú.
if(!open) obj_bau.open = false; // Só fecha os outros baús se este estiver sendo aberto
open = !open; // Se aberto, fecha. Se fechado, abre.
Entrem neste link com o JavaScript desabilitado e vejam a mágica: https://tgmbrasil.com.br/?PageSpeed=n0script

Avatar do usuário
Eduardo Macedo
Programador
Programador
Reações: 0
Mensagens: 31

Re: self,other e outras coisas

Mensagem por Eduardo Macedo » Ter Out 11, 2016 5:12 pm

Eu consegui resolver , observei suas dicas e me veio uma ideia em mente.
primeiro coloquei se quando clicasse armazenava em uma variável se o baú estava aberto ou fechado.
depois fecho todos os baús
e depois lanço a condição:

Código: Selecionar todos

a = open // variável recebe o valor de open
obj_loot.open = false // todos os baús são fechados

//verifica se antes de todos estarem fechados , o baú clicado estava aberto ou não

if a == true  //se estava aberto
{
    open = false // ele fecha .
}    
else // se não estava aberto
{
    open =  true // ele abre
}
dessa forma, só um baú é aberto por vez , obrigado por ajudarem

Responder

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes