在星城生成随机的平铺图案



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

。假设我有一个TextureAtlas,其中包含如下图像:

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

实际上,纹理在图集中被命名为random0000到random0015。为了解决这个问题,我使用了十六进制表示法,这样我就可以像下面这样说明问题:

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

234aab9c
346700bf
634bca9e
e349ba23

在这个例子中是一个8x4块的位图。

假设我有这样一个循环:

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是椋鸟上下文:我可以用什么对象(是一个可显示的椋鸟)来转储位图,并按预期附加到context作为静态图像?( context.addChild(???)).
  3. 是安全的改变,以后,bitmapData和看到在这样的对象的实时变化?

谢谢,很抱歉刚才的问题。

1。你不能将纹理转换为BitmapData。然而,你可以只使用BitmapData对象,它最初是用来创建纹理的。对于原始的位图,您可以使用BitmapData.copyPixels()方法将平铺位图转储为单个位图。你需要使用bitmapdata而不是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 。我不知道这个问题的答案。我也没有在谷歌上找到答案。你可以试着改变bitmapdata,看看会发生什么

最新更新