Доброго!
Вобсчем презентую свой модуль для работы с 2-д графикой на БМаксе. По сути является более простой и продвинутой заменой стандартного Max2D.
итак поехали...
Type TImage Abstract
Method Width:Int() Abstract
Method Height:Int() Abstract
Method SetHandle(x:Float, y:Float) Abstract
Method PositionTexture(u:Float = 0.0, v:Float = 0.0) Abstract
Method ScaleTexture(u:Float = 1.0, v:Float = 1.0) Abstract
Method RotateTexture(angle:Float) Abstract
End Type
Думаю тут все ясно... это стандартный класс картинки. Текстуру картинки можно прокручивать/скейлить/ротэйтить.
Type TFont Extends TImage Abstract
Method SetCharRect(char:Byte, x:Int, y:Int, w:Int, h:Int) Abstract
Method SetCharKerning(kerning:Float) Abstract
Method SetLineKerning(kerning:Float) Abstract
End Type
А вот тут интереснее... Это класс графического шрифта. Он расширен от картинки, поэтому имеет все свойства предка (например, шрифт можно отрисовать как простую картинку). Реагирует на все трансформации глобальной матрицы, можно установить индивидуально каждому глифу ширину/высоту/позицию на текстуре по обеим осям/отступы между буквами/строками.
Type TFontLoader Abstract
Rem
bbdoc: Функция загрузки графического шрифта
about:
Если загрузка шрифта прошла успешно, функция должна вернуть True.
End Rem
Method Load:Byte(font:TFont, stream:TStream) Abstract
End Type
Загрузчик шрифтов. При запуске программы в системе автоматом устанавливается дефолтный моноширинный шрифт и загрузчик шрифтов HGE.
Type TEmitter Extends TImage Abstract
Method SetImage(image:TImage) Abstract
Method Copy:TEmitter() Abstract
Method SetIndepend(enable:Int = True) Abstract
Method SetEmission(emission:Int) Abstract ' parts/sec
Method SetLifeTime(time:Float, spread:Float = 0.0) Abstract
Method SetG(grav:Float, spread:Float = 0.0) Abstract
Method SetW(wind:Float, spread:Float = 0.0) Abstract
Method SetLSpeed(speed:Float, spread:Float = 0.0) Abstract
Method SetRSpeed(speed:Float, spread:Float = 0.0) Abstract
Method SetTSpeed(speed:Float, spread:Float = 0.0) Abstract
Method SetLAccel(accel:Float, spread:Float = 0.0) Abstract
Method SetRAccel(accel:Float, spread:Float = 0.0) Abstract
Method SetTAccel(accel:Float, spread:Float = 0.0) Abstract
Method SetEndSize(size:Float, spread:Float = 0.0) Abstract
Method SetEndColor(r:Float, g:Float, b:Float, a:Float, spread:Float = 0.0) Abstract
Method Count:Int() Abstract
End Type
Это класс для работы с системой частиц. Пока не рекомендуется к использованию. Так как работа над ним еще не закончена.
--------------------------------------------------------------------------
Также из модуля выпилены многие ненужные возможности из Max2D.
* Оставлены только 2 бленда - альфа и лайт. Остальные выпилены в виду бестолковости.
*
AutiMidHandle и
AutoImageFlags - это теперь глобальные переменные.
* Оставлено 2 флага -
FILTEREDIMAGE и
MIPMAPPEDIMAGE
* Выпилина кривая работа с трансформациями. Теперь все происходит на основе стека.
то есть вместо функций SetRotation/Scale мы работаем с матрицей напрямую
Translate(x, y) - перенос
Scale(x, y) - отмасштабировать
Rotate(angle) - повернуть
Есть возможность оперировать с историей изменений мартицы.
PushMatrix() - сохранить
PopMatrix() - восстановить
LoadMatrix() - сбросить текущую матрицу в идентичность
Соответственно, изменился интерфейс отрисовки. Теперь он выглядит так :
DrawImage(image:TImage, frame:Int = 0)
Что бы отрисовать картинку на курсоре мыши :
LoadMatrix()
Translate(MouseX(), MouseY())
DrawImage(image)
Для кого то может показаться геммороем, но такой способ отрисовки более грамотен чем тот, который был предложен мистером Сибли. Многие вещи будут реализовываться гораздо проще именно стеково-матричным способом.
В этом модуле отсутствует Max2D коллизия в виду ее тормознутости. Зато присутствует быстрый Image-mouse picking
Модуль полностью задокументирован на русском языке, поэтому особых сложностей вызвать не должен.
Работа над модулем продолжается...