LimeJS在CocoonJS Android Launcher上失败了

时间:2014-03-04 19:09:07

标签: javascript android limejs cocoonjs

作为将我的LimeJS游戏从PC转移到Android的前奏,我试图让Android CocoonJS Launcher与基本的LimeJS应用程序一起使用。我在这里做错了吗?

我有一些问题,有些问题可能只有TõnisTiigi知道,所以我也会问他:
已知LimeJS是否可以在CocoonJS Android Launcher上运行,或者LimeJS是否存在尚未针对此平台解决的问题?
如果有问题,是否计划或正在开发此平台的支持?如果没有,我将不得不考虑重写使用已知可与CocoonJS一起使用的游戏引擎。

我下载并安装了limejs-no-dom软件包并让它在我的Windows机器上运行。 我将基本的\ limejs-no-dom \ lime \ demos \ tests \ anim1和run_canvasonly.htm改编为我自己的测试项目。没有控制台错误,这很好。 我做了一个lime.py构建来创建一个我上传到远程服务器的测试。当我从浏览器访问它时,它没有控制台错误。 当我使用CocoonJS Launcher应用程序将我的Android手机连接到该网站时,我得到一个黑屏。有一个JavaScript例外: TypeError:无法在Object goog.style.installStyles

中读取未定义的属性parentNode
<!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 个答案:

答案 0 :(得分:1)

no-dom分支的主要部署目标是Ejecta。由于社区对CocoonJS表现出了兴趣并且它有99%的相似性,因此代码也使用CocoonJS启动器进行了测试。我从来没有尝试过比运行演示游戏更多的东西。很多其他人报告说他们已成功运行游戏。

有些边缘情况未完成(例如字体加载)。另外,我没有将它合并为master,因为我没有使用它的真实生产代码。所以我不相信我可以为该代码提供支持。目前所有代码都是公开的,但使用权归游戏作者所有。

我今天在启动器中再次运行了演示游戏(在iPhone而不是Android上)。现在修复了一个小的计时API问题(似乎没有相同的错误)https://github.com/digitalfruit/limejs/commit/5ad9eb67a但除此之外它们工作正常。

您发布的错误似乎是一个合法的错误,但我与您的代码示例无关。启动器需要在zip容器内编译游戏。如果您在制作容器时遇到问题,请查看Makefile中的示例。

另外,如果你有一个bug报告(带有一个测试用例),我宁愿你在Github而不是StackOverflow中打开一个问题。