2015-05-01 2 views
0

Я работаю над простой игрой с Javascript, включая изменения в холсте HTML5. Есть ряд (10+) объектов, введенных в массиве:Сбросить массив до исходных значений

var boxes = []; 
    boxes.push({ 
     x: 0, 
     y:canvas.height - 370, 
     width: 400, 
     height: 20}); 
    boxes.push({ 
     x: 300, 
     y:canvas.height - 100, 
     width: 150, 
     height: 90}); 

Весь массив затем проходит через функцию обновления, которая изменяет значение х в зависимости от позиции игрока:

for (var i = 0; i < boxes.length; i++) { 
       if (boxes[1].x > -3000 + canvas.width) { 
        boxes[i].x -= robot.speed * modifier; 
        robot.x = canvas.width - 300; 
       }; 
      }; 

когда игрок умирает функция сброса запускается:

var reset = function() { 
      robot.x = 0; 
      robot.y = 500; 
      ++deaths; 
      }; 

Я ищу способ, чтобы сбросить все значения boxes массива исходных значений при выполнении этой функции, Essentia LLY сбросить карты, без необходимости вводить каждый вручную, т.е. boxes[1].x = 300

https://jsfiddle.net/to31b612/

+2

как насчет того, чтобы сделать копию исходного массива (т.е. резервного копирования) сразу после инициализируя его значениями и когда игрок умирает, вы копируете его из резервной копии? это вариант? – ochi

ответ

3

Просто инициализировать из одной функции:

var boxes; 
initBoxes(); 

function initBoxes() { 
    boxes = []; 
    boxes.push({ 
     x: 0, 
     y:canvas.height - 370, 
     width: 400, 
     height: 20}); 
    boxes.push({ 
     x: 300, 
     y:canvas.height - 100, 
     width: 150, 
     height: 90}); 
} 

Тогда просто вспомнить initBoxes() каждый раз, когда вам нужно инициализировать его.

+1

Это сработало отлично, мне просто пришлось изменить формат второго массива на нечто подобное и запустить его через функцию сброса в одно и то же время, спасибо! –

1

Можно просто инициализировать коробки внутри функции reset(), и убедитесь, что позвонить позвонить reset() до первого запуска игры тоже.

var deaths = -1; 
var boxes = []; 

function reset() { 
    robot.x = 0; 
    robot.y = 500; 
    boxes = [{ 
     x: 0, 
     y:canvas.height - 370, 
     width: 400, 
     height: 20 
    }, { 
     x: 300, 
     y:canvas.height - 100, 
     width: 150, 
     height: 90 
    }]; 
    ++deaths; 
} 
+0

На самом деле это не совсем сработало, по крайней мере, не с простым вырезом/пастой. Значения x были сдвинуты на 300 пикселей, но я думаю, что это было из-за того, как другие части кода использовали значения, иначе это выглядело бы так, как будто это сработает, спасибо! –

0

просто использовать 2 переменные

var initBoxes = []; 
initBoxes.push({ 
    x: 0, 
    y:canvas.height - 370, 
    width: 400, 
    height: 20}); 
initBoxes.push({ 
    x: 300, 
    y:canvas.height - 100, 
    width: 150, 
    height: 90}); 

var boxes = initBoxes; 

Тогда, когда-либо вам нужно сбросить ящики просто

boxes = initBoxes; 
Смежные вопросы