2016-10-22 2 views
0

私はCordova Phaserゲームを開発しました。 AndroidとiOS端末で動作します。Cordovaを使用してフェイザーゲームで高いメモリ使用量を避けるには?

ゲームには7つのレベルがあり、各レベルにはいくつかのスプライト(背景、プレイヤー)とグループ(弾丸、敵)があります。レベルは、私がそうでstartlevel(2)とを呼び出す終了すると

preload機能では、私はすべての画像をロードしてatlasJSONHash

function preload(){ 
    game.load.atlasJSONHash('anim', 'anim.png', 'anim.json'); 
    //and so on 
} 

function create(){ 
    var star = game.add.sprite(160, 32, 'level1bg'); 
    star.x = 0; 
    star.y = 0; 
    star.height = game.height; 
    star.width = game.width; 

    bullets = game.add.group(); 
    bullets.enableBody = true; 
    bullets.physicsBodyType = Phaser.Physics.ARCADE; 

    bullets.createMultiple(30, 'bullet'); 
    bullets.setAll('anchor.x', 0.5); 
    bullets.setAll('anchor.y', 1); 
    bullets.setAll('outOfBoundsKill', true); 
    bullets.setAll('checkWorldBounds', true); 
    //and so on 
} 
function startlevel(level) 
{ 
    var star = game.add.sprite(160, 32, 'level1bg'); 
    star.x = 0; 
    star.y = 0; 
    star.height = game.height; 
    star.width = game.width; 

    bullets = game.add.group(); 
    bullets.enableBody = true; 
    bullets.physicsBodyType = Phaser.Physics.ARCADE; 

    bullets.createMultiple(30, 'bullet'); 
    bullets.setAll('anchor.x', 0.5); 
    bullets.setAll('anchor.y', 1); 
    bullets.setAll('outOfBoundsKill', true); 
    bullets.setAll('checkWorldBounds', true); 
    //and so on 
} 

ています。

ブラウザでは正常に動作しますが、モバイルメモリでは各レベルで倍増し、最終的にアプリがクラッシュします。このメモリの問題を回避するにはどうしたらいいですか?

答えて

1

私はこれが役に立ちそうです。新しいグループを割り当てる前に、古いグループが破壊されていることを確認するために、私はいつも破壊を呼び出してから新しいグループを割り当てます。 私はあなたの弾丸グループを初期化して再利用するための新しい関数を作成したいと思います。自分の位置が同じであるため、

function createBulletGroup(){ 

    if(bullets!=null) 
    { 
     bullets.destroy(true); 
     bullets = null; 
    } 
    //.. The rest of add group 
} 

もっと上を、あなたは

var star = game.add.sprite(160, 32, 'level1bg'); 

あなたはstartlevelたびに使用しているためには、新しいスターは、古い星の上に配置されます。星が作成されると、それは世界に割り当てられます。目で見ることができない多くの時間のメモリリークを再現します。

新しいレベルを開始したときに星をランダムに配置することもできます。他の人と重なっているかどうかを確認するか、アルファベットを0.5に設定してください。

関連する問題