【问题标题】:Generate random tiled pattern in Starling在 Starling 中生成随机平铺图案
【发布时间】:2014-06-01 06:56:32
【问题描述】:

我是 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 作为starling 上下文:我可以使用什么对象(作为starling 可显示对象)来转储位图,并按预期作为静态图像附加到context? (context.addChild(???))。
  3. 以后可以安全地更改 bitmapData 并实时查看此类对象的更改吗?

谢谢,对于 n00b 的问题,我们深表歉意。

【问题讨论】:

    标签: actionscript-3 bitmap starling-framework


    【解决方案1】:

    1。您不能将纹理转换为位图数据。但是,您可以只使用最初用于创建纹理的 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));
        }
    }
    

    之后您可以将最终的位图数据转换为纹理。

    2。您可以尝试从位图创建纹理,然后在 Starling 的 Image 类中使用该纹理。这可能会奏效,尽管我不能 100% 确定。

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

    【讨论】:

    • 谢谢:D。现在就试试。
    • 在挖掘源代码之后(无法测试它,因为我刚刚在挖掘)我认为如果我保留对传递给 Texture.fromBitmapData 中纹理的 bitmapData 的引用,任何更改bitmapData 将被反映 - bitmapData 在此处的闭包中直接引用:github.com/Gamua/Starling-Framework/blob/master/starling/src/…(和第 258 行)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2018-04-21
    • 2021-12-07
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多