[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Игрострой (Game maker)
Игрострой
АДМИНДата: Среда, 2012/Авг/15, 13:33 | Сообщение # 1
Группа: Администрация
Сообщений: 62
Награды: 6
Репутация: 9
Статус: Offline


1.3.1: Что такое шаг, что такое скорость комнаты?






 


Ответ: В Game Maker за секунду проходит определённое количество шагов. Это количество определяет переменная room_speed (её можно задать в свойствах комнаты: settings -> Speed). Событие step event называется событием шага именно потому, что оно выполняется каждый шаг. К примеру, если в событии step event объекта вы напишете код «score += 1», и установите скорость комнаты на 30 шагов, то за секунду переменная score увеличится на 30. Таким же образом, если вы напишите «image_speed = 1», то за секунду у спрайта сменится 30 кадров, потому что переменная image_speed хранит в себе значение, на которое изменяется кадр спрайта каждый шаг. То же относится и ко времени. Если вы напишете «alarm[0] = 1», то событие таймера произойдёт через 1/30 секунды (для общего случая - 1/room_speed).


 


 




1.3.2. Что такое FPS? Это тоже самое, что и скорость комнаты?






 


Ответ: В идеале, за секунду должно выполнится <room_speed> шагов, но иногда скорость выполнения шага медленнее, чем нужно. В этом случае время на выполнение шага превышает «1000/room_speed» миллисекунд (секунда состоит из 1000 миллисекунд, всего должно выполниться <room_speed> шагов). Количество шагов, которые выполняются за секунду, показывает переменная fps (Frames Per Second – количество кадров в секунду, не путать с First-Person Shooter). Например, если скорость комнаты - 30 шагов, а fps - 23, то в среднем шаг выполняется 43.4 миллисекунды(1000/23). В идеале, он должен выполняться меньше чем 33,(3) миллисекунды. Не забывайте, что в событие шага входит не только те действия, которые вы вписали в step event, но и отображение изображения на экране, обработка событий и др. Если fps меньше чем room_speed - значит нужно оптимизировать код в постоянно повторяющихся, или часто вызываемых событиях (особенно стоит обратить внимание на step, end step, begin step и draw events). Обратите внимание, что fps обновляется только раз в секунду. FPS можно отобразить в заголовке окна, написав такой код в step event какого-либо объекта:


Код:






 


room_caption = 'fps: ' + string(fps) + ' / ' + string(room_speed);


 




 


 




1.3.3. Как работают функции рисования в GM? Что делают функции screen_redraw(), screen_refresh()?






 


Ответ: Для начала следует понять, что вызывая функции рисования - вы рисуете не прямо на экране, а на внутренний буфер. В начале события draw внутренний буфер очищается, а в конце - отображается на экран. Рисуя что либо, к примеру, в step event - вы рисуете на внутренний буфер, но он не отображается на экран. Функция screen_refresh предназначена для того, чтобы обновить изображение на экране - она отображает внутренний буфер. Функция screen_redraw сначала выполняет все события рисования - заполняет внутренний буфер цветом фона, рисует фоны, вызывает события рисования всех объектов, а затем обновляет изображение на экране (отображает внутренний буфер). Механизм использования глубины можно описать следующим образом. В начале события draw event строится приоритетная очередь, в которой роль значения играет индекс объекта/тайла, а приоритет - глубина. Далее вся графика отображает в порядке приоритета, именно потому глубину рисования нельзя менять в draw event - приоритетная очередь уже построена. В случае с 3D, используется буфер глубины, и там ситуация немного иная.


Безусловно, мы не можем знать наверняка, как всё устроено в Game Maker'е, если только сами разработчики нам об этом не расскажут. Это не точное описание внутренних механизмов GM, это лишь общий принцип работы функций рисования, и все факторы указывают на то, что он именно такой.


 


 




1.3.4. Что такое комната? Что такое persistent комнаты, game save и game load?






 


Ответ: Давайте поразмышляем. Что такое комната? Комната - это набор определённых настроек, опции видов и фонов, список всех объектов и тайлов. На самом деле, самая первая, "нулевая" комната - это комната загрузки. В ней, загружается движок GM и все внутренние ресурсы , инициализируется окно игры и загружается первая игровая комната. Под фразой "загружается комната" я подразумеваю следующие действия:


1) Назначаются значения всем переменным комнаты:


   1.1) Индекс комнаты - room


   1.2) Заголовок комнаты - room_caption


   1.3) Ширина и высота комнаты - room_width и room_height


   1.4) Скорость комнаты - room_speed


   1.5) Постоянность комнаты - room_persistent


   1.6) Цвет фона и его видимость - background_color и background_showcolor


2) Загружается массив видов:


   2.1) Видимость в момент начала комнаты - view_visible[0..7]


   2.2) Позиция, ширина и высота вида: view_xview[0..7], view_yview[0..7], view_wview[0..7] и view_hview[0..7]


   2.3) Позиция, ширина и высота порта: view_xport[0..7], view_yport[0..7], view_wport[0..7] и view_hport[0..7]


   2.4) Граница вокруг преследуемого объекта: view_hborder[0..7] и view_vborder[0..7]


   2.5) Вертикальная и горизонтальная скорость: view_hspeed[0..7] и view_vspeed[0..7]


   2.6) Преследуемый объект - view_object[0..7]


  2.7) Поворот вида - view_angle[0..7]


3) Загружается массив фонов:


   3.1) Видимость в момент начала комнаты - background_visible[0..7]


   3.2) Отображать ли фон над объектами - background_foreground[0..7]


   3.3) Индекс фонового изображения - background_index[0..7]


   3.4) Позиция - background_x[0..7] и background_y[0..7]


   3.5) Замощение комнаты по горизонтали/вертикали - background_htiled[0..7] и background_vtiled[0..7]


   3.6) Вертикальная и горизонтальная скорость - background_hspeed[0..7] и background_vspeed[0..7]


   3.7) Масштаб фона - background_xscale[0..7] и background_yscale[0..7]


  3.8) Цвет смешивания для фона - background_blend[0..7]


  3.9) Непрозрачность фона - background_alpha[0..7]


4) Создаются все тайлы:


   4.1) Позиция тайла - x, y


   4.2) Индекс фона - background


   4.3) Часть фона - left, top, width, height


   4.4) Глубина тайла


   4.5) id тайла, начинается с 10 000 001 (включительно)


5) Создаются все объекты, вычисляется instance_count и заполняется массив instance_id:


   5.1) Позиция - x, y


   5.2) Индекс объекта - object_index.


   5.3) id, начинается с 100 001 (включительно)


6) Выполняется creation code объектов (который задаётся в комнате)


7) Выполняется creation event объектов


8) Game start (Выполняется только в момент начала игры)


9) Room creation code (выполняется код, задаваемый в настройках комнаты)


10) Room start event


 


Действия, не обозначенные символами, выполняются в любом случае - при загрузке самой первой комнаты, при загрузке сохранения, при загрузке persistent комнаты и т.д. Действия, обозначенные так - выполняются только при первом попадании в комнату, а так же для всех не persistent комнат. Если вы вышли из постоянной комнаты, а потом вернулись - эти действия не выполнятся. Действия, обозначенные так - выполняются только при сохранении/загрузке игры или сохранении данных/загрузке постоянной комнаты. Эти настройки нельзя изменить в редакторе комнат, потому, при первом попадании в комнату они не загружаются, а получают значения по умолчанию. Действие же обозначенное так - событие начала игры, выполняются только один раз, при первой загрузке самой первой комнаты. Обратите внимание, что вне зависимости от того, является ли комната постоянной - событие Room start выполняется всегда.


 


Этот список действий может внести некоторую ясность в то, что конкретно происходит в начале игры и как реализован механизм сохранения постоянных комнат.


 


Если установлен persistent, при переходе в другую комнату - все данные о текущем состоянии комнаты перезапишутся: массивы видов, фонов, списки объектов и тайлов и т.п., а так же все локальные переменные всех объектов (стоит учесть, хотя массивы сохраняются, динамические структуры данных - нет). При сохранении игры сохраняются данные обо всех persistent комнатах, включая текущую (вне зависимости, постоянная она или нет) + глобальные переменные и, наверняка, что-то ещё. Сурфейсы, новые объекты, загруженные спрайты, фоны, звуки, изменения в действиях объектах (object_event_*), динамические структуры данных, позиции проигрывания звуков, настройки игры (полноэкранность и т.п.), частицы - всё это НЕ сохраняется стандартным механизмом сохранения GM. Что же происходит при загрузке? Всего лишь заменяются данные для всех persistent комнат, включая текущую (не зависимо, постоянная ли она). Я лично предполагаю, что все значения локальных переменных записываются в creation code объектов, и этот код выполняется всегда. Однако, я всё равно обозначил его цветом, так как знать наверняка не могу.


 


Написать свой механизм сохранения проще, чем кажется, стоит только всё продумать.


 


 





Создатель сайта!!!!
 
Форум » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Игрострой (Game maker)
  • Страница 1 из 1
  • 1
Поиск: