GMON
| |
Йакуд | Дата: Четверг, 28 Апреля 2011, 21:29 | Сообщение # 1 |
участник
Сейчас нет на сайте
| Всем привет. Очень захотелось представить свой не большой проект под названием GMON (Game Maker Object Notation). Что это такое? Это небольшой фреймворк (если его можно так назвать) для GameMaker'а. По замыслу, эта система должна была служить для удобного хранения и чтения данных в GameMaker. Но проект потихоньку перерастает в полноценный фреймворк с дополнительными функциями. На чем строится основной принцип работы с GMON? Имеется текстовый файл, который лежит рядом с игрой/исходником, в этом файле расположен ряд команд. При вызове определенной функции из GameMaker, файл проодит две стадии. "Парсер" и "ранер". Ну собственно, это не так важно. Важно то, что с помощью него можно сделать. Основой для логики системы, были выбраны объекты GameMaker'а. Приведу простой пример объекта в системе GMON: это самый простой пример объекта. После выполнения этого куска кода, создается объект с параметрами 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 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'ы функцией ГМ. Чуть позже реализую наследование переменных... Объект 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". Если в файле указан аргумент, но он не был передан, то он по умолчанию будет равен нулю.
Тут пока очень много букв и сложно сразу для понимания, но будет ещё больше.. Чуть позже я расскажу о анимации объектов и ещё нескольких интересных фичах системы. Сейчас физически не успеваю все рассмотреть. Ещё чуть позже будет написан подробный хелп к системе, но это при условии заинтересованности людей к проекту. не хочу делать лишний труд. Пока, можете ковырять систему и предлагать новые фичи. Можно даже совсем сумашедшие.. Так будет интереснее реализовывать
"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso .blanco 2.0
Сообщение отредактировал Йакуд - Вторник, 11 Октября 2011, 21:34 |
|
| |
Eshford | Дата: Четверг, 28 Апреля 2011, 21:44 | Сообщение # 2 |
Богиня Гамака ♥
Сейчас нет на сайте
| Йакуд, Молодчина... Конечно, моих познаний в GML пока-что недостаточно чтобы это освоить, но всё равно, когда-нибудь заинтересуюсь... Спасибо тебе! +
Сообщение отредактировал 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 пакет!
|
|
| |
Йакуд | Дата: Четверг, 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 |
__танцуй!__
Сейчас нет на сайте
| Йакуд, да я еще на гмакер.су смотрел Круто, но хэлп.. нужен.
CombatForce - 2d TDS долгожданный релиз Noobster - самый простой конструктор игр в мире LaLaLaLAMA! - игра не про Ламу
|
|
| |
Йакуд | Дата: Пятница, 29 Апреля 2011, 23:55 | Сообщение # 13 |
участник
Сейчас нет на сайте
| NeZnayu, хелп к редактору??
"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso .blanco 2.0
|
|
| |
Qvant | Дата: Суббота, 30 Апреля 2011, 00:14 | Сообщение # 14 |
почти ветеран
Сейчас нет на сайте
| Йакуд, вот ещё небольшое предложение - писать вручную скрипт для GMON в блокноте врядли удобно . Прикрути к проекту дерево объектов и небольшую панельку . Будит намного удобней делать вложенные структуры и просматривать свойсва объектов. Вот пример дерева:
|
|
| |
Йакуд | Дата: Среда, 18 Мая 2011, 23:38 | Сообщение # 15 |
участник
Сейчас нет на сайте
| Вот уже реализзовал все стандартные "инпуты". Нажатие клавиш клавы и мыши. чтобы вызвать событие, в свойствах объекта пишем: Code key_press(vk_enter):event{ /* Тут ваше действие */ } Документацию ещё не пишу, т.к. некоторые вещи ещё могут измениться... Поковыряйте сами, если хочется очень Так же почти реализовал наследование объектов. Пока объект добавляет только в parent'ы функцией ГМ. Чуть позже реализую наследование переменных... Объект b наследуется от объекта a. (чуть позже будут наследоваться все переменные и события). Наконец-то, нормально реализовал цепочку вызовов. Например, есть объект: Code obj = { x:10, y:10, sprite:sSprite }; Чтобы нарисовать его спрайт, достаточно всего лишь вызвать вот такой вот кусочек: Будет нарисован спрайт 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, но уже почти реализовал систему для бесконечной вложенности
"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso .blanco 2.0
|
|
| |
NeZnayu | Дата: Четверг, 19 Мая 2011, 16:55 | Сообщение # 18 |
__танцуй!__
Сейчас нет на сайте
| Класс Давай выкладывай скорей! Хотя нет, лучше не торопись, сделай все как надо =)
CombatForce - 2d TDS долгожданный релиз Noobster - самый простой конструктор игр в мире LaLaLaLAMA! - игра не про Ламу
|
|
| |
Йакуд | Дата: Четверг, 19 Мая 2011, 20:06 | Сообщение # 19 |
участник
Сейчас нет на сайте
| Выдалась свободная минутка, решил снять маленькое видео, с чего начинается разработка новых версий GMON'а Сделано чисто по фану, даже не знаю зачем))
"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso .blanco 2.0
|
|
| |
NeZnayu | Дата: Вторник, 24 Мая 2011, 12:44 | Сообщение # 20 |
__танцуй!__
Сейчас нет на сайте
| Прикольно, жалко качество такое что надписей в тетради не разберешь.
А когда релиз?)
CombatForce - 2d TDS долгожданный релиз Noobster - самый простой конструктор игр в мире LaLaLaLAMA! - игра не про Ламу
|
|
| |
|