xLi*_*ite 6 flash mask actionscript-3
问题是如果我设置Sprite对象的.mask属性,当我调用Sprite.height时,Sprite对象仍然返回它的全高.所以我认为克服这个问题的一个简单方法是覆盖属性getter.
现在..即使有效,如果我将这个蒙版的Sprite对象添加到另一个Sprite对象,新的Sprite对象将报告它的高度作为被屏蔽的Sprite对象的高度,即使我已重写属性以仅返回可见区域的高度由于面具.因此,Flash似乎忽略了这样一个事实,即并非所有内容都可见,但仍会自动增加新的Sprite对象的高度,就像掩盖的Sprite上没有掩码一样.
所以我想知道是否有一个解决方法,所以我可以将这个蒙版对象添加到任何其他DisplayObject,因为知道它将仅调整为屏蔽对象中可见的内容.
谢谢你的帮助.
编辑
这是一个代码示例..
var content:Bitmap = new Bitmap(new BitmapData(50, 100, false, 0x000000));
var container:Sprite = new Sprite();
var mask:Bitmap = new Bitmap(new BitmapData(50, 50, false, 0x000000));
container.mask = mask;
container.addChild(content);
trace(container.height) // this should return 50 instead of 100
Run Code Online (Sandbox Code Playgroud)
因此,对于那些感兴趣的人,我设法想出了一个解决方法。真正让我恼火的是DisplayObject.scrollRect不会立即更新尺寸,因此在 Adobe 下马修复它之前,您需要执行以下操作。
正如我所提到的, .scrollRect的问题是,直到一帧过去或经过一定时间后,它才会调整到新的宽度和高度。不管怎样,我基本上已经构建了我的类,以便一旦设置了.scrollRect,我就会创建一个每毫秒运行一次的计时器,检查.width和.height是否已更新为新值。一旦完成,我会调度一个自定义的READY事件,在将类添加到舞台之前,父对象会侦听该事件。
现在,关于属性的这个混蛋,您需要了解的一件非常重要的事情是,您正在设置.scrollRect属性的对象必须先添加到舞台上,然后才能尝试将其宽度和高度值更新为中设置的值.scrollRect属性。因此,为了尽可能干净地做到这一点,我将Stage对象从我的主类传递到我想要调整其.scrollRect的对象,我们将其称为MyClass。MyClass将其.visible属性设置为 false,然后将其自身添加到舞台中。只有完成此操作后,我现在才能开始 1ms 计时器来检查在设置.scrollRect后尺寸是否已正确更改。
因此,一旦计时器滴答处理函数看到尺寸已成功更改,MyClass现在可以将MyClass.READY事件分派到主类,同时将其.visible属性设置为 true 并将其自身从舞台中删除。当主类的事件侦听器被触发时,它现在可以将MyClass添加到它想要的任何位置,并知道它将具有MyClass.scrollRect中设置的正确尺寸。
这对我自己以及许多其他正在寻找解决方案的开发人员来说都是一个巨大的痛苦,所以我希望这对您有所帮助,并且在 Adobe 对此采取行动之前就足够了。感谢之前发帖的各位热心帮助的人,真的很感激,谢谢!
| 归档时间: |
|
| 查看次数: |
2564 次 |
| 最近记录: |