Релиз моего порта Flixel

Привет всем!
Последний месяц я в свободное время занимался допиливанием порта Flixel v2.55 (движка для создания 2d-игр) на haxe. Отличительной особенностью этого порта является его ориентация на кроссплатформенность (flash и c++). Специально для этого была переработана система рендеринга (для c++), которая теперь использует метод drawTiles().
Репозиторий проекта находится здесь: https://github.com/Beeblerox/HaxeFlixel. Там же лежит порт Mode demo.
Для компиляции проекта Вам может понадобится обновить библиотеку NME до версии 3.1.1 (лежит на haxelib).

Обращаюсь к членам сообщества с просьбой протестировать демку на предмет производительности (в демке есть fps-метр) на различных платформах (как настольных, так и мобильных) и написать в комментариях о полученных результатах. Если на тестируемой платформе установлен flash player, то дополнительно прошу сравнить производительность флэшки и нативного приложения.
Спасибо всем заранее.

UPD: Если кому интересна история портирования, то вот ссылка на статью о ней.

Комментарии

Какая то проблема с ассетами в таргете windows.

Я делаю примерно так:

class MenuBg extends Bitmap{public function new() { super(Assets.getBitmapData("assets/menu_bg.png"));}}

Далее в конструкторе FlxState делаю так:
spriteMenuBg = new FlxSprite( 0, 0, MenuBg );
add( spriteMenuBg );

В флеше работает как и ожидается, а вот в сабже — нет.
Может я что упустил в этой нехитрой процедуре?

Ах да, NME версии 3.3.0, чуть не забыл сказать.

После создания

После создания нового спрайта необходимо для него вызвать метод updateTileSheet():
spriteMenuBg.updateTileSheet();
Данный метод ищет / создает новый TileSheet, содержащий в качестве текстуры переданную битмапдату. Его можно спокойно вызывать на любой целевой платформе (на флэше он ничего не делает). Этот метод -небольшая плата за некоторую оптимизацию, иначе бы при каждой операции обновления графики спрайта создавался бы новый TileSheet.
Кстати в качестве аргумента-источника графики для спрайта можно просто передавать строку:
spriteMenuBg = new FlxSprite( 0, 0, "assets/menu_bg.png");
Таким образом, отпадает эта суета с дополнительными классами ресурсов. Так, вроде, проще.

UPD: вызывать метод updateTileSheet() нужно после загрузки изображения в спрайт, а не только после создания (в случае когда Вы передаете в конструктор соответствующий параметр)

Спасибо,

Спасибо, действительно проморгал.
А что работает напрямую со строками я уже разобрался, когда начал изучать как устроено и отчего не работает.

P.S. Вот только непонятно, отчего не вызывть ее изнутри makeGraphic, loadGraphic и loadRotatedGraphic соответственно, ведь без него не работает в любом случае. Или существует в этом безобразии такая ситуация, что не нужно при вызове loadGraphic создавать tileSheet?

Я уже не совсем

Я уже не совсем помню, почему так сделал, но одна причина точно была - связана она с методом makeGraphic() и классом FlxTileBlock. Дело в том, что при создании графики для объектов данного класса многократно используется этот метод, поэтому создавалось множество лишних tileSheet'ов (которые просто занимали память и вообще никак не отрисовывались).
Кстати Ваш вопрос навел меня на одну идею от того, как избавиться от вызовов этого метода (вроде как). Спасибо за него :)
Буду копать дальше.

Спасибо за тестирование

После Нового Года постараюсь выложить новую демку для тестирования (менее ресурсоемкую, может быть проблема в этом). Планирую также добавить поддержку html5.

всегда пожалуйста

по первым впечатлениям библиотека мне понравилась, так что наверняка поиграю с ней еще на досуге.

да, мы еще чуть позже с товарищем на Nexus S запускали сборку - та же история, вообще не думаю что трабл в ресурсоемкости. кстати, а вообще до этого на Андроид тестировалось это демо? должно оно на нем идти? )

На андроиде эта

На андроиде эта демка запускалась у кого-то с форума haxenme.org (некто rocks) на телефоне с 1.5GHz dual-core processor и 1G RAM. По его словам демка работала значительно медленнее flash-версии на этом же телефоне (25 fps против 30~45 fps). Деталей о модели телефона и версии ОС я не спрашивал.
На праздники собираюсь еще покопаться в библиотеке, может чего выйдет. Так что ждите вестей :)

потестировал

потестировал немного.
на старом ноуте с Вистой Mode demo в flash и в windows стабильно держатся у максимума в 60 fps.

потом собрал версию для Android и попробовал запустить ее на Acer Liquid E. К сожалению пока безуспешно. Открывается белый экран, затем приложение вылетает.
В LogCat видно следующие ошибки на запуске, сразу после CreateMainFrame! и Resize:

12-25 23:44:51.001: ERROR/NME(19218): SetWindowSize 480 800
12-25 23:44:51.041: ERROR/GameActivity(19218): java.io.FileNotFoundException: Times

далее следует длинный дебаг и сообщения о гибели приложения:
12-25 23:44:57.811: INFO/ActivityManager(121): Process com.example.myapp (pid 19218) has died.
12-25 23:44:57.811: INFO/WindowManager(121): WIN DEATH: Window{30400498 com.example.myapp/com.example.myapp.MainActivity paused=false}
12-25 23:44:57.811: INFO/WindowManager(121): WIN DEATH: Window{304e1ab0 SurfaceView paused=false}

не знаю, насколько это полезно, но при попытке сборки/запуска CaveGeneratorTest вместо MenuState в Mode.hx приложение запускается на телефоне успешно.

Спасибо!

Спасибо за теплый отзыв. Ссылку в пост добавил.

поздравляю!

о! как раз на днях на G+ видел чей-то репост об этом и поставил себе в watched на Github. и не знал при этом, что некий Beeblerox и наш местный Zaphod - одно лицо ) это радует и добавляет интереса к этому порту.
давно собирался поиграться с flixel, теперь вот появился еще один повод попробовать - так что как будет время в ближайшем будущем - доберусь. о результатах сообщу здесь.

p.s. кстати, хотя-бы ссылку на такой развернутый пост об этом порте Flixel было бы неплохо давать. Очень ведь интересно и в тему. Почитал с удовольствием и покликал немного в качестве нано-благодарности;)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <blockcode> <dd>
  • Строки и параграфы переносятся автоматически.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. The supported tag styles are: <foo>, [foo].
  • Use [gist:####] where #### is your gist number to embed the gist.

Подробнее о форматировании

CAPTCHA
Для отсева спамеров)
p
6
x
v
q
T
Enter the code without spaces and pay attention to upper/lower case.