Página 1 de 1

Interação entre instances do mesmo objecto

Enviado: Seg Out 31, 2016 2:44 pm
por Lunion4saken
Bom dia,
Gostaria de pergunta se é possivel criar alguma interação entre instances do mesmo objecto por exemplo o objecto A tem a instância A.1, A.2 e A.3 . As intancias tem de ver que estam sempre a x de distancia das outra duas( sem usar a instance_nearest e instance_furthest já que poderei usar mais de 3 instances).

Agora noutro caso, existe uma variavel true ou false e todos as instancias teram de ver se essa variavel está true ou false para cada uma das outras ou então para a mais proxima. E se for true elas aproxima-se dessa ou se for false não.

E a terceira interação que quero é o mesmo da anterior mas em vez de ser os outros a ver se a variavel está true ou false é o proprio objecto ao estar true dizer aos outros que se podem aproximar.

Obrigado

Re: Interação entre instances do mesmo objecto

Enviado: Seg Out 31, 2016 5:03 pm
por All-x
Primeira questão:

Depende do comportamento dessas instâncias, elas estão sempre livres e apenas ao aproximar que tem esse limite ou sempre há esse limite?

Segunda questão:

Você pode fazer uma varredura, mas tem que definir um critério para fazer um objeto seguir o outro, ainda é pela menor distância? 

O terceiro questionamento é redundante, é a mesma coisa.

Enfim, acho que entendi mais ou menos o que você quer fazer. Faça uma experimentação: crie um objeto a parte com uma sprite de um bloco branco e coloque isso no Create:

Código: Selecionar todos

// Torna a escolha aleatória
randomize();

// Escolhe entre true e false
ligado = choose(true, false);

// Muda de cor se esta 'ligado'
if ligado 
{
    image_blend = c_red;
}
E isso no Step:

Código: Selecionar todos

// Maior distância
var distancia = 32000;

// Instância mais próxima
var maisProximo = noone;

// Percorre todas as instâncias de 'block'
for (var i =0; i < instance_number(block); i++)
{
    // Guarda a isntância atual
    var o = instance_find(block, i);
    
    // Caso verifica a si mesmo pula esta etapa
    if (o.id == id) continue;
    
    // Caso a instância esteja 'ligada' e a ditância é menor
    if (o.ligado == true and distance_to_object(o) < distancia)
    {
        // Escolhe o mais próximo
        maisProximo = o;
        
        // Define nova distância minima
        distancia = distance_to_object(o);
    }
}

// Caso tenha encontrado a instancia
if (instance_exists(maisProximo))
{
    // Define uma distancia minima de aproximação
    if distance_to_object(maisProximo) > 64
    {
        // Se aproxima da instância
        mp_potential_step(maisProximo.x, maisProximo.y, 4, true);
    }
}
Agora espalhe varias instâncias desse objeto na room e veja o resultado. Com base nisso podemos modificar e chegar ao ponto que você quer.

Os objetos se aproximam de quem é vermelho, inclusive quem é vermelho. Mantendo uma distância de 64. Ou seja, os brancos ainda conseguem ficar perto um do outro. Basta modificar as regras ao seu gosto.

FLWS!

Re: Interação entre instances do mesmo objecto

Enviado: Seg Out 31, 2016 5:38 pm
por Lunion4saken
Obrigado,
Era isso que eu queria alterei um pouco o código para que quando ligado anda-se randomicamente em vez de procurar outro instance ligado e fiz isso no step com mp_potential_step e aconteceu algo engrançado, todos vão se aproximar cada vez mais do meio e os brancos são paredes para os vermelhos.

E o gamemaker tem alguma funcionalidade que faça esses espaços automaticamente?

Agora o resto ainda tenho de testar como vou fazer para o projeto.

Re: Interação entre instances do mesmo objecto

Enviado: Seg Out 31, 2016 7:22 pm
por All-x
Lunion4saken escreveu:Obrigado,
Era isso que eu queria alterei um pouco o código para que quando ligado anda-se randomicamente em vez de procurar outro instance ligado e fiz isso no step com mp_potential_step e aconteceu algo engrançado, todos vão se aproximar cada vez mais do meio e os brancos são paredes para os vermelhos.

E o gamemaker tem alguma funcionalidade que faça esses espaços automaticamente?

Agora o resto ainda tenho de testar como vou fazer para o projeto.
Basta coloca o terceiro argumento de mp_potential_step como false.

Você pode tentar usar estudar as mp_grid:

Motion Planing

São movimentos feitos com base em uma grade, talvez sirva para encontrar esse espaçamento que quer.

FLWS!

Re: Interação entre instances do mesmo objecto

Enviado: Seg Out 31, 2016 8:12 pm
por Lunion4saken
Comecei a fazer o projeto usando o que me disse, mas cheguei a um problema. 
Presiso de fazer a contagem de objectos que estão proximos e tem a variavel = true, sendo que todos os outros, ou muito distantes ou com a variável false não sejam contados. Para depois multiplacar por um valor que decrece.

No caso do meu projeto existem arbustos que com o tempo vão adicionando comida e coelhos que tem fome e vão aproximar-se. O problema é que não posso usar o comando instance_nearerst se houver por exemplo dois coelhos a comer no mesmo arbusto. Já que o numero de comida do arbusto diminui. O que quero é que ela diminua n vezes mais rapido conforme os n coelhos que estiver a menos de x distancia e estajam com a variavel fome em true. (tudo o resto já fiz)

Re: Interação entre instances do mesmo objecto

Enviado: Seg Out 31, 2016 8:50 pm
por All-x
Se tivesse falado dos arbustos e coelhos antes teria facilitado bastante kkkkkkk

Bom, vamos lá, é bem simples então, fiz um exemplo:

Exemplo - Coelhos

FLWS!

Re: Interação entre instances do mesmo objecto

Enviado: Ter Nov 01, 2016 9:55 am
por Lunion4saken
Obrigado,
Não sabia que também se pode alterar variáveis de outras instâncias.
Bem agora já funciona.
E o espaçamento que estava a falar é no código não no jogo em si. Fica um pouco confuso tudo amontoado por isso queria saber se o gamemaker tem algo que faça os espaçamentos automaticamente no código.

E como é que querias essa apliacação gmz? quando salvo só aparece a pasta em gmx

Re: Interação entre instances do mesmo objecto

Enviado: Ter Nov 01, 2016 12:32 pm
por All-x
Lunion4saken escreveu:Obrigado,
Não sabia que também se pode alterar variáveis de outras instâncias.
Bem agora já funciona.
E o espaçamento que estava a falar é no código não no jogo em si. Fica um pouco confuso tudo amontoado por isso queria saber se o gamemaker tem algo que faça os espaçamentos automaticamente no código.

E como é que querias essa apliacação gmz? quando salvo só aparece a pasta em gmx
Esse espaçamento você vai fazer com o mp_grid, basta ler a documentação, é bem simples.

Para criar o gmz é só Clicar em File -> Expor Project.

FLWS!

Re: Interação entre instances do mesmo objecto

Enviado: Ter Nov 01, 2016 5:34 pm
por Lunion4saken
Secalhar é melhor demostrar o que queria dizer com espaçamento:


Código: Selecionar todos

 If variavel= true {
if variavel2=false{
variavel3=false
}
}

para

if variavel=true{
      if variavel2=false{
           variavel3=false
      }
} 



A minha pergunta do espaçamento era se o gamemaker tem alguma funcionalidade que faz com que aqueles espaços façam automaticamente?

Re: Interação entre instances do mesmo objecto

Enviado: Ter Nov 01, 2016 5:43 pm
por All-x
Lunion4saken escreveu:Secalhar é melhor demostrar o que queria dizer com espaçamento:
If variavel= true {
if variavel2=false{
variavel3=false
}
}

para

if variavel=true{
      if variavel2=false{
           variavel3=false
      }
}

A minha pergunta do espaçamento era se o gamemaker tem alguma funcionalidade que faz com que aqueles espaços façam automaticamente?
Não, a identação não é automática. Espero que isso mude na nova versão que vai sair esse mês.

FLWS!