Actionscript 3 从瓷砖表面批量裁剪瓷砖的最佳方法是什么?

Actionscript 3 从瓷砖表面批量裁剪瓷砖的最佳方法是什么?,actionscript-3,actionscript,bitmap,crop,Actionscript 3,Actionscript,Bitmap,Crop,好的,我正在尝试创建一个程序,从csv文件中读取地图,然后使用tilesheet绘制每个瓷砖。在地图中读取效果很好,我可以根据读取的值绘制某些瓷砖,但只有在嵌入图像的情况下。显然,当涉及到超过20个不同的瓷砖时,这是不切实际的;将它们全部嵌入是不明智的 这是我从tilesheet绘制瓷砖的代码 package { import flash.display.Graphics; import flash.display.Sprite; import flash.display.Bitmap; i

好的,我正在尝试创建一个程序,从csv文件中读取地图,然后使用tilesheet绘制每个瓷砖。在地图中读取效果很好,我可以根据读取的值绘制某些瓷砖,但只有在嵌入图像的情况下。显然,当涉及到超过20个不同的瓷砖时,这是不切实际的;将它们全部嵌入是不明智的

这是我从tilesheet绘制瓷砖的代码

package  
{
import flash.display.Graphics;
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Point;

public class Tile extends Sprite
{
    [Embed(source="../bin/lib/TileSheet.png")]
    private var BitmapClass:Class;
    private var tileBitmap:Bitmap = new BitmapClass();
    var tileSize = 25;
    var tileSheetLength = 20;
    var sheetColumns:int = tileBitmap.bitmapData.width / tileSize;
    var pt:Point = new Point(0, 0);
    var bmp:Bitmap = new Bitmap(new BitmapData(tileSize, tileSize, true, 0));

        public function Tile(collide:Boolean, id:int) 
        {
            Draw(id);
        }
        private function Draw(id:int):void
        {
            var col:int = id % sheetColumns;
            var row:int = Math.floor(id / sheetColumns);
            var rect:Rectangle = new Rectangle(col * tileSize, row * tileSize, tileSize, tileSize);
            bmp.bitmapData.copyPixels (tileBitmap.bitmapData, rect, pt, null, null, true);
            this.addChild(bmp);
        }

        public function Update():void
        {

        }
}

}
'

因此,我需要的帮助是优化此代码,以便我可以运行1900次左右,而不是它现在可以处理的910-911次,然后才关闭,不会出现错误。如果有更好的方法,请让我知道,任何建设性的批评都将不胜感激

您有一个Tile类,它有一个
BitmapClass
实例。也许这应该是一个静态属性(属于类,而不是每个实例)。我的猜测是,每次你实例化一个你可能不想做的平铺时,你都在使用整个平铺表的内存

我注意到的另一件事是,您正在为每个磁贴创建一个新的位图数据,而实际上,您可能只需要磁贴数据(它的id/坐标),这样您就可以将像素复制到舞台上显示的最终位图数据中。也许您需要一个类来管理资源(嵌入式位图),另一个类来管理不同的平铺实例(该实例应包含渲染数据和对像素的引用,但不应存储实际数据)并复制到主缓冲区

另外,在图像上执行多像素操作时,最好使用BitmapData的lock()和unlock()函数来提高性能

看一看Lee Brimelow的Sprite Sheet教程(部分,尤其是)。它们很容易理解,也很有用

此外,它可能是值得一看的有一看GPU加速 图书馆

我以前使用过IsoHill,速度非常快,但最好先熟悉基本知识,否则这可能会显得有点过分


非常感谢您!我终于让它工作起来了,它也真的被优化了!