0

我开始为 Android 构建一个跑步游戏应用程序。我选择使用瓷砖和 Adob​​e Air 在 Flash 中制作它。游戏是一个玩家应该自动向右跑,并通过跳跃或沿着地面滑动来避开一些障碍物。

我制作了一个函数,它始终采用数组中的第一层并用作起始层。

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
  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 回答