Показаны сообщения с ярлыком советы. Показать все сообщения
Показаны сообщения с ярлыком советы. Показать все сообщения

Индексный доступ к элементам строки для записи

Стандартно 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;
Обход выполняется сначала по последним индексам.

Отрисовка куска изображения

Используем SetViewport
Function DrawImageRect(img:TImage, x#, y#, rx#, ry#, rw#, rh#)
SetViewport x, y, rw, rh
DrawImage img, x - rx, x - ry
SetViewport(0, 0, GFX_WIDTH, GFX_HEIGHT)
EndFunction

Особенности: надо знать абсолютные координаты.
Недостатки: SetViewport не всеми картами поддерживается.

Нашел новый сайт по разработке игр. Новая статья.

Ползая по сети, наткнулся на этот сайт - http://www.casualgamesecrets.com
Он еще в разработке, но кое-какие материалы на нем уже есть. Наличие одного из них побудило меня написать статью, которую я уже месяца с два собираюсь написать. Это статья "Torque Game Builder для «Чайников»". Вообще я решил написать просто коментарий. Написал. Ответственно так подошел, что получилась статейка. Туда ее запостить в качестве комментария не удалось - очевидно что-то у них еще не настроено (к тому-же зачем вводить код подтверждения зарегистрированным пользователям? И зачем такооой длинный?). Поэтому размещаю ее на своем сайте. Хотя у себя я бы ее все равно разместил, но в более развернутом варианте. Пришлось разворачивать, раз уж начал и размещать. Итак: "Еще раз замолвлю слово за Blitzmax"

Новая статья на http://blitzmax.3dn.ru: Советы по написанию и оптимизации кода

Начал новую статью, которая будет регулярно обновляться, в разделе Доки/Уроки. Статья с советами (хинтами) по оптимизации и написанию кода. Ее адрес: http://blitzmax.3dn.ru/publ/3-1-0-8. Пока два совета: некий аналог оператора Width и использование GCCollect.