на главную почта поиск
 
поиск
Диона Холдинг
   
   
FLASH-версия 
 Версия для печати 
  Новости
 

   
Новости  
   

Глава 6. Открытая дверь

Как долго вы можете оставаться в одной комнате? Сколько вы можете смотреть на одну и туже картинку? О, вам нужно много комнат. Один из путей изменения карты, создать новую карту с использованием плиток и корректно разместить в ней Героя.

Чтобы создать две комнаты, задаем два массива описания карт:

myMap1 = [

[1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 2],
[1, 1, 1, 1, 1, 1, 1, 1] ];

myMap2 = [

[1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 1, 0, 1],
[3, 0, 0, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1] ];

В главном объекте также установим свойство - номер используемой карты.

game={tileW:30, tileH:30, currentMap:1}

Итак мы начинаем с карты myMap1. Чтобы вызвать функцию buildMap для построения карты, мы формируем требуемое имя переменной _root["myMap"+game.currentMap] и получаем то, что хотели - myMap1:

buildMap(_root["myMap"+game.currentMap]);

Теперь нам нужен новый объект – двери:

// Плитка шаблон с новыми свойствами
game.Doors = function (newMap, newcharx, newchary) {

this.newMap=newMap; // Карта
this.newcharx=newcharx; // Позиция Х старта Героя
this.newchary=newchary; // Позиция У старта Героя
};


game.Doors.prototype.walkable = true;
game.Doors.prototype.frame = 3;
game.Doors.prototype.door = true;

// Плитка Дверь тип 2 на основе нового шаблона
game.Tile2 = function () { };
game.Tile2.prototype = new game.Doors(2, 1, 4);

// Плитка Дверь тип 3 на основе нового шаблона
game.Tile3 = function () { };
game.Tile3.prototype = new game.Doors(1, 6, 4);

Как вы уже заметили, плитка дверь является проходимой, анимацию показываем 3-им кадром и установим новое свойство door значением true. Будем его использовать, чтобы определить поведение Героя, остановившегося около двери.

Двери (как объекты) используют механизм наследования, возможно, это будет какой-либо ужасный звук, но это сейчас нам не интересно. Объекты "doors" созданы с использованием шаблона "Doors" и все экземпляры плиток этого типа будут иметь свойства: будут проходимы и показываться 3-им кадром.

Каждая дверь должна содержать следующую информацию: номер следующей карты (переход на другой уровень) и начальную позицию Героя на карте. Если не перемещать Героя в новую позицию, то может получиться конфуз (например, Герой окажется в стене). Внимание, несколько слов о новых координатах Героя.

Предположим, разместим Героя на следующей карте на плитке двери, как будто он выходит из стены. В этом случае возможно зацикливание перехода Героя с одной карты на другую, так как на обеих картах Герой будет на плитке двери. В результате процесс движения зацикливается. Напоминаю, лучше размещать Героя на плитке рядом с дверью.

Для объекта дверь у нас есть 3 свойства - newmap, newcharx, newchary. Итак, когда число 2 установлено в свойстве newmap , мы знаем, что плитки этой карты должны быть созданы на основе шаблона Tile2, но, так как объект Tile2 создан на основе шаблона Doors, то он (объект Tile2) приобретает все свойства объекта Doors. Tile2 объекты, расположенные на новой карте, будут посылать Героя на карту map2. Но на карте может распологаться не одна дверь. Возможно вы захотите разместить плитку типа дверь на нескольких картах и все они будут посылать Героя на карту map2.

Больше действий

В функции moveChar добавим код в конце, прежде чем вернем true:

// Проверим (Объект в Двери)?
if (game["t_"+ob.ytile+"_"+ob.xtile].door and ob==_root.char) {

// ДА – меняем карту
changeMap (ob);
}

Здесь, после перемещения объекта мы проверим – обект стоит на плитке двери. Т.к. мы не хотим изменения карты для шаров или кеглей, то нужно проверить что текущий объект - Герой.Будем использвоать функцию changeMap для смены карты:

//****************
// Функция: changeMap
// Назначение: Смена карты
// Параметры:
// ob - объект,
// Возвращает:
// ****************************
function changeMap (ob) {

// Сформируем имя плитки, где стоит объект
var name = "t_"+ob.ytile+"_"+ob.xtile;

// Запомним новый номер карты
game.currentMap = game[name].newMap;
// Запомним новое местоположение объекта (Героя)
ob.ytile = game[name].newchary;
ob.xtile = game[name].newcharx;
// Запомним текущий кадр
ob.frame = ob.clip._currentframe;
// Построим новую карту
buildMap(_root["myMap"+game.currentMap]);

}

Код простой как 3 рубля, получаем значения из объекта дверь и обновляем переменные - currentMap, ytile and xtile . Новые свойства объекта - ob.frame текущее направление движения Героя по клипу. Без этого, наш Герой будет показывать свое движение в frame1 каждый раз, когда он вступает на новую карту. И, конечно, нужно добавить строку вызова функции построения карты, после того как разместим Героя.

char.clip.gotoAndStop(char.frame);

Все, теперь можно создавать карты и поиграть с дверями.

Можно загрузить исходные коды отсюда.

Эта глава была переработана 13 дек. 2003, чтобы включить идеи об объектах двери и решения проблемы множества дверей.

Есть вопросы - пишите мне на semikin@dionaholding.ru

Читаем дальше - Глава 7. Прыжки

Возвращаемся на Начало учебника

 

Всего: 5

Электронные формы от Adobe

14 ноября с.г. компания представила новую версию всем известного средства Adobe Acrobat. 8-ая по счету версия принесла новые возможности по переходу от бумажных документов к электронным.
читать
 

АрмПарк - Универсальная учетная система

Серия материалов о программе - АрмПарк - Универсальная учетная система. Решение для тех кому необходимо быстро создать и внедрить электронную картотеку по учету - документов, матералов, оборудования, ресурсов или зеленых человечков.
читать
 

Программирование игр на основе плиток

Представляется перевод замечательного учебника по созданию движка игры на основе плиток (Tile Based Games). Я благодарен автору Tonypa за разрешение публикации перевода. Если у Вас возникают вопросы, пишите и я постараюсь Вам помочь.
читать
 

Универсальная информационная система-конструктор Учет документов (Доклад на конференции).

Доклад на Третьей практической конференции по Электронному Документообороту - "Программа "Учет документов" ", 9 декабря, Москва, Мэрия Москвы.
читать
 

Интеграция систем с использованием новых технологий

Один из ключевых моментов совершенствования электронного бизнеса - это повышение гибкости процессов за счет ускорения реализации решений в области интеграции.
читать
Всего: 5

Rambler's Top100

   
   

новости

продукты

решения

услуги

о компании

   
   
125315, Москва, Часовая ул., д.30
Телефон: (095)797-32-82; Факс: (095)797-32-81
© 2005 ООО "Диона Холдинг"
Администратор: admin@dionaholding.ru