14. СТАТИЧЕСКИЕ КИСТИ
статические кисти, материалы, примеры




Карта материалов

Пока что мы с вами работали только с динамическими кистями. Но большая часть карты игры состоит именно из статических кистей. И, не смотря на то, что они статические, иногда в ходе игры приходится работать и с ними.

Одно из важных отличий статических кистей в том, что они могут печататься не только на экране, но и на карте материалов, сообщая игре где игроку стоять, а где падать iи т.д. Именно из-за этого свойства статических кистей иногда в игре приходится работать и с ними.

Запустите прилагающийся пример и нажмите клавишу F4. Вы увидите карту материалов, на которой кисти отображаются специальными цветами, изображающими тот или иной материал. Стена из камней, которая до сих пор была красной, стала зеленой, указывая на то, что это твердый (blocking) материал. Нажмите F4 еще раз, и вы увидите плотность материалов. Еще одно нажатие F4 переключит вас в режим, когда на экране вообще ничего не отображается. И, наконец, еще одно нажатие F4 вернет нормальный режим игры. Клавиша F4 доступна только в отладочном режиме (developer mode), когда установлен параметр dev=1 в файле dizzy.ini, и не должна быть разрешена в финальной версии игры. На то, что вы находитесь в отладочном режиме, указывает надпись dev-mode в верхнем левом углу экрана. В прилагающемся примере тот режим по умолчанию разрешен.

Теперь время искупаться в бассейне. В... кислотном бассейне! Начните с прилагающегося примера и добавьте статическую (static) кисть, отображающую анимированную воду (tile=148), с установленным материалом hurt (отнимающий энергию), и с задержкой delay=3. Убедитесь так же, что свойство draw равно 3, указывающее на то, что кисть рисуется и на экране, и в карте материалов.

Поместите бассейн под знак DizzyAGE, как показано на рисунке. Сбоку добавьте камень, который вы можете взять от стены, нажав правую или среднюю кнопку мыши, и выбрав во всплывающем меню pick brush (взять кисть).

Сохраните карту и запустите игру. Попробуйте водичку!
Обратите внимание на то, что в карте материалов (F4) вода нарисована оранжевым цветом, указывая на то, что это материал отнимающий энергию.


Свойства статических кистей

Работа со статическими кистями аналогична работе с динамическими кистями. Но для них определен свой набор свойств, чтобы не путать их со свойствами динамических кистей:
B_LAYER, B_X, B_Y, B_W, B_H, B_TILE, B_FRAME, B_MAP, B_FLIP, B_COLOR, B_SHADER, B_SCALE, B_ID, B_MATERIAL, B_DRAW, B_DELAY, B_ANIM

BrushFind(id)

Эта функция движка используется для поиска статической кисти на карте по ее уникальному id-номеру. Если кисть с заданым id существует, функция возвращает целочисленный индекс (index) кисти во внутреннем списке статических кистей. Этот индекс используется для доступа к статическим кистям другими функциями движка. Если кисти с заданным id не найдено, функция возвращает -1.

BrushGet(idx,property)

Эта функция движка используется для получения целочисленного значения какого-либо свойства статической кисти. Для доступа к кисти она использует индекс, полученный с помощью функции BrushFind. А также целочисленное значение, обозначающее номер свойства кисти, обычно представленное в виде предопределенных названий, типа B_X, B_Y, B_ID, B_MATERIAL и т.д.

BrushSet(idx,property,value)

Эта функция движка используется для установки целочисленного значения какого-либо свойства статической кисти. Ей так же передается внутренний индекс кисти, полученный с помощью функции ObjFind.


Работая в скриптах со статическими кистями, вы не должны изменять их координаты или размер (впрочем, перемещения и изменения размера внутри комнаты все же допускаются). Как и в случае с динамическими кистями, не разрешается менять id статической кисти. Основное свойство, которое обычно приходится менять в игре - это B_DRAW и, иногда, B_MATERIAL.

Задачка с дверью

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

Столкновение со статической кистью определяется с точностью до пикселя, а значит заграждение чего-либо с помощью статической кисти предпочтительней, чем с помощью динамического объекта с установленным свойством hard collider. Именно поэтому наша дверь и сделана из статической кисти.

Начните с прилагающегося примера и попробуйте нарисовать следующую сцену:

Постройте домик из статических твердых кистей (draw=3, material=block), за исключением правой стены дверного проёма, для которой (draw=1, material=air).

Добавьте изображение открытой двери (tile=123, type=static), и сделайте ее невидимой (draw=0, material=air). Установите её id=2000, и поместите, как показано на картинке.

Теперь добавьте изображение закрытой двери (tile=123 (только левая часть открыой двери), draw=3, material=block). Установите её id=2001, и поместите поверх открытой двери, рядом со стеной.

Добавьте триггер для функции обработки (tile=0, color=800000ff (полупрозрачный), type=dynamic, draw=0, class=action). Установите ему id=1000 и поместите поверх открытой двери, как показано на картинке. Для более удобного редактирования перекрывающихся кистей предпочтительнее использовать разные слои.

Теперь сохраните карту. В файле gamedef.gs установите параметр PLAYER_BEGINX равным 680, чтобы игрок появился немного левее. А так же добавьте следующий колбек, обрабатывающий ваш триггер.



Как вы видите, лучший способ закрывать и открывать дверь - это просто показывать и скрывать отображающую её статические кисти. Для удобства состояние двери хранится в свойстве O_STATUS. Так же нам необходимо проверять при закрытии двери, не стоит ли игрок в дверном проёме, потому что твердая дверь поместится прямо на игрока (кстати, попробуйте это сделать ради интереса, и посмотрите, что получится).

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

GameCommand( CMD_REFRESH )
Эта функция перерисовывает карту материалов, и обязательно должна быть вызвана после изменения соответствующих свойств одной или нескольких статических кистей, для того чтобы изменения на карте материалов вступили в силу.



Домашняя работа

Усложните задачку с дверью так, чтобы для её открытия нужен был ключ. Состояние замка двери можно размесить в свойстве O_USER триггера. Открыть запертую дверь должно быть невозможно.

Попробуйте сделать лучше,
чем в нашем примере.

Так же поэкспериментируйте с другими материалами, такими, как облака или огонь.




 

Hosted by uCoz