Вопросы касательно архитектуры приложения на примере змейки
Доброго времени суток!
Делаю змейку, есть несколько вопросов. Сразу замечу, что я нуб в программировании, поэтому заранее извиняюсь, если что-то не понятно. Попытаюсь объяснить как смогу. 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/ |
держи в объекте только то, что связано с этим объектом. подобные проверки, которые напрямую связаны с менеджером я бы вынес в менеджер, а необходимые свойства змейки и фруктов - получил через геттеры этих объектов
|
Часовой пояс GMT +3, время: 10:19. |