我正在构建一个 spritesheet 类。希望这对某人来说是容易实现的目标,但我很难过。
我有一个 spritesheet (.png),我在运行时加载了它,并使用构造函数方法的 Spritesheet 类 .as 文件 ouside 中的代码将其一部分放置在舞台上:
private function onLoad(e:Event):void
{
var loaderBmp:Bitmap = Bitmap(_loader.content);
_bmpData.copyPixels(loaderBmp.bitmapData, new Rectangle(0,0,80,80),new Point(0,0));
}
效果很好。我的 .png 文件切片显示得很好。就我而言,精灵表用于为角色设置动画,因此我需要更新
BitmapData
但我没有任何运气。这是我在 Main
类中尝试的一个函数,我用它来根据角色的状态改变动画的帧:
c._thisSpriteSheet._loader.content.bitmapData.copyPixels(loaderBmp.bitmapData, new Rectangle(0,20,50,30),new Point(0,0));
loaderBmp
是一个变量,其值为 var loaderBmp: Bitmap = Bitmap(_spriteSheet._loader.content);
c
是对作为角色的 Runner
对象的引用。
_spriteSheet
是 Runner
类型的 Spritesheet
类的属性。
_loader
是 c._spriteSheet
的属性,并且是实例化 spritesheet 时使用的 Loader
对象。
它不会抛出错误,但也不会用新的 bitmapData 对象替换原始的 bitmapData 对象。我想这可能意味着我需要创建一个新的 BitmapData 对象并在
copyPixels
方法中使用它,但返回相同的结果(什么也没有)。当我在调试模式下单步执行代码时,一切看起来都正常,但我的显示对象没有使用新的位图数据进行更新。我被什么绊倒了?
我做错的是我试图通过最初加载它的
BitmapData
来访问 Loader
对象。然后我突然意识到,我可以通过我创建的 SpriteSheet 类的属性直接引用 BitmapData。我认为这对其他人来说会很混乱。如果版主看到这个并认为它是垃圾,我不介意它被删除,但我想无论如何我都会保留它。新代码如下所示:
c._thisSpriteSheet._bmpDSheet.copyPixels(loaderBmp.bitmapData, new Rectangle(0,20,50,30),new Point(0,0));
和
_bmpDSheet
是类的bitmapdata属性。