gpt4 book ai didi

Flash/AIR AS3 : comparing contents of Screen. 屏幕

转载 作者:行者123 更新时间:2023-12-02 02:34:09 24 4
gpt4 key购买 nike

在理智的世界中,这按预期工作:

var array:Array = ['a','b','c'];
trace(array.indexOf(array[0])); // returns 0

在疯狂的世界中,会发生这种情况:

trace(Screen.screens.indexOf(Screen.screens[0])); // returns -1

...如果 Screen.screensScreen 可用实例的 Array,为什么该数组不能给出准确的indexOf 自己的 child 之一?

编辑 - 要更进一步,请查看:

for each(var i:Screen in Screen.screens){
for each(var j:Screen in Screen.getScreensForRectangle(this.stage.nativeWindow.bounds)){
trace(i, j, i == j); // returns false
trace(i.bounds, j.bounds, i.bounds == j.bounds); // returns false
}
}

Screen.screens 中列出的至少一个 Screen 应该与 Screen.getScreensForRectangle(this.stage .nativeWindow.bounds) - 但即使您比较 Screen.bounds,它仍然不匹配,尽管两个 Rectangle 对象具有相同的维度!

疯狂,女士们,先生们!您甚至不想看到我放在一起的解决方法(提示:它涉及比较 Screen.bounds.toString() 的值与 Screen.screens 的内容)

最佳答案

这是一个有根据的(?)猜测,但由于 Screen.screens 是只读的,并且修改它返回的数组没有效果,我认为这是一个相当安全的赌注,在内部,每次你称之为 Flash 生成并返回一个新的 Screen 对象数组(而不是保留一组内部 Screen 对象并让你访问它们)。当你打电话时:

Screen.screens.indexOf(Screen.screens[0])

您对 Screen.screens 进行了两次单独的访问,因此如果每次调用都返回不同的对象数组,很容易看出为什么找不到任何匹配项 - 因为 indexOf 方法测试 === 相等性,因此两个不同的 Screen 对象不会匹配,即使它们碰巧包含有关同一物理屏幕的信息。

解决方案是获取 screens 数组的副本并使用它。这很好用:

var scr:Array = Screen.screens;
trace( scr.indexOf(scr[0]) ); // returns 0

关于Flash/AIR AS3 : comparing contents of Screen. 屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2542287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com