Вторник, 16 Апреля 2024, 10:29

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » GMON (Game Maker Object Notation)
GMON
ЙакудДата: Четверг, 28 Апреля 2011, 21:29 | Сообщение # 1
участник
Сейчас нет на сайте
Всем привет.
Очень захотелось представить свой не большой проект под названием GMON (Game Maker Object Notation).
Что это такое? Это небольшой фреймворк (если его можно так назвать) для GameMaker'а.
По замыслу, эта система должна была служить для удобного хранения и чтения данных в GameMaker. Но проект потихоньку перерастает в полноценный фреймворк с дополнительными функциями.
На чем строится основной принцип работы с GMON? Имеется текстовый файл, который лежит рядом с игрой/исходником, в этом файле расположен ряд команд.
При вызове определенной функции из GameMaker, файл проодит две стадии. "Парсер" и "ранер". Ну собственно, это не так важно. Важно то, что с помощью него можно сделать.
Основой для логики системы, были выбраны объекты GameMaker'а. Приведу простой пример объекта в системе GMON:
Code
obj:{
         a:1,
         b:5
}

это самый простой пример объекта. После выполнения этого куска кода, создается объект с параметрами a = 1 и b = 5. Для того чтобы обратиться к этим параметрам, нужно написать имя объекта и названиее переменной. obj.a нам вернет единицу.
Так же система поддерживает вложенные объекты. Это может быть очень удобно для упорядочивания данных. Маленький пример:
Code
color:{        
           rectangle:{        
             border: c_black,        
             back:c_white        
           },        
           circle:{        
             border: c_green,        
             back: c_red        
           }        
        }

После выполнения данного кода, создается один объект color, в который вложены ещё два объекта (rectangle и circle) со своими параметрами.
Теперь чтобы вернуть нам цвет фона круга, нам нужно обратиться к соответствующему параметру по цепочке вызовов. color.circle.back нам вернет красный цвет. Именно цвет, никак не строку!

Таких вложенных объектов может быть бесконечное множество, т.к. функции "парсера" и "ранера" работают рекурсивно.
Так же GMON поддерживает массивы. Как обычные, так и ассоциативные. Вот пример массива:
Code
arr = [        
          [id:1, name:"Yakud"],        
          [id:2, name: "ollolo"]        
        ];


К этому массиву, мы сможем обращатсья вот так вот:
Code
array(arr, '0', 'name');

Эта фу-я нам вернет строку "Yakud".
А если мы вызовем вот так вот:
Code
array(arr, 'size');

То функция нам вернет число два. По-моему не трудно догадаться почему happy

Массив, так же можно включить в объект:
Code
obj:{        
           arr:[id:0, name:'Yakud']        
        }

Чтобы обратиться к нему, мы пишем следующее:
Code
array(obj.arr, 'name');

Функция вернет Строку "Yakud".

Так же, каждый объект поддерживает набор событий (шаг, рисование, события клавиатуры и мыши).
Пример:
Code
obj:{
         key_press(vk_enter):event{        
           /* Тут ваше действие */        
         },
         step:event{
           room_caption = string(fps);
         }
}

Теперь в объект добавлено два события. Событие шага и нажатия клавиши enter.

Так же почти реализовал наследование объектов. Пока объект добавляет только в parent'ы функцией ГМ. Чуть позже реализую наследование переменных...
Code
a:{}        
b.a:{}

Объект b наследуется от объекта a. (чуть позже будут наследоваться все переменные и события).

Ещё GMON поддерживает вложение файлов.
Например, у нас есть два файла. "first.gmon" и "second.gmon".
Содержание персого файла:
Code
@import:second.gmon{}

Теперь в первый файл, будет включен и обработан весь текст второго файла.

Так же работают аргументы для функции вложения файлов. Пример:
Содержание персого файла:
Code
@import:second.gmon{"Hello", "world"}


Содержание второго файла:
Code
str_1 = Argument0;
str_2 = Argument1;

obj:{
         a: str_1,
         b: str_2
}


Вместо Argument0 и Argument1, будут подставлены соответствующие значения. В данном случае Argument0 = "Hello", а Argument1 = "world".
Если в файле указан аргумент, но он не был передан, то он по умолчанию будет равен нулю.


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




"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso
.blanco 2.0


Сообщение отредактировал Йакуд - Вторник, 11 Октября 2011, 21:34
EshfordДата: Четверг, 28 Апреля 2011, 21:44 | Сообщение # 2
Богиня Гамака ♥
Сейчас нет на сайте
Йакуд, Молодчина... Конечно, моих познаний в GML пока-что недостаточно чтобы это освоить, но всё равно, когда-нибудь заинтересуюсь... Спасибо тебе! + v

Сообщение отредактировал Naruto-63 - Четверг, 28 Апреля 2011, 21:45
FadeBakerДата: Четверг, 28 Апреля 2011, 21:55 | Сообщение # 3
JavaSE Game Developer
Сейчас нет на сайте
Что-то я непонял, что это, и как этим пользоваться и для чего это...

Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
EshfordДата: Четверг, 28 Апреля 2011, 22:25 | Сообщение # 4
Богиня Гамака ♥
Сейчас нет на сайте
vasyan555, Я думаю, что это огромный gex пакет! happy
ЙакудДата: Четверг, 28 Апреля 2011, 22:54 | Сообщение # 5
участник
Сейчас нет на сайте
vasyan555,
Quote (Йакуд)
Что это такое? Это небольшой фреймворк (если его можно так назвать) для GameMaker'а. По замыслу, эта система должна была служить для удобного хранения и чтения данных в GameMaker. Но проект потихоньку перерастает в полноценный фреймворк с дополнительными функциями.


"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso
.blanco 2.0
QvantДата: Четверг, 28 Апреля 2011, 23:00 | Сообщение # 6
почти ветеран
Сейчас нет на сайте
Quote (vasyan555)
На чем строится основной принцип работы с GMON? Имеется текстовый файл, который лежит рядом с игрой/исходником, в этом файле расположен ряд команд.

Нужен компилятор текстовых команд в бинарный код.

При загрузки файла GMON он создаёт все объекты с папаметрами согласно командам - я правильно понял ?
а как быть если объектов много , например несколько тысяч , но в текущей комнате используются только несколько ?
Будут ли тормоза от этих неиспользуемых объектов ?

Для небольших проектов GMON будит удобен , если выучить кего команды

Сообщение отредактировал Qvant - Четверг, 28 Апреля 2011, 23:02
ЙакудДата: Четверг, 28 Апреля 2011, 23:34 | Сообщение # 7
участник
Сейчас нет на сайте
Quote (Qvant)
Нужен компилятор текстовых команд в бинарный код.

Зачем же? Обоснуй плиз.

Quote (Qvant)
При загрузки файла GMON он создаёт все объекты с папаметрами согласно командам - я правильно понял ?

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

Quote (Qvant)
Будут ли тормоза от этих неиспользуемых объектов ?

Точно так же, как и куча пустых объектов GameMaker. Если объект уже не нужен, то вызываешь для него
Code
with(obj){instance_destroy();}

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

Quote (Qvant)
Для небольших проектов GMON будит удобен , если выучить кего команды

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


"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso
.blanco 2.0
KpoJIukДата: Пятница, 29 Апреля 2011, 13:35 | Сообщение # 8
In C++ We Trust
Сейчас нет на сайте
Quote (Йакуд)
Зачем же? Обоснуй плиз.

хотя бы затем, чтобы каждый школьник не мог править часть игры.
NeZnayuДата: Пятница, 29 Апреля 2011, 13:43 | Сообщение # 9
__танцуй!__
Сейчас нет на сайте
Классная тема на самом деле.

Только надо действительно справку написать, с примерами и всем таким.

ПС
Аналогии с JSON не всегда проходят )


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
QvantДата: Пятница, 29 Апреля 2011, 18:19 | Сообщение # 10
почти ветеран
Сейчас нет на сайте
в данном примере файл __init__ весит 1 кбайт в котором всего два объекта с несколькими параметрами ... а если проект большой с сотней объектов и больших параметров ?
Скорость чтения внешних файлов ГМ не очень .

Quote (KpoJIuk)
хотя бы затем, чтобы каждый школьник не мог править часть игры.

и это тоже ...в гмон можно вставить любой кусок кода используя только блокнот
ЙакудДата: Пятница, 29 Апреля 2011, 22:55 | Сообщение # 11
участник
Сейчас нет на сайте
Qvant, ну ок.. сделаю ещё и шифрование файлов тогда)

NeZnayu, Ну это аналог JSON только по своей структуре (за основу я взял ее и CSS). Вообще, изначально система разрабатывалась для простого создания GUI на ГМ.
Могу даже продемонстрировать первые прототипы GMON'а. Тогда он ещё назывался Execute Gui.

Первая версия системы на примере редактора карт.
По-моему посмотреть стоит!


"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso
.blanco 2.0
NeZnayuДата: Пятница, 29 Апреля 2011, 23:45 | Сообщение # 12
__танцуй!__
Сейчас нет на сайте
Йакуд, да я еще на гмакер.су смотрел wink
Круто, но хэлп.. нужен.


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
ЙакудДата: Пятница, 29 Апреля 2011, 23:55 | Сообщение # 13
участник
Сейчас нет на сайте
NeZnayu, хелп к редактору?? surprised

"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso
.blanco 2.0
QvantДата: Суббота, 30 Апреля 2011, 00:14 | Сообщение # 14
почти ветеран
Сейчас нет на сайте
Йакуд, вот ещё небольшое предложение - писать вручную скрипт для GMON в блокноте врядли удобно .
Прикрути к проекту дерево объектов и небольшую панельку .
Будит намного удобней делать вложенные структуры и просматривать свойсва объектов.

Вот пример дерева:

ЙакудДата: Среда, 18 Мая 2011, 23:38 | Сообщение # 15
участник
Сейчас нет на сайте
Вот уже реализзовал все стандартные "инпуты". Нажатие клавиш клавы и мыши.
чтобы вызвать событие, в свойствах объекта пишем:

Code
key_press(vk_enter):event{
       /* Тут ваше действие */
}

Документацию ещё не пишу, т.к. некоторые вещи ещё могут измениться... Поковыряйте сами, если хочется очень wink Так же почти реализовал наследование объектов. Пока объект добавляет только в parent'ы функцией ГМ. Чуть позже реализую наследование переменных...

Code
a:{}
b.a:{}

Объект b наследуется от объекта a. (чуть позже будут наследоваться все переменные и события).

Наконец-то, нормально реализовал цепочку вызовов.
Например, есть объект:

Code
obj = {
      x:10,
      y:10,
      sprite:sSprite
};

Чтобы нарисовать его спрайт, достаточно всего лишь вызвать вот такой вот кусочек:

Code
obj.draw();

Будет нарисован спрайт sSprite в позиции 10,10.
Самое интересное, что работает полная цепочка вызовов. Например, для какого-либо изменения параметров объекта, можно написать так:

Code
obj.attr([x:32, y:74]).attr({sprite: sLogo, image_speed: 0.2}).draw();

Все это будет работать для объекта obj. в аргументах поддерживаются, как массивы ( квадратные скобки ), так и объекты ( фигурные ).

Так же реализовал парсинг массивов и объектов из самого ГМ, а не через файлы. Что-то типо такого, будет работать:

Code
arr = array_parse('[2, 8, 10, [23, 87, 56], "Йакуд"]');

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

На бумаге у меня ещё есть много идей по улучшению системы. Буду развивать!

ВНИМАНИЕ! новою версию ещё не выложил. Я хочу сделать немного больше, а потом выложить!


"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso
.blanco 2.0
NeZnayuДата: Четверг, 19 Мая 2011, 16:11 | Сообщение # 16
__танцуй!__
Сейчас нет на сайте
arr = array_parse('[2, 8, 10, [23, 87, 56], "Йакуд"]');\

Это "вложенный" массив?


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу


Сообщение отредактировал NeZnayu - Четверг, 19 Мая 2011, 16:11
ЙакудДата: Четверг, 19 Мая 2011, 16:48 | Сообщение # 17
участник
Сейчас нет на сайте
NeZnayu, да, это вложенный массив.. Поддерживаются многомерные ассоциативные массивы. Вложенность массивов пока только до 9, но уже почти реализовал систему для бесконечной вложенности happy

"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso
.blanco 2.0
NeZnayuДата: Четверг, 19 Мая 2011, 16:55 | Сообщение # 18
__танцуй!__
Сейчас нет на сайте
Класс smile
Давай выкладывай скорей!

Хотя нет, лучше не торопись, сделай все как надо =)


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
ЙакудДата: Четверг, 19 Мая 2011, 20:06 | Сообщение # 19
участник
Сейчас нет на сайте
Выдалась свободная минутка, решил снять маленькое видео, с чего начинается разработка новых версий GMON'а happy
Сделано чисто по фану, даже не знаю зачем))


"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso
.blanco 2.0
NeZnayuДата: Вторник, 24 Мая 2011, 12:44 | Сообщение # 20
__танцуй!__
Сейчас нет на сайте
Прикольно, жалко качество такое что надписей в тетради не разберешь.

А когда релиз?)


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » GMON (Game Maker Object Notation)
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг