javascript - LimeJS 在 CocoonJS Android 启动器上失败

标签 javascript android limejs cocoonjs

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

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

我下载并安装了 limejs-no-dom 包,并让它在我的 Windows 机器上运行。 我将基本的\limejs-no-dom\lime\demos\tests\anim1 和 run_canvasonly.htm 改编为我自己的测试项目。这工作正常,没有控制台错误。 我做了一个 lime.py build 来创建一个测试,并将其上传到我的远程服务器。当我从浏览器访问它时,它工作正常,没有控制台错误。 当我使用 CocoonJS Launcher 应用程序将我的 Android 手机连接到该站点时,出现黑屏。有一个 JavaScript 异常: 类型错误:无法读取对象 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);

最佳答案

no-dom 分支的主要部署目标是 Ejecta。由于社区对 CocoonJS 表现出兴趣并且相似度达到 99%,因此还使用 CocoonJS 启动器对代码进行了测试。除了运行演示游戏之外,我从未尝试过更多。许多其他人报告说他们已经成功运行了他们的游戏。

还有一些边缘情况未完成(例如字体加载)。另外,我没有将它合并到 master 中,因为我没有真正的生产代码使用它。所以我不确定我能否为该代码提供支持。目前所有代码都是公开的,但使用由游戏作者负责。

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

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

此外,如果您有错误报告(带有测试用例),我希望您在 Github 而不是 StackOverflow 中打开问题。

关于javascript - LimeJS 在 CocoonJS Android 启动器上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22180770/

相关文章:

javascript - DateTimePicker 值与显示日期不一致

javascript - 尝试将获取的 json 数据映射到 React 应用程序时,"State"未定义

java - 为什么我收到“属性值必须是常量”错误?

android - PhoneGap 是我的正确选择吗?

html - 如何在完全离线的工作空间中设置 LimeJS

javascript - Google Sheets 应用程序脚本 HTML 页面隐藏关闭 (X) 按钮

javascript - 命令键的 jQuery 键码

javascript - LimeJS 自定义 Sprite 吞咽事件

java - OnGenericMotionListener 似乎不起作用

javascript - goog.provide() - 未捕获的语法错误 : Unexpected token ILLEGAL