Ошибка LimeJS на Android-устройстве запуска CocoonJS

В качестве прелюдии к переносу моей игры LimeJS с ПК на Android я пытаюсь заставить Android CocoonJS Launcher работать с базовым приложением LimeJS. Я что-то здесь не так делаю?

У меня есть несколько вопросов, некоторые из которых могут быть известны только Тынису Тийги, поэтому я также задам ему:
Известно ли, что LimeJS работает на CocoonJS Android Launcher или есть проблемы с LimeJS, которые не были решены для этой платформы?
Если есть проблемы, планируется ли поддержка этой платформы или в стадии разработки? Если нет, мне придется подумать о переписывании, чтобы использовать игровой движок, который, как известно, работает с CocoonJS.

Я скачал и установил пакет limejs-no-dom, и он работает на моей машине с Windows. Я адаптировал базовые файлы \limejs-no-dom\lime\demos\tests\anim1 и run_canvasonly.htm к своему собственному тестовому проекту. Это прекрасно работает без ошибок консоли. Я сделал сборку lime.py, чтобы создать тест, который я загрузил на свой удаленный сервер. Когда я получаю к нему доступ из своего браузера, он работает нормально, без ошибок консоли. Когда я подключаю свой Android-телефон к сайту с помощью приложения CocoonJS Launcher, я получаю черный экран. Есть исключение JavaScript: TypeError: Невозможно прочитать свойство parentNode из undefined в объекте goog.style.installStyles

<!DOCTYPE HTML>
<html>
<head>
    <title>Run MBTest</title>
    <script type="text/javascript" src="mbt.js"></script>
</head>
<body onload="mbtest.start(document.getElementById('mycanvas'))">
    <canvas id="mycanvas" width="500" height="500" style="border: 3px solid #c00"></canvas>
</body>
</html>

goog.provide('mbtest');

goog.require('lime');
goog.require('lime.Button');
goog.require('lime.Circle');
goog.require('lime.CoverNode');
goog.require('lime.Director');
goog.require('lime.Label');

goog.require('lime.Layer');
goog.require('lime.Scene');
goog.require('lime.Sprite');
goog.require('lime.animation.Loop');
goog.require('lime.animation.MoveBy');
goog.require('lime.animation.RotateBy');
goog.require('lime.animation.ScaleBy');
goog.require('lime.animation.Sequence');
goog.require('lime.animation.Spawn');
goog.require('lime.animation.ColorTo');

mbtest.WIDTH = 600;
mbtest.HEIGHT = 400;

mbtest.start = function(parent) {
    mbtest.director = new lime.Director(parent || document.body, mbtest.WIDTH, mbtest.HEIGHT);
    mbtest.director.makeMobileWebAppCapable();

    var menuscene = new lime.Scene;

    var layer = (new lime.Layer).setPosition(100, 100);
    menuscene.appendChild(layer);

    var sprite = new lime.Sprite().setFill(100,0,0).setSize(50, 50).setRenderer(lime.Renderer.CANVAS);
    layer.appendChild(sprite);

    var anim = new lime.animation.Sequence(new lime.animation.Spawn(
        new lime.animation.MoveBy(200, 0).setDuration(1.5),
        new lime.animation.ScaleBy(2),
        new lime.animation.ColorTo(0,200,0)

        ),    new lime.animation.Spawn(
            new lime.animation.MoveBy(-200, 0).setDuration(1.5),
            new lime.animation.ScaleBy(.5),
            new lime.animation.ColorTo(200,0,0)

            ));
    sprite.runAction(new lime.animation.Loop(anim).setLimit(5));

    var sprite = new lime.Sprite().setFill('#0c0').setSize(50, 50).setPosition(0, 100).setRenderer(lime.Renderer.CANVAS);
    layer.appendChild(sprite);

    var anim = new lime.animation.Spawn(
        new lime.animation.RotateBy(-90).setDuration(3).enableOptimizations(),
        new lime.animation.MoveBy(300, 0).setDuration(3).enableOptimizations()
    );
    var a2 = new lime.animation.Sequence(anim, anim.reverse());
    sprite.runAction(new lime.animation.Loop(a2).setLimit(5));

    mbtest.director.replaceScene(menuscene);
};
goog.exportSymbol('mbtest.start', mbtest.start);

1 ответ

Основной целью развертывания для ветки no-dom была Ejecta. Поскольку сообщество проявило интерес к CocoonJS, и он был похож на 99%, код также был протестирован с помощью запуска CocoonJS. Я никогда не пробовал это больше, чем запуск демонстрационных игр. Многие другие люди сообщили, что они успешно запустили свои игры.

Есть некоторые крайние случаи, которые не закончены (например, загрузка шрифта). Кроме того, я не слил его в master, потому что у меня нет реального производственного кода, который бы использовал это. Поэтому я не уверен, что смогу обеспечить поддержку этого кода. На данный момент весь код является общедоступным, но его использование лежит на ответственности автора игры.

Сегодня я снова запустил демонстрационные игры на панели запуска (на iPhone, а не на Android). Была небольшая проблема с API синхронизации, которая теперь исправлена ​​(похоже, не та же ошибка, что и у вас) https://github.com/digitalfruit/limejs/commit/5ad9eb67a но в остальном они работали нормально.

Выложенная вами ошибка кажется допустимой ошибкой, но я не имею ничего общего с вашим примером кода. Для запуска требуется скомпилированная игра внутри zip-контейнера. Если у вас есть проблемы с созданием контейнера, посмотрите на образец в Makefile.

Также, если у вас есть отчет об ошибке (с тестовым примером), я бы предпочел, чтобы вы открыли проблему в Github вместо Stackru.

Другие вопросы по тегам