2015-03-12 4 views
0

Я думаю, что это особый случай. Поскольку у меня есть функция обновления вне текущей функции, я должен получить доступ к переменной (объекту) sinEnemy в обновлении. Как я могу это сделать, когда мне нужны i и j? Это не полный код, как вы можете видеть, так как он принимает сотни или строк. Это всего лишь цикл for. (Х2). Итак, все, что мне нужно, - это доступ к функции sinEnemy в функции обновления.Как вызвать переменную вне цикла for?

for(i = 0; i < levelRows; i++){ 
     for(j = 0; j < levelCols; j++){ 
      if(level[i][j] == 3){ 
       // sinEnemy object 
       var sinEnemy = { 
        x: j * tileSize, 
        y: i * tileSize, 
        width: tileSize, 
        height: tileSize 
       } 
       // Change color to blue 
       ctx.fillStyle = 'blue'; 

       if(keys[84]){ 
        sinEnemy.x += 15; 
       } 
        // Draw sinEnemy 
        ctx.fillRect(sinEnemy.x, sinEnemy.y, tileSize, tileSize); 

       // Collide with sinEnemy 
       rectCollision(player,sinEnemy); 

       // var x = enemies1[i].x + Math.sin(enemies1[i].speed) * offset; 
      } 
     } 
    } 
+1

Похоже, проблема немного сложнее. Вы, вероятно, хотите * установить * все IxJ sinEnemys, как двумерный массив где-то в другом месте, чтобы их x и y не всегда были точным числом при каждом перерисовании холста. Для этого потребуется собственный цикл double-for, но это будет выполняться только один раз. Затем внутри * этого * для цикла просто извлекайте sinEnemy двумя индексами. – Katana314

ответ

0

Используйте глобальную переменную, другими словами объявите sinEnemy вне вашей функции.

+0

Я бы ответил на тот же комментарий, что и на другого парня выше. – GSquadron

+0

@GSquadron Если вы не можете использовать глобальную переменную, вы должны передать всю необходимую информацию своей функции обновления в качестве параметров – bwegs

0

Что как предыдущие ответы означают, но не было ясно, о это:

Вне для петель, объявить sinEnemy

var sinEnemy = new Array();

Затем внутри вашего для петли-вам Я подниму новый грех в ваш массив врагов.

sinEnemy[sinEnemy.length] = { 
    x: j * tileSize, 
    y: i * tileSize, 
    width: tileSize, 
    height: tileSize 
} 
Смежные вопросы