首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flash/AIR AS3: Screen.screens含量比较

Flash/AIR AS3: Screen.screens含量比较
EN

Stack Overflow用户
提问于 2010-03-30 01:24:56
回答 1查看 405关注 0票数 3

在一个理智的世界里,这如预期的那样起作用:

代码语言:javascript
复制
var array:Array = ['a','b','c'];
trace(array.indexOf(array[0])); // returns 0

在一个疯狂的世界里,这种情况会发生:

代码语言:javascript
复制
trace(Screen.screens.indexOf(Screen.screens[0])); // returns -1

..。如果Screen.screens是一个可用Screen实例的Array,为什么这个数组不能给出一个精确的indexOf --它自己的一个子程序?

编辑--为了更进一步,请查看以下内容:

代码语言:javascript
复制
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.screens应该与Screen.getScreensForRectangle(this.stage.nativeWindow.bounds)中的Screen相同--但是即使您比较了Screen.bounds,它仍然不匹配,尽管两个Rectangle对象具有相同的维度!

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-30 03:30:44

这是一个受过教育的(?)猜测,但由于Screen.screens是只读的,而且修改它返回的数组没有任何效果,我认为,在内部,每次调用它时都会生成和返回一个新的Screen对象数组(而不是保留一组内部的Screen对象并允许您访问它们),这是一个相当安全的选择。当你打电话:

代码语言:javascript
复制
Screen.screens.indexOf(Screen.screens[0])

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

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

代码语言:javascript
复制
var scr:Array = Screen.screens;
trace( scr.indexOf(scr[0]) ); // returns 0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2542287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档