gps мониторинг автотранспорта и мобильных сотрудников. |
Вход > Palm OS > Май 2001г. | |
28 Мая 2001г.Адаптация программ для PalmOS с учетом возможностей HandEra 330автор:В марте этого года компания TERMINAL Studio начала проект «BrickShooter для всех платформ». Мы решили портировать нашу популярную игру под различные платформы. Изначально, разумеется, была десктоповая версия для Windows, а сейчас уже существуют версии для PalmOS и Windows CE (Pocket PC). Именно с этих платформ мы начали, поскольку поступали множественные просьбы от поклонников игры, которые хотели, чтобы любимая игра была с ними везде.
Мне принадлежит идея игры, я же ее и реализовал, создав полтора года назад Windows-версию. Но сначала вкратце о том, о какой игре пойдет речь.
Что такое BrickShooter BrickShooter — игра, основанная на совмещении «кирпичиков» разного цвета. Игровое пространство состоит из двух частей: поля 10х10 и периферийной части — четырех групп по десять очередей из трех кирпичей.
С периферийной части они выпускаются на поле, и каждый из них имеет направление, в котором стремится двигаться все время. Направления отмечены на кирпичах стрелками. Первоначально на поле стоят «кирпичики» без стрелок: это неподвижные «кирпичики», они никогда не перемещаются.
Если путь подвижного кирпича преграждает другой кирпич, он останавливается, но как только пусть освободится, он продолжит двигаться в том же направлении. Если кирпич достигает противоположенной стенки, он занимает в ее очереди ближнее к полю место.
Когда три или более кирпичей одного цвета встречаются, они взрываются, принося игроку очки.
Инвентарь Есть много вариантов набрать инструментарий. Для написания BrickShooter for PalmOS были использованы следующие инструменты:
HandEra 330 Первым делом посмотрим, какие новые функции это чудо современной техники предоставляет, и что BrickShooter из этого использует, а что нет:
1. HiRes и повороты Поддержка этой возможности в свою очередь распадается на две задачи: во-первых, нужно использовать высокое разрешение и, во-вторых, показать операционной системе, что эта возможность задействована.
Начнем с первого. Прежде чем задействовать специальные экранные функции, необходимо проверить, поддерживаются ли они. Если вызвать одну из таких функций на устройстве, которое их не поддерживает, это его сразу «порушит». Чтобы проверить наличие поддержки VGA-функций (так они называются), вызывают FtrGet:
int VgaEnabled(void) &version);
HANDERA здесь глобальная переменная, к которой программа обращается, когда нужно проверить, поддерживаются ли VGA функции, чтобы каждый раз не дергать FtrGet.
Теперь при запуске программы можно проверить устройство на наличие поддержки VGA-функций и установить необходимый режим.
if (VgaEnabled())
Первый параметр screenMode1To1 указывает на то, что окно программы не следует растягивать в полтора раза, а второй rotateModeNone — на то, что не нужно производить поворот экрана. Очевидно, что для того, чтобы задействовать поворот экрана, нужно лишь изменить второй параметр.
Теперь предстоит изменить размер формы. Это также не представляет особых трудностей:
void SizeForm(FormPtr *frmP) &rect);
Эта функция даже представлена в «Programmer companion». Ее же придется вызывать при изменении размеров окна при максимизации или минимизации silkscreen, но об этом немного позже.
Что делать с такой большой формой? Тут открываются просторы для творчества. В BrickShooter был создан новый набор «кирпичиков» и другой графики, а при отрисовке проверяется, не на HandEra ли исполняется программа, и если да, рисуется большая картинка по особым (практически почти что умноженным на 1,5) координатам. Вот частный случай, рисование «кирпичика» с игрового поля:
if (!HANDERA)
Остаются остальные формы, в которых хотелось бы просто увеличить шрифт. Для этого предусмотрена функция VgaFormModify:
if (HANDERA)
Где form — указатель на активную форму. Эта функция «растягивает» форму в полтора раза, заменяя стандартные шрифты на укрупненные, поддерживаемые HandEra.
Теперь вторая часть: как показать операционной системе, что программа поддерживает высокое разрешение. Ведь необходимо, чтобы в разделе Applications утилиты Preferences программа фигурировала как HiRes. Для этого нужно добавить HEX-ресурс. Я использую PilRC, поэтому мне необходимо было прописать такую строчку:
HEX "sKst" ID 1000 0x00 0x00 0x00 0x00
2. Виртуальный silkscreen: поддержка минимизации должна обрабатывать событие displayExtentChangedEvent. При получении формой такого события следует изменить ее размер и сделать перерисовку. Добавляем такой обработчик:
case displayExtentChangedEvent: SizeForm(FrmGetActiveForm()); FrmDrawForm(FrmGetActiveForm()); DrawField(1) // Перерисовка игрового поля handled = true; break;
Вот, в общем, и вся поддержка. Как использовать освободившееся место, думаю, не нужно рассказывать.
3. Крупные иконки Раз разрешение устройства выше, а размер экрана почти тот же, значит пиксели меньше. Раз пиксели меньше, нужно использовать более крупные шрифты. Но поскольку в launcher используются крупные шрифты, нужно использовать и более крупные иконки, что HandEra и делает. Наряду с иконками размеров 22x22 и 15x9 в HandEra используются иконки 32x32 и 24x14.
Таким образом, в программу нужно включить еще три семьи иконок. Почему три? Дело в том, что нужен еще один комплект инвертированных 32x32 иконок для использования при замене иконки калькулятора на silkscreen. Эти семьи должны иметь ID 2000 (32x32), 2001 (24x14) и 2002 (инвертированные 32x32).
4. Шрифты Шрифты HandEra напрямую в BrickShooter используются только в одном месте — в About при указании того, на каком устройстве исполняется программа. В остальных местах они используются косвенно, при «растягивании» формы. Шрифты вызываются очень просто, той же функцией FntSetFont, что и на обычных устройствах:
FntSetFont(VgaBaseToVgaFont(boldFont));
В принципе, это все, что нужно для того, чтобы сказать «моя программа поддерживает основные функции компьютера HandEra».
Заключение Результат всех трудов, то есть саму версию BrickShooter для Palm можно найти и загрузить с сайта TERMINAL Studio
Опубликовано с любезного разрешения автора
Ссылки по теме:
|
|
Просим при воспроизведении материалов этого сайта
делать ссылку на Зоопарк ручных компьютеров
Copyright © 1999-2016 Зоопарк ручных компьютеров |