【发布时间】:2018-01-05 18:29:42
【问题描述】:
该项目是用 as3 编写的,使用 AIR 28.0 打包,并在 Android 7 设备上运行(在 windows 桌面环境下运行时运行良好)。
在我的 Android 7 (S7) 上,被 scrollRect 隐藏的对象仍在接收鼠标事件,但当我在桌面环境中运行相同的应用程序时却没有。
这是 Android 或 AIR 错误吗?还是我做错了什么?
例子:
EDIT: (Original code example was incomplete see edit below)
var button:Sprite = new Sprite();
button.graphics.beginFill(0x00FF11, 1);
button.graphics.drawRect(0, 0, 50, 50);
button.graphics.endFill();
addChild(button);
button.addEventListener(MouseEvent.CLICK, buttonClick);
var outer:Sprite = new Sprite();
var square:Sprite = new Sprite();
outer.cacheAsBitmap = true;
outer.addChild(square);
var rect:Rectangle = new Rectangle(0, 0, 50, 50);
outer.scrollRect = rect;
addChild(outer);
outer.y = 50;
square.graphics.lineStyle();
square.graphics.beginFill(0x000000, 1);
square.graphics.drawRect(0, 0, 100, 100);
square.graphics.endFill();
square.addEventListener(MouseEvent.MOUSE_DOWN, squareDown);
square.y = -50;
在本例中,在内部对象中绘制的矩形仅在 outer.scrollRect 内可见(因此是 50x50 而不是 100x100),并且按钮对象在其上方可见。当可见按钮上发生单击事件时,将触发 innerClick 事件,而不是 buttonClick 事件。
似乎内部容器的不可见部分,被应用的 scrollRect 隐藏,只是在视觉上隐藏并且仍然阻塞输入事件。
正在通过我的 IDE (Flash Builder) 编译和安装该应用程序。我尝试了不同版本的 IDE 和 AIR SDK,结果相同。
任何帮助将不胜感激。
编辑:
我发现了 scrollRect 工作正常的实例,因此进一步测试以缩小错误范围。
删除线:
outer.cacheAsBitmap = true;
... 解决了这个问题。将 cacheAsBitmap 应用于方形对象本身也仍然可以正常工作。
由于某种原因,将 cacheAsBitmap 应用于具有 scrollRect 的对象会导致此错误,但将 cacheAsBitmap 应用于更进一步的子对象可以正常工作。
我没有足够的经验来了解性能影响或为什么建议使用 scrollRect 将 cacheAsBitmap 添加到对象。也许其他人可以通知。
【问题讨论】:
-
如果它在实际 Android 设备上的工作方式不同(在仿真模式下检查,无法重现),那么它显然是一个错误。因此,现在您可以 a) 尝试矩形蒙版,然后 b) 忘记常规 Flash 内容,因为无论如何它在 Android 上运行速度太慢并切换到 Starling。
-
我的原始代码示例缺少关键行。道歉组织。但是,我能够缩小导致错误的原因并进行编辑以包含该信息。
标签: android actionscript-3 air scrollrect