加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么Flash使用蒙版对象的整个高度而不仅仅是可见区域?

发布时间:2020-12-15 07:28:49 所属栏目:百科 来源:网络整理
导读:问题是如果我设置Sprite对象的.mask属性,当我调用Sprite.height时,Sprite对象仍然返回它的全高.所以我认为克服这个问题的一个简单方法是覆盖属性getter. 现在..即使有效,如果我将这个蒙版的Sprite对象添加到另一个Sprite对象,新的Sprite对象将报告它的高度作
问题是如果我设置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,0x000000));

container.mask = mask;

container.addChild(content);

trace(container.height) // this should return 50 instead of 100

解决方法

所以对于那些感兴趣的人,我设法提出了一个解决方法.真正让我烦恼的是,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对此做了些什么.感谢以前发布过试图提供帮助的所有人,非常感谢,谢谢!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读