elmax 0.0.6 - тень фреймворка
Вложений: 4
Застолблю-ка я себе местечко в данной ветке... (:
Выкладываю пока первые наработки, может кто посмотрит-покритикует... Для правильной работы нужен модифицированный модуль pub.libxml. Инстркция по инсталяции в архиве... (: Version 0.0.6 (14.09.2007) Внимание! Относительно прошлых версий изменены имена многий файлов - не копируйте поверх старый версий. Вырезка из readme.txt: Что уже умеем? 1. Инициализация из xml-конфига. 2. Менеджер ресурсов с загрузкой из xml. 3. Простенький GUI с загрузкой из xml. 3.1. Окно (CGuiWindow) - контейнер, содержит другие контролы. 3.2. Лейбл (CGuiLabel) - можно указать горизонтальное форматирование текста. 3.3. Кнопка (CGuiButton) - можно указать бэкграунд кнопки из 3 фреймов (нормальное состояние, наведение, нажатие), шрифт, текст надписи, её цвет и альфу. 3.3.1. Возможность указать скрипт, сработающий при нажатии на кнопку. 3.3.1. Возможность указать имя функции скрипта, сработающей при нажатии на кнопку. 3.4. Скролл (CGuiScroll) - можно задавать минимальное и максимальное значение каретки (minValue и maxValue), а так же устанавливать положение самой каретки (value). 3.5. Листбокс (CGuiList) - контейнер, может содержать только элементы, которые будут составлять список. Для таких элементов от CGuiCtrl отнаследован специальный класс CGuiListItem. Устанавливает этим элементам (x=0.0, y)-координаты в соответствии с их положением в листе. 3.5.1. Элемент листа Лэйбл (CGuiListItemLabel) - можно задать шрифт, текст, его цвет и альфу. 3.6. Текстовая кнопка (CGuiTextButton) - можно указать бэкграунд кнопки из 9 фреймов по 3 на состояние (нормальное состояние, наведение, нажатие), шрифт, текст надписи, её цвет и альфу. Серединка кнопки растягивается в зависимости от указанной ширины. 3.6.1. Возможность указать скрипт, сработающий при нажатии на кнопку. 3.6.1. Возможность указать имя функции скрипта, сработающей при нажатии на кнопку. 3.7. Строка ввода (CGuiInput) - в активном состоянии позволяет вводить текст (поддержка русского языка), можно указать бэкграунд из 9 фреймов по 3 на состояние (нормальное состояние, наведение, активное), шрифт, его цвет и альфу. 3.8. Чекбокс (CGuiCheck) - стандартный чекбокс. 3.9. Изображение (CGuiPicture) - загружает и рендерит спрайт. 4. Класс спрайта с поддержкой анимации. Поддерживает вывод отдельных фреймов. 5. Класс шрифта с поддержкой форматирования расположения (верх\низ\лево\право\ценрт) относительно указанных координат. 5.1. Содержит методы для работы с текстом в виде листов TList. TList нужен для быстрой работы с многострочным текстом. 6. Класс цвета с функиями конвертации из Byte в Float и обратно, извлечение RGBA-составляющих из Int. 7. Наметки будущего класса вектора. 8. Система частиц, основанная на отдельных эмиттерах, которые можно легко расширять. 8.1. Стандартный эмиттер. 8.2. Эмиттер, создающий частицы по чёрно-белой маске. 8.3. Эмиттер, колеблющий частицы по горизонтали, создавая эффект вращения в глубину. 9. Система виджетов (CWidget) для создания отдельных элементов проргаммы (меню, геймплей, диалоговые окна и т.д.). 9.1. Управление виджетами через скрипты. 9.2. Возможность добавлять виджет в модальном режиме (обновляется только он). 10. Управление программой через скриптовую систему (Lua). 10.1. Управление базовыми классами. 10.2. Управление виджетами. 10.3. Управление GUI. Что будем уметь? 1. Эмиттер на скриптах для задания сложного поведения частицам. Что будет ещё? 1. Гексогональная сетка с возможностью гибкого (у ячейки будет несколько параметров) поиска пути. 2. Универсальная система сохранения\загрузки игры. (в процессе) 2.1. Универсальная система профиля игрока. Зачем всё это? Мне нужен удобный инструмент для разработки казуальных игр. Если он ещё кому-то пригодится - можете поделиться со мной своей прибылью! ^__^ |
Re: elmax - набросок фреймворка
Забавненько, сейчас правда похвастаться не чем, окна то прозрачны , то нет. XML - оно читает, а надо ли? В чем будет сохраняться система частиц? Универсальная система сохранения\загрузки игры - что это?
http://elmortem.mirgames.ru/ - это ты? |
Re: elmax - набросок фреймворка
Прозрачны не активные окна, это было сделано для теста активности окна. (:
Т.е. если клацнуть по окну, то оно станет активным, а если вне окна - не активным. XML - очень удобный и наглядный формат хранения данных. Так что определённо надо. Загрузка может немного дольше, но за-то не нужно никакого дополнительного софта для редактирования - блокнотик открыл и подредактировал. Частицы так же будут в XML по той простой причине, что эммитер имеет крайне небольшое число параметров, так что придумывать новый бинарный формат смысла не имеет. К тому же проще будет портировать систему частиц. Пока создание редактора частиц не предполагается, всё ручками в блокноте. Система сохранения и загрузки игры позволит регистрировать "в себе" разные данные и сохранять\загружать их. Не зная всех возможностей Макса я пока детально не думал над этим... Но это точно не будет "волшебной сохранялкой читающей мысли". Просто несколько упростит работу и уменьшит написание кода в дальнейшем. В общем сейчас занимаюсь GUI и форматированным текстом, а там видно будет. |
Re: elmax - набросок фреймворка
ВЫкладывай следующие версии, пощупаем :) Если действительно будет работать всё то, что ты заплонировал без глюков и тормозов, то это будет просто супер.
|
Re: elmax - набросок фреймворка
Насчёт xml согласен с тобой, т.к. это отличный формат хранения информации.
Запустил и Сразу же с первого действия нашёл баг ;) Значит двигай за край быстро окно, над другим окном, то тоже задвигаеться, т.к. ты у тебя перемещение окна на позицию куда переместить стоит До изменения координат курсора. Далее, у тебя гуи не динамичны - окошко одним рисуночком, а не из частей гуи эллементов. |
Re: elmax - набросок фреймворка
Да, это еще ладно, что два окошка вместе двигаются. У меня вообще вылетало из программы и даже не говорило почему.
|
Re: elmax - набросок фреймворка
elmortem, ещё могу посоветовать добавить лог систему, для ведения логов в дубаг моде, а так же динамичный дебаг логгер, в самой игре, где будут графики всякие.
|
Re: elmax - набросок фреймворка
dimanche13
http://elmortem.mirgames.ru - да, это я... MoKa На счёт перемещения окна гляну, хотя для моих целей перемещать окна вообще не нужно, это я уж так, в порыве знакомства с Максом... (: Собственно поэтому гуи не динамический, для казуалок обычно это просто не нужно. Каждый элемент должен быть неповторим и исключителен. Так что все бэки для окон и кнопочек будут рисоваться целиком. Хотя возможно будет контрол кнопки из 3 частей (лево, тянущаяся серёдка и право)... debuglog я использую, где нужно. И уже прикрутил лог в файл, так что всё нормально. (: На счёт вылетов, надо бы трай-кетч использовать, но мне лень, всё-таки это бейсик, а не С++. ^_^ |
Re: elmax - набросок фреймворка
Try & Catch тоже есть в BlitzMax. Assert -есть. Вылеты - это самый страшный из грехов. А неожиданные вылеты в самый интересный момент, вообще приводят к раннему выпаданию волос игроков)))
|
Re: elmax - набросок фреймворка
elmortem, насчёт кнопочки лучше не растягивающуюся а зацикленную и последняя отсечённая.
|
Re: elmax - набросок фреймворка
dimanche13
Знаю, что есть, но мой мозг ещё не свыкся с мыслью, что это "не просто бейсик"... (: В оригинале вылетов быть не должно. А пока сделаем вид, что это триальным период. ^______^ |
Re: elmax - набросок фреймворка
MoKa
Что-то я не нашёл функции, возволяющей менять uv-координаты текстуры, чтобы сделать отсечение. ): Так что контрол Скролла пока сделан через DrawImageRect, который растягивает серёдку... В принципе при правильно рисовании серединной части тянуться будет нормально... Но если подскажешь способ рисования с отсечением - будет круто. (: Разобрался с перемещением окна, теперь нельзя случайно зацепить несколько штук - только одно, которое начал перемещать изначально. Для текста пока сделал форматирование по горизонтали и вертикали с учётом переноса строк. Думаю над тем, нужно ли делать раскраску отдельных слов (как в Quake III)... |
Re: elmax - набросок фреймворка
Вообще-то в любом TImage есть поле Pixmap. Это прямой доступ к байтам картинки и делай с ней что хочешь.
|
Re: elmax - набросок фреймворка
dimanche13
В реалтайме ковыряться с байтами нецелесообразно - скорость не та. Или там какие-то другие байты? |
Re: elmax - набросок фреймворка
Глянь функцию: SetViewport
|
Re: elmax - набросок фреймворка
ах, да, есть еще setscale(xscale,yscale) может это подойдет для изменения контрола скрола. Просто менять yscale для вертикального и xscale для горизонтального...
|
Re: elmax - набросок фреймворка
MoKa
Думал об этом, но пока отказался. Постоянное переключение вьюпорта мне почему-то не нравится... dimanche13 Scale очень неточная вещь, к тому же тех же результатов, но более точных я добился используя ImageDrawRect. Так что пока всё будет как есть - серединка будет тянуться. Смотрится нормально, как только доделаю контрол списка - выложу. |
Re: elmax - набросок фреймворка
Цитата:
|
Re: elmax - набросок фреймворка
MoKa
Не, ты всё перепутал. (: Та кнопочка, которая уже готова тянуться не будет. Она будет из одной текстуры без всяких модификаций с растягиванием. Тянться будет серёдка в другой кнопочке. А так же уже тянется серёдка у скролла. Обновление выложу вечером... |
Re: elmax - набросок фреймворка
elmortem, я то понял всё, просто сделать более корректно предложил, чтож ждём обновления :)
|
Версия 0.0.2
Одновил инфу и архив в первом посте.
Вот список изменений: Version 0.0.2 (28.08.2007) + Менеджер ресурсов умеет загружать строки в виде TList. Нужны для вывода форматированного текста. + Форматирование текста по вертикали и горизонтали. * Слегка подправлена структура GUI, исправлены косяки с перемещением окна. + Добавлены новые GUI-контролы (скролл, лист, лист->лэйбл). + Спрайту добавлен метод рендера отдельного фрейма. |
Re: elmax - набросок фреймворка
Посмотрел на твой код и понял, что я недооценивал XML. Очень удобная, простая и надежная штука. Единственное что не понравилось, это то ,что нельзя выйти, щелкнув по крестику окна.
If KeyDown(KEY_ESCAPE) or AppTerminate() then IsQuit = True |
Re: elmax - набросок фреймворка
dimanche13
А я-то всё думал, почему у меня по крестику прога не закрывается... ^__^ Спасибо, поправлю сие недоразумение. |
Re: elmax - набросок фреймворка
Посмотрел имеющиеся Системы Частиц. Даже платные, имеющие редакторы, достаточно убоги и не сравняться даже с простейшей системой частиц движка HGE, бесплатные поделки-недоделки вообще не впечатлили.
Подумал над тем, чем должна обладать нормальная система частиц, вот что надумал: Как таковой системы частиц нет. Есть тип самих частичек, определяющий все доступные для визуализации и расчётов параметры. И есть набор эмиттеров (систем с разной физикой), определяющих поведение и вид частиц. Основная идея в том, что у основного (родителя, основы) типа эмиттера (от которого наследуются остальные) есть метод обработки частиц на основе стандартных параметров: движение, вращение вокруг своей оси, вращение вокруг оси эмиттера, изменение цвета по массиву цветов, изменение размеров, жизнь частицы. Этот метод принимает информаию о том, какие именно данные обрабатывать, а какие не трогать. Нечто вроде: Super._Update(POSITION Or COLOR Or LIFE) ' Обработать линейное движение, изменение цвета и жизнь частицы. Остальные вычисления будет делать сам эмиттер. Это позволит использовать отнаследованные от основной частицы типы частиц, с расширенными параметрами, а так же создавать сколь угодно сложные эмиттеры, не трогая основных возможностей Системы Частиц. По дефолту будет сделано около 5'и стандартных эмиттеров, и парочка сложных (например появление частиц по битовой маске, загрженной из графического файла с сохраненим цвета частиц для каждого пикселя)... Остальные эмиттеры пусть пишет кто хочет. (: Есть какие-то мысли или пожелания по структуре Системы Частиц или дефолтным эмиттерам? Очень интересно было бы послушать. |
Re: elmax - набросок фреймворка
elmortem, ты её забыл про размер, прозрачность и бленды. ;)
Идея есть такая: Есть класс эмитеров, у каждого эмитера есть свой список, где будут его детишки, это даст больше производительности т.к. перебираться будет не весь список всех партиклов а только тех, которые пренадлежат эмитеру. Я помню делал такие, где у меня перемещение их производилось Только коммандами AddForce, получалось что я воздействовал на все партиклы в близком месте, но это для взрывов. Так же нужно учитывать какой у тебя будет вид, side или top. Ещё параметр гравитации для эмитеров думаю не помешает. :) Насчёт имеющихся систем частиц, я их так мало видел на бм, т.к. наверное они на столь убоги что их и не рекламируют хорошо. Лазал по визуальному редактору систем частиц в HGE, да там очень хороший редактор. Хм, но помойму не универсальный. :) |
Re: elmax - набросок фреймворка
MoKa
Не, не забыл, просто не стал перечислять, долго это. Я ж про основную идею интересовался. На счёт отдельных листов - да, так и предполагается. Список частиц будет не глобальным, а принадлежащим конкретному эмиттеру. А так будет и гравитация и блендинг и всё остальное. А что не будет в дефолтовых классах - можно будет дописывать "под себя". (: Частицы в HGE мне не нравятся из-за их нерасширябельности (если только основной код править, что и приходилось), а в целом сделано достойно. Но для шароварок, ИМХО, уже не достаточно. К вечеру допишу базовые классы, посмотрим, что получится. Скриншот выложу. |
Re: elmax - набросок фреймворка
Вложений: 2
Сейчас стандартный эмиттер имеет 38 параметров, а стандартная частица 13 параметров.
Всё работает, вполне неплохо, но не хватает заточенных под разные нужны эмиттеров, чем я и займусь в ближайшее время. А пока вот скрин. |
Re: elmax - набросок фреймворка
Первый пост обновлён.
Last Version 0.0.3 (30.08.2007) + Класс цвета с возможностью конвертаии из Byte в Float и фнкция извлеченя ветовых составляющих из Int. + Система частиц с 3 эмиттерами (стандартный, по чёрно-белой маске и дрожищий) и загрзкой из xml. |
Re: elmax - набросок фреймворка
раздражает вечный эмитер на курсоре. и еще, скролбар иногда становится красным. это баг?
|
Re: elmax - набросок фреймворка
dimanche13
Ну, это ж демонстративная прога, её цель не успокаивать, а демонстрировать. Причём всё и сразу. (: Потому вполне нормально, если некоторые элементы будут разражать. (: А красный скроллбар - это скорее всего баг, но повторить его у меня не полчилось. Можешь заскриншотить его и описать, как оно у тебя так вышло? |
Re: elmax - набросок фреймворка
я заскриншотил, да не знаю как на форуме прицепить картинку...
|
Re: elmax - набросок фреймворка
Засовывай на http://imageshack.us/
|
Re: elmax - набросок фреймворка
|
Re: elmax - набросок фреймворка
Да, это баг. Возникает при выделении последнего пункта в списке. Пофиксил.
|
Re: elmax - набросок фреймворка
не обязательно последнего. Всх пунктов, которые гносят имя Second List Item.
|
Re: elmax - набросок фреймворка
dimanche13
Пофиг, всё равно пофиксил. (& Есть у кого-нибудь пожелания по частицам? Код вообще кто-нибудь ковырял? Структура в целом как? Хочет по коду отзыв услышать... |
Re: elmax - набросок фреймворка
Код:
Const PS_LIFE:Int = 2, и еще Код:
Local children:TList = New TList Код:
children:Tlist = new( node.getChildren() |
Re: elmax - набросок фреймворка
Действительно, должно быть 128, это я ошибся. Остальной код тож попробую...
|
Re: elmax - набросок фреймворка
Вот поэтому я делал так enum (для С правда) от 1 до конечного, ну чтобы было типа:
Код:
Const PS_LIFE:Int = 1, Код:
if temp & (1 << PS_LIFE) then ... |
Re: elmax - набросок фреймворка
dimanche13, а как реализуешь систему смешивания флагов? Смотри в стандартных флагах б3д, там удобно что можно смешать и те и те флаги, а у тебя как тогда?
|
Re: elmax - набросок фреймворка
Код:
|
Re: elmax - набросок фреймворка
dimanche13
бррр в блице флаг указыватся вот так 2 + 8 + 512 и все нормально слишком много кода писать в твоем способе надо |
Re: elmax - набросок фреймворка
Цитата:
Код:
enum { PS_LIFE = 0, PS_POSITION, PS_GRAVITY, ... } Ну и наконец, не перестану повторять, что каждый сам выбирает как ему делать, даже может изобретать свои способы. А иначе програминг стал бы простым копипастом. |
Re: elmax - набросок фреймворка
Ну, я ж не на Си сейчас прогаю.
Работает - значит всё гут. Скоро выложу апдейт с русским вводом. (: |
Re: elmax - набросок фреймворка
Первая страница обновлена.
Last Version 0.0.4 (31.08.2007) + Добавлены новые GUI контролы (текстовая кнопка, строка ввода) * Исправлены ошибки в системе частиц * Добавлены параметры дистанции для эмиттеров |
Re: elmax - набросок фреймворка
elmortem
там русский работает ? а unicode вообще ? |
Re: elmax - набросок фреймворка
jimon
Русский работает, юникод при вводе я на языках, отличных от русского затестить не могу, у меня нет диска с виндой, а ввод настроен только для русского и английского. Поидее там надо utf8.bin менять символами, которые хочешь использовать при вводе... Причём только с 128 до 255 с учётом той локали, в которой бкдет осуществляться ввод. Т.е. я подозреваю, что сейчас будет работать только русский... Если у кого есть возможность затестить на других локалях - было бы хорошё... |
Re: elmax - набросок фреймворка
Заборол LUA-скриптинг. На днях выложу обновление.
|
Re: elmax - набросок фреймворка
Цитата:
|
Re: elmax - набросок фреймворка
Первая страница обновлена.
Version 0.0.5 (04.09.2007) + Добавлены скрипты * Структура движка адаптирована под скрипты. + Класс виджета, для создания отдельных элементов программы (управление через скрипты). * Лог выводит всю информацию только в DEBUG-режиме, иначе только пустые строки, SYS и ERR. * GUI контролы-кнопки (CGuiButton и CGuiTextButton) поддерживают указание скрипта на исполнение при нажатии. |
Re: elmax - набросок фреймворка
Молоток! Разработка продвигается семимильными шагами. Честно, говоря в ЛУА я не рублю совсем. Если будет время напиши статейку, как прикрутить ЛУА к БМАХу и как использовать эти скрипты. Думаю это многим пригодится.
|
Re: elmax - набросок фреймворка
Ну, как его использовать статья есть тут: http://blitzetc.boolean.name/articles/lua.htm, но там какая-то непонятная версия используется. У меня в ридми написано, где взять и как инсталить нормальный Lua для BM. Но мне не хотелось ковыряться с командами LuaAPI, поэтому я с оффициального сайта стянул OO Interface, слегка подточил его напильником и получился файлик lua.noel.bmx у меня в проекте. Если нужна статья, как использовать именно его - могу написать как-нибудь...
Думаю следующий апдейт будет, когда я напишу оболочку для игры - основное меню, опции, страничка об авторах, и геймплей... Всё это отдельные виджеты. |
Re: elmax - набросок фреймворка
Блин, и правда, в ридми написано как его установить. Буду пробовать. Жду следующего апдейта. Бегло поглядев код, остались какие-то смутные ощущения... что где-то что-то не так... но что? пока не пойму - не скажу...
|
Re: elmax - набросок фреймворка
Я вот думаю написать отдельные методы для ввода и несколько переделать структуру GUI. Точнее не самого GUI, а его взаимодействия с остальными классами...
Так что буду раз любым замечаниям. |
Re: elmax - набросок фреймворка
Ох как я сейчас всё к чертям поломаю в движке. Всё станет проще и больше скрыто от юзера. (:
Элементы гуи будут доступны из lua-скриптов. На днях выложу альфа-версию движка. |
Re: elmax - набросок фреймворка
Давай-давай ))) ты бы нарисовал дерево классов, а то я начал было разбираться... да что-то голова закружилась ^___^ ниасилил
|
Re: elmax - набросок фреймворка
elmortem
кста давно хотел сказать :) да все забываю не стоит особо извращатся с архитектурой и фреймворками на системах уровня BlitzMax ... я конечно понимаю что круто построить мега архитектуру и быть в конечном итоге ею довольным ... (сам такое ощущаю) но в BlitzMax в некотором смысле по другому все делается тут практически все готово чтобы сесть и начать писать игру мне из таких низкоуровневых модулей понадобился только таймер все остальное - ресурс манагер, фпс щетчик и тд тесно сплетены с игрой и врядли где нибудь их можно просто так использовать :) я не говорю ничего конкретного по твоему фреймворку просто говорю что если захочется делать кучу типов - то не стоит |
Re: elmax - набросок фреймворка
Добавил контрол Чек-бокс. Структуру переделал, билд движка собрал. Как только соберу вменяемый сэмпл, показывающий все возможности фреймворка - выложу.
jimon Ну, во первых, как ты и сказал, я получаю от этого ни с чем не сравнимое удовольствие. (: Во вторых, я не вижу в голом Максе того, с помощью чего мне было бы удобно делать игру. Собственно я ни делаю ничего, что нельзя ре-использовать в нескольких проектах. Например GUI нужен везде. И менеджер ресурсов. И сейт-система, которую заменил на систему конвеер виджетов. А уж вывод текста в Максе просто никакой. ): Далее, вот конкретно Макс не такая уж слабая штука, чтобы с ней не поизвращаться, наворачивая. Всё же трансляция из бейсика в С++ с последующей компиляцией - не какая-нибдь там интерпретация. Скорость очень приемлемая, даже с таким обилием типов, что у меня получается. Собственно это и есть упрощённый С++ с синтаксисом Бэйсика. Так что не вижу смысла парится на счёт количество типов и глубины наследования. (: В общем с какой стороны не взгляни - ситуация меня устраивает. ^_^ У меня нет цели делать универсальный движёк. Но упростить себе разработку шароварок я смогу. Ну а паралельно может ещё кому пригодится. А нет - так я не обижусь. ^_^ dimanche13 Дерево классов и документацию надеюсь выложить вместе с альфой. Просто до этого общая структура не была ещё устоявшейся. Надеюсь теперь всё. (: |
Re: elmax - набросок фреймворка
elmortem, хм а как у тебя дела с отчиской? Утечек нету? Точно Проверял?
|
Re: elmax - набросок фреймворка
Цитата:
elmortem, а у тебя подобных поделок для 3д не было? |
Re: elmax - набросок фреймворка
MoKa
Память "специально" не выделяется. А если средствами Макса выделять память под объекты типов, то как может утечка появится? Вообще, ни у нигде нет статейки на тему правильной работы с памятью в Максе? JohnK 3Д не люблю, я казуален до мозга костей. (: Есть 2Д надстройки над OpenGL для Delphi и C++ (разные). Есть надстройка над HGE для С++, тоже 2Д. 3Д нафиг, у него нет будущего. Это переходное звено между 2Д и Виртуальной Реальностью. (: На счёт абстракций - так фигли такого-то? Нормальная обстрация, вполне удобоваримая. (: |
Re: elmax - набросок фреймворка
|
Re: elmax - набросок фреймворка
elmortem 3Д не люблю. Тоже думаю что 2Д себя не исчерпало.
Про память могу сказать одно. Она очищается и выделяется на лету, так сказано на оффсайте. Правда, говорят в pngloader есть протечка. Если любишь в памяти копаться, то для этого есть memmove, memcopy, GCSuspend и все в этом роде. |
Re: elmax - набросок фреймворка
манагер памяти в BMaxе довольно забавный :)
в общем в любом случае обьекты там надо удалять принудительно разве что локальные ссылки чистятся хорошо сами остальному я не доверяю :) |
Часовой пояс GMT +4, время: 22:57. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot