我是一个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)];
//???
}
}
- 我如何有效地将纹理转储到(32* I, 32*j)坐标(位图坐标)的位图中。
- 假设我有
var bitmap:Bitmap = new Bitmap(bitmapData)
和context
是椋鸟上下文:我可以用什么对象(是一个可显示的椋鸟)来转储位图,并按预期附加到context
作为静态图像?(context.addChild(???)
). - 是安全的改变,以后,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,看看会发生什么