在Starling中生成随机平铺模式

时间:2014-06-01 06:56:32

标签: actionscript-3 bitmap starling-framework

我是一个n00b @ ActionScript3 / Starling(两者),想要创建一个(可显示的)对象,其内容基于来自指定模式的随机抽样。

E.g。假设我有一个TextureAtlas图像像:

+----+----+----+----+
|  0 |  1 |  2 |  3 |
+----+----+----+----+
|  4 |  5 |  6 |  7 |
+----+----+----+----+
|  8 |  9 |  A |  B |
+----+----+----+----+
|  C |  D |  E |  F |
+----+----+----+----+

实际上,纹理在地图册中被命名为random0000到random0015。为了问题,我使用了十六进制表示法,所以我可以用以下方式说明问题:

我想从该模式动态创建一个随机位图,并将其包含在starling显示上下文中。随机位图可以是:

234aab9c
346700bf
634bca9e
e349ba23

在此示例中为8x4 tile的位图。

假设我有一个循环:

var bitmapData:BitmapData = new BitmapData(32 * nwidth, 32 * nheight);
var textures:Vector.<Texture> = myAtlas.getTextures("random"); //random0000 ...
for(var i:uint = 0; i < nwidth; i++) {
    for(var j:uint 0 0; j < nheight; j++) {
        var texture:Texture = textures[Math.round(Math.random() * 16)];
        //???
    }
}
  1. 如何在(32 * i,32 * j)坐标(位图坐标)处有效地将纹理转储到位图中。
  2. 假设我有var bitmap:Bitmap = new Bitmap(bitmapData)context是starling上下文:我可以使用什么对象(可显示为starling)来转储位图,并附加到context作为静态图像按预期? (context.addChild(???))。
  3. 以后可以安全地更改bitmapData并在这样的对象中实时查看更改吗?
  4. 谢谢,抱歉n00b问题。

1 个答案:

答案 0 :(得分:1)

1 。您无法将纹理转换为BitmapData。但是,您可以使用首先用于创建纹理的BitmapData对象。使用原始位图,您可以使用BitmapData.copyPixels()方法将平铺位图转储到单个位图中。您需要使用BitmapDatas而不是Textures。像这样:

var bitmapData:BitmapData = new BitmapData(32 * nwidth, 32 * nheight);
var textureBitmaps:Vector.<BitmapData> = helperClass.getBitmaps("random");
for(var i:uint = 0; i < nwidth; i++) {
    for(var j:uint = 0; j < nheight; j++) {
        var textureBM:BitmapData = textureBitmaps[Math.floor(Math.random() * textureBitmaps.length)];
        bitmapData.copyPixels(textureBM, new Rectangle(0, 0, 32, 32), new Point(32*i, 32*j));
    }
}

您可以在之后将最终的bitmapdata转换为纹理。

<强> 2 即可。您可以尝试从位图创建纹理,然后在Starling的Image类中使用该纹理。这可能有用,但我不是百分百肯定。

第3 即可。我不知道这个问题的答案。我也没有通过谷歌找到答案。您可以随时尝试更改位图数据,看看会发生什么。