Больше плиток
Как только созданы наши плитки, как объекты, тут же можно использовать некоторые преимущества объектно-ориентированного программирования. Объекты замечательны (кроме того что белые, пушистые и всеми любимые) тем, что они могут наследовать свойства друг друга. Я надеюсь, вы уже прочитали предыдущую главу, где приводится описание свойств протипов плиток. (Здесь объекты есть, методов нет. Т.е. объект имеет свойства, но не имеет поведения. Поведение задается с помощью внешних функций.) game.Tile0= function () {}; game.Tile0.prototype.walkable=true; game.Tile0.prototype.frame=1;
Это все, что нам нужно написать для любого типа объекта плитка только один раз. Такой способ защищает нас от логических ошибок и сохраняет от проблем ввода с клавиатуры при описании различных типов плиток. Давайте объявим главный класс Tiles : game.TileClass = function () {}; game.TileClass.prototype.walkable=false; game.TileClass.prototype.frame=20;
Считаем, что любая плитка в игре не доступна для прохода по умолчанию и показывается 20 кадром. Конечно множество плиток на самом деле доступны для прохода и показываются разными кадрами (и чем 20 кадр лучше других, да ни чем, все отлично, да и кадр хорош). Пока проблем могло бы быть и побольше, не волнуйтесь, будьте счастливы, ну, а мы продолжим свой тяжкий труд, и мир станет лучше. Теперь создадим несколько разных типов плиток: // Так создаются классы и свойства во Flash 5 // Один тип плиток game.Tile0 = function () {}; game.Tile0.prototype.__proto__ = game.TileClass.prototype; game.Tile0.prototype.walkable=true; game.Tile0.prototype.frame=1; // Другой тип плиток game.Tile1 = function () {}; game.Tile1.prototype.__proto__ = game.TileClass.prototype; game.Tile1.prototype.frame=2; // Третий тип плиток game.Tile2 = function () {}; game.Tile2.prototype.__proto__ = game.TileClass.prototype; // --------------------------------
Используя эту маленькую конструкцию "__proto__", мы можем дополнить объект свойствами снова и снова, наши плитки будут наследовать свои свойства от класса TileClass . Итак, когда захотим создать новую плитку, то напишем: game.Tile2 = function () {}; game.Tile2.prototype.__proto__ = game.TileClass.prototype;
Все плитки, созданные позднее на основе шаблона, наследуют свойства walkable=false и frame=20 из класса TileClass . Неправда ли, это очень замечательно? Но это еще не все прелести, мы можем изменить свойства плиток полученных от TileClass . Не верите? Это правда, Смотрите: game.Tile0 = function () {}; game.Tile0.prototype.__proto__ = game.TileClass.prototype; game.Tile0.prototype.walkable=true; game.Tile0.prototype.frame=1;
Объект Tile0 получил свойство walkable=false от TileClass, но теперь объявим для него новое свойство walkable=true , старое свойство изменено и все плитки на основе Tile0 теперь абсолютно проходимы и будут показаны 20 кадром.
Я не слишком вас перегрузил, мы рассмотрели пару плиток и несколько свойство, но, если вы хотите создать игру с множеством разных плиток, да еще, чтобы каждый тип плитки имел бы множество разных свойств, то скоро это шлепание по клавиатуре, вам наскучит. Есть вопросы - пишите мне на semikin@dionaholding.ru Читаем дальше - Глава 3. Герой Возвращаемся на Начало учебника.
|