为了测试我在AS3中使用传统显示层次结构编写的一些图像加载代码,我会确保像素颜色是正确的值。
现在我已经开始将代码移植到Starling,我注意到Texture
没有简单的方法来获取像素值。这很不幸,因为这意味着我不得不投入很多好的测试。
我有可能做到这一点吗?比如,我可以以某种方式将Texture
转换为BitmapData
吗?或者你们有任何其他建议如何测试,以确保我已正确加载图像?
答案 0 :(得分: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上下文中显示的每个对象呈现给result
BitmapData。然后,我们从精灵所在位置的BitmapData中获取一个像素。
这并不完美 - 它不考虑旋转,比例等等。它也不考虑sprite
是否没有最高深度。但是它有助于测试,如果您需要截取应用/游戏当前状态的屏幕截图,它也可能派上用场。