Эта тема для интересующихся разработкой будущих проектов для Wiz-а.
На примере проекта gp2x/win32 будет расмотрены пара особеннойстей написания приложений.
1. На gp2x/wiz у джойстика нет понятия "осей", как на компьютерных геймпадах. Крестовина (стик на gp2x f100) преставлена в виде 8 кнопок направления и 9-й кнопки - нажатия на сам стик. Но, геймпады подключаемые через кредл читаются аналогично как и на компе (2 оси как минимум + кнопки и.т.д.). Это первое маленькое неудобство, которое возникнет при написании приложения одновременно и для Windows и для Gp2x/Wiz.
Для игровых проектов лучший вариант - завести структуру данных, описывающих состояние "виртуального" геймпада.
Лично я предпочитаю для каждой кнопоки(но не для самой крестовины) завести по байту: 0- кнопка не нажата, 1- кнопка только что нажалась, 2- кнопка нажата, и была нажата в прошлом кадре.
И игровые события (например перемещение в меню) "вешать" на 1. В случае повторяющего действия (непрерывный огонь) то на отличные от нуля значения.
Для осей крестовины как вариант можно использовать два числа (int) со знаком. Особенно этот вариант хорош, если вы собираетесь сделать подобие аналогового стика (скажем через тачскрин) для передвижения персонажа.
Мой вариант был - два числа (по байту со знаком). Центральному положению соответствует -1 (минус один). Значения 0-7 для направлений. Текущее направление стика держится в первом байте. А во второй байт "пишется" новое значение направления, если текущее направление отличается от предыдущего, иначе -1. (очень полезно для игровых менюшек)
Историческая справка: На "перемоденных под ди-пад" Gp2x нужно было учитывать, что диагональные кнопки переставали нажиматься, а диагонали подразумеваются нажатыми, когда нажаты одновременно две ближлежащие кнопки (например вверх и влево).
2. На Gp2x и Wiz будет ARM процессор
Что он "не очень любит" - это операции деления и числа с плавающей точкой.
Советы:
деления на степень двойки (2, ..., 64..., 1024...) стоит заменить на операцию битового сдвига. Причём делать это в отдельную строчку (совет из жизни), компилятор иногда любит проскакать мимо скобок
Поэтому размеры тайлов и спрайтов в игре желательно делать по ширине-высоте кратным степени двойки.
Замена чисел с плавающими точками (fixed point engine в двух словах, пригодится в OpenGL ES):
Предположим у нас два 32битных числа со знаком (signed long int)
первые 16 бит будут у нас целая часть(со знаком), а оставшиеся 16 бит - дробная.
То есть 1.0 будет 65536
2.0 это 2 *65536
0.5 это 32768
и.т.д.
Целая часть у нас будет примерно от -32 тысяч до +32 тысяч (хвостики не учтены).
Для операций с ними заведём пару макросов в коде
Спасибо, ценный док для новичка. Сделать что-нибудь на GP2X у меня не получилось, может хоть для Виза напишу какую-нибудь ерунду.
Спасибо, жаль инфа очень сильно привязана к GP2X. Посмотрим как будет с Wiz-ом.
К GP2X сдесь привязан только код main.c
Я просто рассмотрел пару подводных камней. Надеюсь с возраждением GP2X.RU появится место для подробных туториалов.