0

Android 向けのランゲームアプリの構築を開始しました。タイルと Adob​​e Air を使用してフラッシュで作成することにしました。ゲームは、プレーヤーが自動的に右側に走り、地面に沿ってジャンプまたはスライドしていくつかの障害物を回避する必要があるというものです。

配列の最初のレベルを常に取り、開始レベルとして使用する関数を作成しました。

private function createLevel()
    {
        map_level.levell();                                             

        level = map_level.level1;

        for(var t = 0; t < level.length; t++)
        {
            for(var u = 0; u < level[t].length; u++)
            {
                if(level[t][u] != 0)
                {                                   
                    var new_tile:platform_tile = new platform_tile;     

                    addChild(new_tile);         
                    new_tile.gotoAndStop(level[t][u]);
                    new_tile.x = u * 32;
                    new_tile.y = t * 32;

                    tiles.push(new_tile);                               
                }
            }
        }
        total_tile_width += u;
    }

次に、パスの配列でランダムなレベルを取る関数を作成します。

private function random_level ()

このレベルは、プレーヤーがトラックに沿って特定の長さに達したときに最初のトラックの最後に追加されます。その後、トラックはエンドレスに見え、カメラがプレーヤーを追跡するように作成されます。

private function update_level ()
    {
        random_level();

        for(var t = 0; t < mid_lvl.length; t++)
        {
            for(u = 0; u < mid_lvl[t].length; u++)
            {

                if(mid_lvl[t][u] != 0)
                {                                   
                    var new_tile:platform_tile = new platform_tile;     

                    level[t][u + total_tile_width] = mid_lvl[t][u];


                    addChild(new_tile);         
                    new_tile.gotoAndStop(mid_lvl[t][u]);
                    new_tile.x = (u + total_tile_width) * 32;
                    new_tile.y = t * 32;

                    tiles.push(new_tile);                               
                }
            }

        }
        // Indstiller hvis spilleren skal have en stigende fart
        if( movementspeed < 40)
        {
        movementspeed = movementspeed + 2;
        }
        else
            movementspeed = movementspeed;
        total_tile_width += u;
        trace ("speed: " + movementspeed);
    }

これはすべて正常に機能し、ゲーム機能もPCとして完璧ですが、すでにプレイされた古いレベルを削除する方法がわからないため、電話はすぐに過負荷になるようです。したがって、多くのレベルが存在します電話のメモリに。

removeChild("old tiles the left the stage again) のようなものが必要ですが、すべてのタイルだけでなく、その古いタイルのみを見つける方法がわかりませんでした。

誰でも私を助けることができますか?ところで、私は英語を書くのが得意ではないので、私の質問を理解していただければ幸いです。

モルテン

4

1 に答える 1

0

2 つの BitmapData オブジェクトを使用する必要があります。

  • 2は画面サイズです。それらを screenBuffer1 と screenBuffer2 と呼びます
  • もう 1 つは、少なくともタイルの幅だけ画面より大きくなっています。これを TerrainBuffer と呼びます

それで :

  1. スタート画面のすべての可視タイルを描画して、terrainBuffer を初期化します。
  2. screenBuffer1 の現在表示されている領域をコピーします
  3. screenBuffer1 にスプライトを描画する
  4. screenBuffer1 をステージにアタッチする

スクロールを開始します

  1. screenBuffer2 の現在表示されている領域を、スクロール量だけオフセットしてコピーします。
  2. screenBuffer2 にスプライトを描画する
  3. screenBuffer2 をステージにアタッチする

オフセットを増やし続け、screenBuffer1 と screenBuffer2 を交互に配置して、描画中に一方が表示されるようにします。

オフセットがタイルの幅に達する場合:

if(offset>tileWidth){
   offset-=tileWidth;
   // Move content of terrainBuffer to the left by tileWidth pixels
   // Draw a new column of tile on the right
}

その後、ループを続けます!

于 2012-09-19T16:48:32.713 に答える