1

为了测试我在 AS3 中使用传统显示层次结构编写的一些图像加载代码,我会确保像素颜色是正确的值。

现在我已经开始将该代码移植到 Starling,我注意到Textures 没有简单的方法来获取像素值。这是不幸的,因为这意味着我不得不折腾很多好的测试。

有什么可能的方法可以做到这一点吗?就像,我可以TextureBitmapData某种方式转换 a 吗?或者你们对如何测试以确保我已正确加载图像有任何其他建议吗?

4

1 回答 1

2

事实上,这在有限的情况下是可能的(但我需要的那些!)。以下代码是 Haxe,但希望任何来自 AS3 背景的人都能够以最小的难度翻译它。

public function getPixel(x:Int, y:Int, sprite: Starling.display.Sprite) : UInt {
    var sw: Int = stage.stageWidth;
    var sh: Int = stage.stageHeight;

    var support:RenderSupport = new RenderSupport();
    RenderSupport.clear(flash.Lib.current.stage.color, 1.0);
    support.setOrthographicProjection(0, 0, sw, sh);
    Fathom.starling.stage.render(support, 1.0);
    support.finishQuadBatch();

    var result:BitmapData = new BitmapData(sw, sh, true);
    Starling.context.drawToBitmapData(result);

    return result.getPixel(Std.int(sprite.x) + x, Std.int(sprite.y) + y);
}

这段代码所做的是将在 3D 上下文中显示的每个对象渲染到resultBitmapData。然后,我们在精灵所在的位置从该 BitmapData 中获取一个像素。

这并不完美——它不考虑旋转、缩放等。它也不考虑是否sprite没有最高深度。但是它对测试很有帮助,如果您需要截取应用程序/游戏的当前状态,它也可能会派上用场。

于 2013-01-01T02:49:05.217 回答