forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты на BlitzMax (http://forum.boolean.name/forumdisplay.php?f=106)
-   -   elmax - набросок фреймворка (http://forum.boolean.name/showthread.php?t=4262)

elmortem 27.08.2007 15:49

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. Универсальная система профиля игрока.

Зачем всё это?

Мне нужен удобный инструмент для разработки казуальных игр. Если он ещё кому-то пригодится - можете поделиться со мной своей прибылью! ^__^

dimanche13 27.08.2007 16:37

Re: elmax - набросок фреймворка
 
Забавненько, сейчас правда похвастаться не чем, окна то прозрачны , то нет. XML - оно читает, а надо ли? В чем будет сохраняться система частиц? Универсальная система сохранения\загрузки игры - что это?
http://elmortem.mirgames.ru/ - это ты?

elmortem 27.08.2007 16:59

Re: elmax - набросок фреймворка
 
Прозрачны не активные окна, это было сделано для теста активности окна. (:
Т.е. если клацнуть по окну, то оно станет активным, а если вне окна - не активным.
XML - очень удобный и наглядный формат хранения данных. Так что определённо надо. Загрузка может немного дольше, но за-то не нужно никакого дополнительного софта для редактирования - блокнотик открыл и подредактировал.

Частицы так же будут в XML по той простой причине, что эммитер имеет крайне небольшое число параметров, так что придумывать новый бинарный формат смысла не имеет. К тому же проще будет портировать систему частиц.
Пока создание редактора частиц не предполагается, всё ручками в блокноте.

Система сохранения и загрузки игры позволит регистрировать "в себе" разные данные и сохранять\загружать их. Не зная всех возможностей Макса я пока детально не думал над этим... Но это точно не будет "волшебной сохранялкой читающей мысли". Просто несколько упростит работу и уменьшит написание кода в дальнейшем.

В общем сейчас занимаюсь GUI и форматированным текстом, а там видно будет.

dimanche13 27.08.2007 17:17

Re: elmax - набросок фреймворка
 
ВЫкладывай следующие версии, пощупаем :) Если действительно будет работать всё то, что ты заплонировал без глюков и тормозов, то это будет просто супер.

moka 27.08.2007 17:27

Re: elmax - набросок фреймворка
 
Насчёт xml согласен с тобой, т.к. это отличный формат хранения информации.

Запустил и Сразу же с первого действия нашёл баг ;)
Значит двигай за край быстро окно, над другим окном, то тоже задвигаеться, т.к. ты у тебя перемещение окна на позицию куда переместить стоит До изменения координат курсора.
Далее, у тебя гуи не динамичны - окошко одним рисуночком, а не из частей гуи эллементов.

dimanche13 27.08.2007 17:47

Re: elmax - набросок фреймворка
 
Да, это еще ладно, что два окошка вместе двигаются. У меня вообще вылетало из программы и даже не говорило почему.

moka 27.08.2007 17:48

Re: elmax - набросок фреймворка
 
elmortem, ещё могу посоветовать добавить лог систему, для ведения логов в дубаг моде, а так же динамичный дебаг логгер, в самой игре, где будут графики всякие.

elmortem 27.08.2007 17:59

Re: elmax - набросок фреймворка
 
dimanche13
http://elmortem.mirgames.ru - да, это я...

MoKa
На счёт перемещения окна гляну, хотя для моих целей перемещать окна вообще не нужно, это я уж так, в порыве знакомства с Максом... (:
Собственно поэтому гуи не динамический, для казуалок обычно это просто не нужно. Каждый элемент должен быть неповторим и исключителен. Так что все бэки для окон и кнопочек будут рисоваться целиком. Хотя возможно будет контрол кнопки из 3 частей (лево, тянущаяся серёдка и право)...
debuglog я использую, где нужно. И уже прикрутил лог в файл, так что всё нормально. (:

На счёт вылетов, надо бы трай-кетч использовать, но мне лень, всё-таки это бейсик, а не С++. ^_^

dimanche13 27.08.2007 18:08

Re: elmax - набросок фреймворка
 
Try & Catch тоже есть в BlitzMax. Assert -есть. Вылеты - это самый страшный из грехов. А неожиданные вылеты в самый интересный момент, вообще приводят к раннему выпаданию волос игроков)))

moka 27.08.2007 18:17

Re: elmax - набросок фреймворка
 
elmortem, насчёт кнопочки лучше не растягивающуюся а зацикленную и последняя отсечённая.

elmortem 27.08.2007 18:25

Re: elmax - набросок фреймворка
 
dimanche13
Знаю, что есть, но мой мозг ещё не свыкся с мыслью, что это "не просто бейсик"... (:
В оригинале вылетов быть не должно. А пока сделаем вид, что это триальным период. ^______^

elmortem 28.08.2007 13:45

Re: elmax - набросок фреймворка
 
MoKa
Что-то я не нашёл функции, возволяющей менять uv-координаты текстуры, чтобы сделать отсечение. ):
Так что контрол Скролла пока сделан через DrawImageRect, который растягивает серёдку... В принципе при правильно рисовании серединной части тянуться будет нормально...
Но если подскажешь способ рисования с отсечением - будет круто. (:

Разобрался с перемещением окна, теперь нельзя случайно зацепить несколько штук - только одно, которое начал перемещать изначально.

Для текста пока сделал форматирование по горизонтали и вертикали с учётом переноса строк. Думаю над тем, нужно ли делать раскраску отдельных слов (как в Quake III)...

dimanche13 28.08.2007 14:19

Re: elmax - набросок фреймворка
 
Вообще-то в любом TImage есть поле Pixmap. Это прямой доступ к байтам картинки и делай с ней что хочешь.

elmortem 28.08.2007 14:22

Re: elmax - набросок фреймворка
 
dimanche13
В реалтайме ковыряться с байтами нецелесообразно - скорость не та. Или там какие-то другие байты?

moka 28.08.2007 14:25

Re: elmax - набросок фреймворка
 
Глянь функцию: SetViewport


Часовой пояс GMT +4, время: 01:21.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot