Значится чтобы развеять еще один миф - "чего-то насыпать, размешать и будет суп", порассуждаем на тему мобильного 3D.
Зададим себе вопрос - что происходит, когда мы "добавляем в мидлет классы с других телефонов"? Что, неужели появляется поддержка mmf, mp3, подсветки, вибры? Ответ отрицательный. Возникают ли глюки с корректным отображением графики? Ответ положительный.
Так что же мы тогда делаем и почему это работает? Все очень просто: Виртуальная Ява Машина (далее ВМ) есть промежуточное звено между мидлетом и ОС самого телефона. Мидлет работает в своеобразной песочнице, где его изолируют от всех возможностей телефона предоставляя только гарантированный набор, который регламентирован в MIDP и CLDC. Учтем, что этот набор жестко описан и мидлет, написанный только по этим стандартам будет одинаково работать на разных платформах, правда UI (пользовательский интерфейс) может отличаться.
С целью облегчения жизни программистам, увеличения производительности (ведь всегда есть некие особенности реализации ВМ) производители выпустили расширения для стандартов. Например, доступ к файловой системе - по стандартам MIDP 1 и CLDC 1.0 это не возможно.
Итак, допустим, в игре мы используем звуки в mmf. Для этого мы загружаем специальный Нокиевский объект sound, который входит в Нокиевское расширение MIDP 1.0
Запустим такой мидлет на Сименс: при запросе инициализации sound, ВМ начнет искать класс, который отвечает за это и, естественно, не найдет его. ВМ сгенерирует исключительную ситуацию и выдаст сообщение об ошибке. Добавим этот класс в мидлет, теперь ВМ находит объект, инициализирует его, но, фактически, работает с пустышкой, потому что на уровне самой ВМ поддержка этого формата у нас не реализована. Т.е. нами была создана своеобразная "заглушка", с которой большинство мидлетов могут нормально функционировать.
Какие варианты возможны?
- Расширения просто дополняют стандартные классы, вводя новую функциональность - тогда добавив их в мидлет мы полностью восстановим работу (например расширение для канвы, чтобы воспринимать коды от разных джойстиков)
- Расширения дают доступ к специфическим возможностям телефона - объекты изолируются на уровне ВМ, т.к. в ней нет для них обработчиков (или ВМ "падает", так например если включить вызов вибры, то стандартный эмулятор из WTK2 падает)
Все это справедливо и для технологии 3D. Функциональность 3D движка описывается, естественно, не в файлах class - они не более чем "обертка", описание интерфейсов создания, инициализации и уничтожения (как например paint() у объекта canvas - это событие связано с экраном и ответственность за него лежит на ВМ). Добавив оберток, мы "конфетку" не получим Единственный путь - писать "враппер", который будет реализовывать функциональность движка средствами другого движка (помните OpenGL через DirectX?? вот тут полная аналогия).
Только для j2me такой враппер НИКОМУ не нужен! Представьте, к примеру, что в CLDC 1.0 нет даже чисел с плавающей запятой: реализация 3D движка силами j2me + другой 3D движок = страшный неповоротливый геморрой.
Автор статьи - iceman345
© Доступно только для пользователей