我正试图通过this demo by unitzeroone的PixelBender部分使用3D投影,即使没有炼金术像素绘图,它本身也很漂亮。问题是在Flash Player 11+中查看时无效。从Flash CS4或CS5发布时,SWF预览正常,但不是 CS5.5。当SWF在本地打开时,我们的设置似乎使用了FP10调试播放器,效果很好,但如果你将同一个SWF拖入安装了最新Flash Player(11+)的浏览器(chrome / FF),它会抛出以下错误在ByteArray.readFloat():
Error #2030: End of file was encountered.
...在ByteArray.readFLoat()中抛出......第一次被调用。在我完成ByteArray.writeFloats循环之后,我知道ByteArray在那时充满了数据。再次 - 这段代码在FP10上完美运行,但在FP11上失败了。我已经尝试捕获错误,它会按照您的预期跟踪错误,但我仍然坚持如何使这个ByteArray代码在Flash Player 11中运行。
我尽可能地搜索了这个,发现了许多对#2030错误和ByteArrays的引用,但似乎没有一个在FP10和FP11之间如此清楚地区分。 Here's the SWF
有什么想法吗?对于仅存在于FP11中的ByteArrays的write()或read()函数是否存在问题?有解决方法吗?
谢谢!
- 案例
答案 0 :(得分:2)
我明白了,虽然我不完全明白问题是什么。 Flash播放器11似乎要求我在运行ShaderJob后立即将PixelBender输出ByteArray上的位置重置为0。
var job:ShaderJob = new ShaderJob(shader, MyByteArray, 1024, 1);
job.start(true);
MyByteArray.position = 0
FP10不需要这个 - 我猜它是在ShaderJob之后自动重置位置?它必须归结为2个Flash播放器版本中PixelBender的略微不同的实现?