Dúvida: switch q é ativado só se todos os eventos estiverem a distância x

3 Respostas   149 Visualizações

0 Membros e 1 Visitante estão vendo este tópico.

dcdkei

  • *
  • Posts: 2
  • Ouros: 0
Tópico criado em: 23/10/2016 às 18:41 - Última modificação por King Gerar em 23/10/2016 às 18:45

Olá

estou tentando criar um switch q é só ativado caso todos os eventos do mapa estiverem a uma distância x do player.

Esse foi o código q escrevi, mas como não conheço tanto JS, não sei oq pode estar errado.

Obrigado

for (var j = 1; j >= n; j++) {
 if (Math.abs($gamePlayer.x - $gameMap.event(j).x) >= 8 || Math.abs($gamePlayer.y  -$gameMap.event(j).y) >= 8){
   $gameVariables.setValue(9, 1++);
      if (($gameVariables(9)) === n){
         $gameSwitches.setValue(2, true);
         }
      }
  }

n - seria depois mudado para a quantidade de eventos da pag q eu quero q estejam distantes do player.

Kyo Panda

  • Mito
  • *
  • Posts: 259
  • Ouros: 195
Resposta 1: 23/10/2016 às 19:14

Estava bem próximo do resultado:

Código: [Selecionar]
var eventDistance = 8, eventCount = 9, count = 0, switchId = 1;
$gameMap.events().forEach(function (event) {
    if (Math.abs($gamePlayer.deltaXFrom(event.x)) <= eventDistance && Math.abs($gamePlayer.deltaYFrom(event.y)) <= eventDistance) {
      count += 1; 
    }
});
if (count >= eventCount) {
  $gameSwitches.setValue(switchId, 1);
}

Você até pode utilizar uma variável como estava fazendo, mas não há a necessidade.

Coloque esse script num evento com gatilho de Processo Paralelo.

:ok:

TonyHart

  • *
  • Posts: 144
  • Ouros: 126
  • Born in 95 to die
Resposta 2: 23/10/2016 às 19:23

Só pra complementar, no MV, existe uma função que calcular distância (Manhattan) entre dois pontos:

Código: [Selecionar]
$gameMap.distance(x1, y1, x2, y2);
Born in 95 to die

dcdkei

  • *
  • Posts: 2
  • Ouros: 0
Resposta 3: 23/10/2016 às 19:26

Estava bem próximo do resultado:

Código: [Selecionar]
var eventDistance = 8, eventCount = 9, count = 0, switchId = 1;
$gameMap.events().forEach(function (event) {
    if (Math.abs($gamePlayer.deltaXFrom(event.x)) <= eventDistance && Math.abs($gamePlayer.deltaYFrom(event.y)) <= eventDistance) {
      count += 1; 
    }
});
if (count >= eventCount) {
  $gameSwitches.setValue(switchId, 1);
}

Você até pode utilizar uma variável como estava fazendo, mas não há a necessidade.

Coloque esse script num evento com gatilho de Processo Paralelo.

:ok:

Nossa! Vlw msm! só faltava isso
bom vou testar aqui!

obrigado!