Написал наконец-то статейку про то как прикрутить ассемблерный код к Blitzmax. Ознакомится можно по адресу: http://blitzmax.3dn.ru/publ/3-1-0-17
Статья не раскрывает разных тонкостей, но общая методика в ней показана. Надеюсь, она будет полезной.
Particles
По немногочисленным, но периодическим просьбам коллег выкладываю исходники своей сисчемы частиц с подгрузкой эффектов из скриптов.
Краткие характеристики:
Естественно, можно делать эффекты из кода в рантайме. В архиве есть пример в "particles.bmx" функция для эффекта взрыва PFX_Explode_1.
Скачать можно тут: http://blitzmax.3dn.ru/load/8-1-0-13
Лицензия: свободно для использования и любых модификаций без уведомления, в любых типах проектов, с обязательным упоминанием автора.
Краткие характеристики:
- загрузка эффектов из скриптов;
- архитектура: эмиттер > группа > частица;
- свойства и анимации: вращение, движение с ускорением и без, размеры, анимация цвета и спрайта, жизнь, период анимации, наложение (альфа или световое) и др.;
- области эмиттера для появления новых частиц: прямоугольник, точка, окружность;
- эффект следа или "хвоста" (group_trace)
Естественно, можно делать эффекты из кода в рантайме. В архиве есть пример в "particles.bmx" функция для эффекта взрыва PFX_Explode_1.
Скачать можно тут: http://blitzmax.3dn.ru/load/8-1-0-13
Лицензия: свободно для использования и любых модификаций без уведомления, в любых типах проектов, с обязательным упоминанием автора.
Индексный доступ к элементам строки для записи
Стандартно Blitzmax не позволяет записывать в строку, используя индексный доступ. Но с помощью небольшого трюка это можно забороть.
Вот исходник, показывающий подробно, как это делается:
| Local str$ = "Hello" Print str Local p:IntPtr = IntPtr(Varptr(str)) Local pchar:ShortPtr = ShortPtr(p[0]) pchar :+ 6'this offset depends on String structure pchar[0]=Asc("H") pchar[1]=Asc("e") pchar[2]=Asc(" ") pchar[3]=Asc("h") pchar[4]=Asc("e") Print str |
Или вот так в одну строку можно получить указатель на первый символ:
Local pchar:Short Ptr = Short Ptr(Int Ptr(Varptr(str))[0]) + 6
Как видно из примера, мы просто получаем указатель на первый элемент строки во внутренней структуре строкового типа языка.
Ссылка на статью с другими советами: http://blitzmax.3dn.ru/publ/3-1-0-8
Работа с многомерными массивами
Если мы объявили многомерный массив как массив значений (Local a[n,m]), а не массив массива (a[n][m]), то пройти весь массив можно не стандартным способом с вложенными циклами, а одним foreach:
Обход выполняется сначала по последним индексам.
| Local a[2,2] a[0,0]=1; a[0,1]=2; a[1,0]=3; a[1,1]=4 For Local i:Int = EachIn a; Print i; Next; |
Перерыв
После бааальшога перерыва решил продолжить этот блог.
Приношу извинения за остывшиеся без ответов вопросы. Я перебрался на сайтик по БМ, который http://blitzmax.3dn.ru, а с этого почему-то не приходят извещения о коментах. Сейчас подправил настройки, должно работать, но лучше все-же постить на http://blitzmax.3dn.ru.
А этот блог будет для повышения цитируемости.
Дизайн вот тут поменял.
Подписаться на:
Сообщения (Atom)