2011-12-19 112 views
0

我正在尝试制作基于瓦片的AS3游戏,该游戏使用PNG图像作为从库中加载它们的地图的基础,并将数据转换为阵列,并将每个像素的数据作为单独的图块。实质上,如果我的数组中有一个128x128像素的PNG像素,绿色像素被转换为“GRASS”,那么我可以在阵列中循环并相应地将贴图添加到地图动画片段。如何将PNG图像转换为数组?

我看过ByteArray类,我似乎无法将数据解码为可用格式。如果有人有解决方案来做到这一点,请让我知道。

+2

到目前为止您尝试过什么?它如何没有按预期工作?或者你期望社区为你做你的工作?请阅读[常见问题]查看我们喜欢回答的问题以及我们不知道的问题。 :)哦,并欢迎来到StackOverflow:D – 2011-12-19 05:49:07

+0

只是好奇,但这个问题启发了Notch做了什么? – 2011-12-19 06:35:00

+0

@PranavHosangadi:我尝试使用ByteArray类尝试输出一串字符,我可以手动将其转换为屏幕上的可见地图,但我找不到解码可正常工作的PNG的方法。 @ Adam:不,因为我会制作相当大的地图,所以视觉表现会是最容易创建和管理的。 – PROWNE 2011-12-19 23:23:23

回答

3

BitmapData类似乎是你在找什么。确保库中的图像具有自己的类名称,并且它的基类是位图(在属性中),然后创建图像的实例,并使用getPixel循环位图像素数据。

事情是这样的:

var image:Bitmap = new MyBMP(); 
var bmd:BitmapData = image.bitmapData; 

for(var y:int=0; y < bmd.height; ++y) 
{ 
    for(var x:int=0; x < bmd.width; ++x) 
    { 
     var pixelValue:uint = bmd.getPixel(x, y); 
     trace(pixelValue.toString(16)); 
     // Test if the pixelValue matches the colour you want. 
    }   
} 

刚一说明,确保使用getPixel32如果你使用alpha通道。

+0

令人惊叹!完美的作品,谢谢。 – PROWNE 2011-12-19 23:35:00