1

スコアといくつかのフラグを保存するための sqlite サポートを取り込もうとしています。データベースが存在する場合はそれを開き、データベースに基づいてゲームの値を初期化する必要があります。データベースが存在しない場合は、作成/初期化する必要があります。以下のコードはコンパイルされますが、不明な理由でクラッシュします。

    package mygame;

     <snip imports>

    import sys.db.Types;

    class ScoreDB extends sys.db.Object {
        public var id : SId;
        public var dbscore1 : SInt;
        public var dbsound  : SInt;
        public var dbscore2 : SInt;
    }

    class mygame extends Sprite {

            <snip var defines>

      public function new () {

             // start sqlite code
             sys.db.Manager.initialize();


     // db does exist
    //  then read values 
            //  currentScore = score1.dbscore1;
        //  doSound = score1.dbsound;
        //  doScore = score1.dbscore2;

    // db does not exist:

    var cnx = sys.db.Sqlite.open("mybase.db");
        sys.db.Manager.cnx = cnx;
    sys.db.TableCreate.create(ScoreDB.manager);

    var score1 = new ScoreDB();
        score1.id = 0;
    score1.dbscore1 = 0;
        score1.dbsound  = 0;
        score1.dbscore2 = 0;
    score1.insert();

            currentScore = 0;
        doSound = 0;
        doScore = 0;


        cnx.close();

        // end sqlite code

     super ();
     initialize ();
         construct ();
     newGame ();


 }
4

2 に答える 2

0

私が知る限り、openfl には sqlite 定義はありません。使用するものは、通常の cpp ターゲット定義です。問題は、Androidで動作しないことだと思います。さらに: API 定義は問題ないと確信していますが、間違った名前で dll をロードしようとします。これにより、エラーが発生することなくアプリが強制終了される可能性があります。実装を調べて (短くてわかりやすい)、dll 名を変更してみてください。

于 2014-05-21T14:19:24.733 に答える
0

私は実際に同じ問題を解決しました。

問題は、アプリが基本的に .zip ファイルであり、編集できないことです。アプリ ストレージ ディレクトリに DB を作成 (および後でアクセス) する必要があります。

ディレクトリにアクセスするには、次のコードを使用します。

private static var localStoragePath:String = openfl.utils.SystemPath.applicationStorageDirectory;

IDE が SystemPath クラスを表示しないという既知のバグがありますが、気にしないでください。問題なくコンパイルされます。後で、一般的なツールを使用して、ディレクトリの読み取りと書き込み、新しいフォルダーの作成などを行うことができます。

これが機能し、クラッシュしないことを確認するための簡単なテストを次に示します。

// creating a test folder
sys.FileSystem.createDirectory(openfl.utils.SystemPath.applicationStorageDirectory + "/testFolder");

var form:TextFormat = new TextFormat(null, 22, 0xFFFFFF);

// getting contents of the storage dir  
var arr = sys.FileSystem.readDirectory(openfl.utils.SystemPath.applicationStorageDirectory);

var tf:TextField = new TextField();
tf.defaultTextFormat = form;
tf.width = Lib.current.stage.stageWidth;
tf.height = Lib.current.stage.stageHeight;
tf.multiline = true;
tf.wordWrap = true;
tf.text = arr.toString();

addChild(tf);

ご覧のとおり、新しく作成されたフォルダーがそこにあります。フォルダーを作成する行を削除すると、安全であることがわかります。

XML ファイルに Android パーミッションを追加することを忘れないでください。

<android permission="android.permission.WRITE_EXTERNAL_STORAGE"/>
于 2014-05-13T12:49:34.983 に答える