我是一个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)];
//???
}
}
var bitmap:Bitmap = new Bitmap(bitmapData)
和context
是starling上下文:我可以使用什么对象(可显示为starling)来转储位图,并附加到context
作为静态图像按预期? (context.addChild(???)
)。谢谢,抱歉n00b问题。
答案 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 即可。我不知道这个问题的答案。我也没有通过谷歌找到答案。您可以随时尝试更改位图数据,看看会发生什么。