Доброго времени суток!
Делаю змейку, есть несколько вопросов. Сразу замечу, что я нуб в программировании, поэтому заранее извиняюсь, если что-то не понятно. Попытаюсь объяснить как смогу.
1) Есть конструкторы объектов GameManager, Fruit и Snake:
function GameManager() {
// ...
}
function Fruit() {
// ...
}
function Snake() {
// ...
}
В GameManager я объявляю свойства snake и fruit и вызываю соответствующие конструкторы:
this.snake = new Snake();
this.fruit = new Fruit();
Так я получаю доступ ко всем свойствам и методам Fruit И Snake внутри GameManager. Но дело в том, что в Snake мне необходимо каким-то образом получить значения свойств GameManager, например при выходе за границы поля змейки вызывать сделать Game Over:
Snake.prototype.move = function () {
var self = this,
moveTimer;
moveTimer = setInterval(function () {
switch (self.direction) {
case 'left':
self.x -= self.cellWidth;
break;
case 'up':
self.y -= self.cellHeight;
break;
case 'right':
self.x += self.cellWidth;
break;
case 'down':
self.y += self.cellHeight;
break;
}
addCell.call(self, self.x, self.y);
if ((self.x < 0 || self.x > GameManager.prototype.width - self.cellWidth) || (self.y < 0 || self.y > GameManager.prototype.height - self.cellWidth)) {
clearInterval(moveTimer);
return game.over();
}
removeCell.call(self, self.coords[0][0], self.coords[0][1]);
}, this.speed);
function addCell(x, y) {
this.coords.push([x, y]);
GameManager.getCtx().fillStyle = this.cellColor;
GameManager.getCtx().fillRect(x, y, this.cellWidth, this.cellHeight);
GameManager.getCtx().strokeStyle = this.cellStroke;
GameManager.getCtx().lineWidth = 2;
GameManager.getCtx().strokeRect(x, y, this.cellWidth, this.cellHeight);
}
function removeCell(x, y) {
GameManager.getCtx().clearRect(x, y, this.cellWidth, this.cellHeight);
this.coords.shift();
}
}
Как это реализовать?
2) Есть конструктор объекта Fruit:
this.x = null;
this.y = null;
this.width = 30;
this.height = 30;
var self = this;
var image = new Image();
image.onload = function () {
self.image = image;
}
image.src = 'images/grapefruit.png';
this.image = image;
Внутри него задается изображение, но при заходе на страничку в первый раз оно не загружается, хотя событие onload прописано. Почему?
3) В целом хотелось бы знать - гуанокод или нет?
Спасибо!
P.S. Весь код можно посмотреть здесь:
snake.js
Это на
jsfiddle/