Game Maker - создание игр | HellRoom Games
Январь 13, 2025, 16:41:15 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1] 2   Вниз
  Печать  
Автор Тема: 10 советов пользователям GM для избежания часто встречающихся ошибок  (Прочитано 36008 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Fantom
I am... All of me
Гл. Администратор
*

Репутация: 1325
Offline Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+1000 репутации]За отличные статьи по Game Maker!Тру Админ :DЗнаток Game Maker...
API: GameMaker Studio Master
Сообщений: 5026



« : Март 06, 2011, 15:19:48 »

1. Запрещено называть спрайты, объекты, фоны, комнаты и другие компоненты одинаковыми именами.
  Например, нельзя назвать спрайт именем Player и объект игрока тоже именем Player. В конце концов это неизбежно приведет к ошибке.
  То же самое относится к переменным. Если название переменной совпадает с названием объекта, то это явная ошибка.
1.1. С недавних пор в GMS отключена чувствительность к регистру, то есть переменная player + объект Player = конфликт, переменные так называть нельзя. Также запрещены одинаковые названия локальных и глобальных переменных.

2. Запрещено называть спрайты, объекты и другие компоненты, а также локальные и глобальные переменные именами, совпадающими с зарезервированными словами, такими как стандартные переменные или названия функций.
  Например, нельзя назвать объект именем score, lives или health, так как все эти слова - стандартные глобальные переменные. В конце концов это неизбежно приведет к ошибке.
  Или переменные: нельзя, к примеру, количество повторений записать в переменную global.repeat, так как repeat - оператор повторения, зарезервированное слово.
2.1. (из стандартных правил программирования) Разрешается называть ресурсы и переменные именами, начинающимися с английской буквы или знака подчеркивания. Категорически запрещены цифры в начале имени, а также пробел и арифметические операции в любой части имени, например, Room 1-1 или Player_sprite_up+left. Желательно, избегать русских символов в именах ресурсов - код GM не поддерживает работу с такими ресурсами.
  Чтобы определить, есть ли в проекте ошибки из 1 и 2 пунктов, выполните Скрипты - Проверка имён ресурсов.

3. Практически во всех используемых спрайтах (особенно в движущихся) устанавливайте центр спрайта по центру. Для этого есть одноименная кнопка в редакторе спрайтов. Это поможет избежать некоторых ошибок в будущем, к примеру, если нужно будет повернуть спрайт с помощью переменной image_angle - поворачивает спрайт вокруг его центра, поэтому если центр будет не в том месте, то объект будет неровно вращаться, то есть шататься из стороны в сторону.
Соблюдение правила также будет способствовать более точному расчету расстояния между объектами.

4. В играх жанра ТДС и Изометрия для движущихся объектов используйте маску в форме Диска, которая поможет избежать застревание в стенах при поворотах объекта. Для пуль (снарядов и т.д.) это тоже важно, так как Диск обеспечивает равноудаленность границ маски от центра спрайта, что в свою очередь обеспечивает одинаковую вероятность столкновения пули в любом направлении.

5. В играх жанра Платформер отключайте Точную проверку столкновения у движущихся объектов.
Несоблюдение этого правила приведет к застреванию объектов в стенах и прочем.
  Точная проверка также не нужна и для объектов, которые не взаимодействуют с другими объектами. Это касается игр любого жанра.
Например, это могут быть осколки взорвавшихся вещей, дым и др. Соблюдение этого правила приведет к увеличению быстродействия игры.
  Это же относится и к пунктам меню. Если будет включена Точная проверка, то по надписи будет очень сложно попасть указателем мыши.

6. Не используйте переменную health (lives) для установки количества жизней нескольким объектам, чтобы позднее не возникали вопросы "Когда у одного врага заканчивается здоровье, то исчезают все. Что мне делать? ".
  Переменная health (lives, score и другие стандартные) - глобальная, одна на всех. Используйте локальные переменные, например, hp, h, h_p или другие.
6.1. Кроме того, для отнятия этих жизней у объекта не рекомендуется использовать конструкцию o_enemy.hp-=1, так как это отнимет здоровье совершенно не у того объекта, с которым сталкивается пуля (игрок, кулак, нога, меч...). Или же действие "Установить переменную" (серая кнопка VAR) с переключателем "Для объекта: o_enemy" - результат будет таким же нежелательным. Используйте переключатель "Для другого" или код other.hp-=1.
Похожая ситуация бывает со взятием координат o_enemy.x. Используйте конкретные функции поиска id, такие как instance_nearest, instance_place, collision_*, др.

7. Во всех спрайтах используйте функцию Трансформация -> Обрезка -> Рамка=0.
Это отрежет ненужные области вокруг спрайта и уменьшит размер занимаемой им памяти, следствием чего будет увеличение быстродействия игры.
Также это способствует равноудаленности границ спрайта от его центра (вместе с пунктом 3), а это тоже поможет избежать застревания в стенах, земле и прочем при развороте объекта (игрока).
В GMS это предотвратит некоторые графические проблемы в будущем разрабатываемого проекта.

8. Не пренебрегайте последовательностью выполняемых действий. Здесь абсолютно то же самое, как и чтение данной статьи - что написано в следующей строке неизвестно, пока ее не прочесть. Так же и в GM - например, hp+=1; hp=100; - GM не имеет понятия, что это за переменная hp, так как она определяется только после операции над ней. Разумеется, последовательность важна не только в коде, но и в кнопках (элементах) в поле действий объекта.

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

10. Для остановки объекта не используйте кнопки Move Fixed или Move Free, так как они кроме скорости еще устанавливают направление. Используйте кнопку со словом VAR, в которой уставливайте переменной speed значение 0.
Несоблюдение этого правила влечет за собой ошибку, в результате которой возникают вопросы следующего содержания: "Игрок стреляет нормально, когда перемещается. Но если остановится, то стреляет только вправо. Помогите плиз. "


PS: Похожая тема рассказывает о недопущении ошибок в коде. Данная же тема описывает основы построения игры, в результате которого возникают одинаковые ошибки, избежать которые можно, соблюдая вышеуказанные советы.

Автор: FanTom.
Запрещается копирование данной статьи без ведома и согласия автора.
« Последнее редактирование: Февраль 27, 2015, 12:36:28 от Fantom » Записан

Vendet
Гл. Администратор
*

Репутация: 772
Offline Offline

Пол: Мужской
API: Unity 3D
Сообщений: 3949


HellRoom Games


WWW
« Ответ #1 : Март 06, 2011, 15:27:07 »

Хорошие советы, тему я думаю следует прикрепить  ;)
Записан
Hummer
scio me nihil scire
GM Pro user
*

Репутация: 335
Offline Offline

Пол: Мужской
Награды:
2000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]Знаток Game Maker!За помощь новичкам!
API: Game Maker 8.0 Pro
Деятельность: GML, С++, OpenGL, Java. Бывший Директор бывшей школы GML
Сообщений: 2573


« Ответ #2 : Март 06, 2011, 15:29:04 »

Отлично  ;)
Если вот так каждый постарается, то у нас выйдет отличное пособие для новичков! Вобщем  Уважуха

Добавлено: Март 06, 2011, 15:30:32
Думаю ещё в пункте 2 упомянуть об операторах как запрещённых именах (do, while, exit) и т д.
Записан

Есть вещи, которые нельзя объяснить. Для всего остального есть Справка
Рандом-рандом-рандомище (с)

C++ & OpenGL
Dva_Kota
Гл. Администратор
*

Репутация: 636
Offline Offline

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #3 : Март 10, 2011, 12:22:31 »

По 8 пункту я бы добавил про стрипы в формате PNG. У них же качество лучше чем у GIF анимации. Можно просто отдельные кадры положить в папку и загрузить в редактор ГМ как стрип.
Записан

Hummer
scio me nihil scire
GM Pro user
*

Репутация: 335
Offline Offline

Пол: Мужской
Награды:
2000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]Знаток Game Maker!За помощь новичкам!
API: Game Maker 8.0 Pro
Деятельность: GML, С++, OpenGL, Java. Бывший Директор бывшей школы GML
Сообщений: 2573


« Ответ #4 : Март 10, 2011, 12:28:14 »

Записан

Есть вещи, которые нельзя объяснить. Для всего остального есть Справка
Рандом-рандом-рандомище (с)

C++ & OpenGL
TUjh
Пользователь
***

Репутация: 10
Offline Offline

Пол: Мужской
API: Game Maker 8.0 Pro
Деятельность: GML программист, художник, 3D Моделлинг
Сообщений: 76

Who i am?


« Ответ #5 : Март 10, 2011, 12:36:55 »

Hummer, все ошибаются.
Записан

Hummer
scio me nihil scire
GM Pro user
*

Репутация: 335
Offline Offline

Пол: Мужской
Награды:
2000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]Знаток Game Maker!За помощь новичкам!
API: Game Maker 8.0 Pro
Деятельность: GML, С++, OpenGL, Java. Бывший Директор бывшей школы GML
Сообщений: 2573


« Ответ #6 : Март 10, 2011, 12:38:53 »

Записан

Есть вещи, которые нельзя объяснить. Для всего остального есть Справка
Рандом-рандом-рандомище (с)

C++ & OpenGL
Dva_Kota
Гл. Администратор
*

Репутация: 636
Offline Offline

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #7 : Март 10, 2011, 12:41:50 »

Записан

Alcatraz
Flight Dream Studio
«Старожил форума»
******

Репутация: 392
Offline Offline

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]Знаток Unity 3D3 место в конкурсе: Адекватные игры #2 [Стимпанк]2 место за игру: Dead Night (Конкурс Золотые Руки)...
API: Unity 3D
Деятельность: C#, C++, UNITY3D
Сообщений: 3392


http://vk.com/alcatraz_rus


WWW
« Ответ #8 : Март 10, 2011, 12:48:04 »

Во написал...xD ;D
Записан

VeGaS
«Старожил форума»
******

Репутация: 270
Offline Offline

Пол: Мужской
Награды:
2000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+150 репутации]3 место за игру: AntiZombie (Конкурс Золотые Руки)1 место: Звание лучшего дизайнера (Февраль 2011)За добавление полезных программ!
API: GameMaker Studio Standard
Сообщений: 2018



« Ответ #9 : Апрель 18, 2011, 20:25:29 »

Хорошие советы ;)
Записан
MegaDimon
GM Pro user
*

Репутация: 74
Offline Offline

Пол: Мужской
Награды:
1000 сообщений!За постоянность! [10 дней на форуме]
API: GameMaker Studio Pro
Деятельность: Gml, Pixel Art
Сообщений: 1260


CreaQtrex


« Ответ #10 : Апрель 18, 2011, 20:32:39 »

Спасибо Fantom!
Записан
Fantom
I am... All of me
Гл. Администратор
*

Репутация: 1325
Offline Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+1000 репутации]За отличные статьи по Game Maker!Тру Админ :DЗнаток Game Maker...
API: GameMaker Studio Master
Сообщений: 5026



« Ответ #11 : Июль 17, 2011, 12:55:44 »

Обновил пятый и шестой пункт.
Всем новичкам обязательны к прочтению!
Записан

2DKot
Посетитель
**

Репутация: 4
Offline Offline

API: 7.0 Pro
Сообщений: 34


« Ответ #12 : Июль 20, 2011, 09:07:15 »

еще один совет. Если вы решили, что для решения поставленной задачи вам понадобятся массивы, то прочитайте в СПРАВКЕ ВСЕ, что можно делать с массивами. Ели вам нужны циклы, то прочитайте ВСЁ о циклах! Просто я месяц назад пытался крафтинг сделать, и все не мог довести алгоритм до ума, я чувствовал, что мне не хватает какого то оператора, но не мог понять. И недавно, когда я уже забил на крафтинг, я просто так лазил по справке и увидел ЕГО - оператор continue! После этого последовала длинная фраза из нецензурных слов.... Вобщем прежде чем приступить к разработке, сначала изучите все вдоль и поперек!
Записан
Fantom
I am... All of me
Гл. Администратор
*

Репутация: 1325
Offline Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+1000 репутации]За отличные статьи по Game Maker!Тру Админ :DЗнаток Game Maker...
API: GameMaker Studio Master
Сообщений: 5026



« Ответ #13 : Июль 30, 2011, 22:15:29 »

Поменял 8 пункт на более важный (чаще встречающийся).

...прочитайте в СПРАВКЕ ВСЕ...
...изучите все вдоль и поперек!
Да, это действительно правильно, но чтение всей справки займет намного больше времени, чем чтение этой статьи,
и результат будет невысоким - трудно запомнить всё и сразу.

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

Адекват
Во имя адекватности
GM Pro user
*

Репутация: 313
Offline Offline

Пол: Мужской
Награды:
За отличную игру Peace, Death!1000 сообщений!За постоянность! [50 дней на форуме]За лояльность! [+150 репутации]2 место на HellRoom Jam #4, Ancient Egypt3 место на HellRoom Jam #3, Каменный век...
API: GameMaker Studio 2
Сообщений: 1871



WWW
« Ответ #14 : Апрель 23, 2012, 16:43:23 »

 Я хоть и не программирую на ГМ, но читал в запой.)
Записан

Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  

HellRoom Games © 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines
Страница сгенерирована за 0.122 секунд. Запросов: 36.