在一个理智的世界中,这可以按预期工作:
var array:Array = ['a','b','c'];
trace(array.indexOf(array[0])); // returns 0
在疯狂的世界中,会发生这种情况:
trace(Screen.screens.indexOf(Screen.screens[0])); // returns -1
...如果Screen.screens
是Array
的可用实例的Screen
,为什么该数组不能给出自己的孩子准确的indexOf
个?
修改要更进一步,请查看以下内容:
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
中列出的至少一个Screen.screens
应与Screen
中的Screen.getScreensForRectangle(this.stage.nativeWindow.bounds)
相同 - 但即使您比较Screen.bounds
,它仍然不会尽管两个Rectangle
对象具有相同的尺寸,但仍然不匹配!
Screen.bounds.toString()
的内容Screen.screens
的值}
答案 0 :(得分:2)
这是一个受过教育的(?)猜测,但由于Screen.screens
是只读的,并且修改它返回的数组没有效果,我认为这是一个相当安全的赌注,在内部,每次调用它时Flash生成并返回一个新的Screen
个对象数组(而不是保留一组内部的Screen
个对象,并允许您访问它们)。当你打电话:
Screen.screens.indexOf(Screen.screens[0])
你对Screen.screens
进行了两次单独的访问,所以如果每个调用都返回一个不同的对象数组,很容易看出为什么你找不到任何匹配 - 因为indexOf
方法测试===相等,因此两个不同的Screen
对象将不匹配,即使它们碰巧包含有关同一物理屏幕的信息。
解决方案是获取屏幕数组的副本并使用它。这很好用:
var scr:Array = Screen.screens;
trace( scr.indexOf(scr[0]) ); // returns 0