При первом запуске я получил в консоли Firebug следующее:
бесполезный вызов setInterval (пропущены кавычки вокруг аргумента?)
[Break On This Error] setInterval (moveBall (шарики, коробка), 100);
Помещение кавычек вокруг 'moveBalls (шары, коробка)' оживляет вещи.
Между прочим, вы можете использовать наследование прототипов, чтобы сделать вашу функцию немного более эффективной, методы в Box даны для каждого экземпляра. Чтобы они наследовали методы, поместите их в прототип конструктора:
Box.prototype = {
getX: function() {return this.boxx;},
getY: function() {return this.boxy;},
getWidth: function() {return this.boxWidth;},
getHeight: function() {return this.boxHeight;},
getBalls: function() {return this.ball;},
paintMe: function() {
context.fillStyle = "black";
context.strokeRect(this.boxx, this.boxy, this.boxWidth, this.boxHeight);
}
};
Обратите внимание, что в javascript ключевое слово этой функции устанавливается вызовом, а не тем, как вы объявляете функцию (хотя вы можете использовать ES5 bind , но это пока широко не поддерживается).
Некоторые другие советы:
В конструкторе Box вы создаете локальные переменные, но вы действительно хотите назначить их новому экземпляру Box, поэтому используйте this вместо var :
function Box() {
this.boxx=20;
this.boxy=20;
this.boxWidth=460;
this.boxHeight=360;
}
В функции clearBox вы используете this , когда оно не установлено в вызове, поэтому оно ссылается на window . Просто избавьтесь от этого, вы передаете box в функцию, поэтому обращайтесь к ней напрямую:
function clear(box) {
context.clearRect(box.boxx, box.boxy,
box.boxWidth, box.boxHeight);
}
То же самое относится к функциям moveBall и moveAndCheck , просто избавьтесь от this (я думаю, вам следует изучить, как this обрабатывается в javascript, о нем много статей, он сильно отличается от Java).
Теперь шарики будут красиво подпрыгивать внутри коробки.