1

私の LimeJS ゲームを PC から Android に移行するための前置きとして、基本的な LimeJS アプリケーションで Android CocoonJS Launcher を動作させようとしています。ここで何か間違ったことをしていますか?

Tõnis Tiigi だけが知っているかもしれないいくつかの質問があるので、彼にも尋ねます:
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: Cannot read property parentNode of undefined at Object 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);
4

1 に答える 1

1

no-dom ブランチの主要なデプロイ ターゲットは Ejecta でした。コミュニティは CocoonJS に関心を示し、99% 類似していたため、コードは CocoonJS ランチャーでもテストされました。デモゲームを実行する以外に試したことはありません。他の多くの人々が、ゲームの実行に成功したと報告しています。

終了していない特殊なケースがいくつかあります (フォントの読み込みなど)。また、これを使用する実際の製品コードがないため、マスターにマージしていません。そのため、そのコードをサポートできる自信がありません。現時点ではすべてのコードは公開されていますが、使用はゲーム作成者の責任です。

今日もランチャーでデモ ゲームを実行しました (Android ではなく iPhone で)。現在修正されている小さなタイミング API の問題がありました (同じエラーではないようです) https://github.com/digitalfruit/limejs/commit/5ad9eb67aが、それ以外は正常に機能しました。

あなたが投稿したエラーは正当なバグのようですが、私はあなたのコード サンプルとは何の関係もありません。ランチャーには、zip コンテナー内にコンパイルされたゲームが必要です。コンテナの作成に問題がある場合は、Makefile のサンプルを見てください。

また、バグ レポート (テストケース付き) がある場合は、StackOverflow ではなく Github で問題を開いた方がよいでしょう。

于 2014-03-04T21:12:04.507 に答える