在使用as3和flash制作的游戏中移除旧牌

时间:2012-09-19 13:17:34

标签: actionscript-3 flash air

我开始为Android构建一个运行游戏应用程序。我选择使用瓷砖和Adobe 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);
    }

所有这一切都可以正常工作,游戏功能也很完美,但电话似乎很快就超载它,因为我无法弄清楚如何移除已经播放的旧关卡,因此会有手机内存中有很多级别。

我需要像removeChild这样的东西(“旧瓷砖再次离开舞台)但是没有想法如何只找到旧的瓷砖而不仅仅是所有瓷砖。

有人能帮助我吗?顺便说一句,希望你理解我的问题,因为我不是最好写英文的。

的Morten

1 个答案:

答案 0 :(得分:0)

您必须使用2个BitmapData对象。

  • 2是屏幕的大小。我们称它们为screenBuffer1和screenBuffer2
  • 另一个比屏幕大至少一块瓷砖的宽度。我们称之为terrainBuffer

然后:

  1. 通过绘制开始屏幕的所有可见切片来初始化terrainBuffer
  2. 复制screenBuffer1上当前可见的区域
  3. 在screenBuffer1上绘制精灵
  4. 将screenBuffer1附加到舞台
  5. 现在我们开始滚动

    1. 复制screenBuffer2上当前可见的区域,偏移滚动量
    2. 在screenBuffer2上绘制精灵
    3. 将screenBuffer2附加到舞台
    4. 继续增加偏移并交替使用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
      }
      

      然后继续循环!