2010-03-30 4 views
3

의 내용을 비교, 이것은 예상대로 작동 : 미친 세상에서플래시/AIR의 AS3 : 제정신이 세상에서 Screen.screens 사용

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 자체 자식 중 하나를 제공 할 수 없습니까?

편집 -가 한 단계 더 걸릴하려면이 체크 아웃 : Screen.screens에 나와

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 
} 
} 

하나 이상의 ScreenScreenScreen.getScreensForRectangle(this.stage.nativeWindow.bounds)에서 동일해야합니다 -하지만 심지어 당신이 Screen.bounds을 비교하면, 동일한 치수를 가진 두 개의 Rectangle 오브젝트에도 불구하고 여전히 일치하지 않습니다!

신사 숙녀 여러분! (?)

+0

"화면, 화면, 화면 도트 스크린 도트 스크린"알고 있습니다. 그러나 나는 진정한 본보기를주고 싶었다. –

답변

2

이 추측이다 : (가 Screen.screens의 내용에 대한 Screen.bounds.toString()의 값을 비교 포함 힌트), 그러나 Screen.screens 때문에 읽기 전용, 그리고 당신은 내가 함께 넣어 해결 방법을보고 싶지 않아 반환하는 배열을 수정해도 아무런 효과가 없습니다. 내부적으로 플래시를 호출 할 때마다 Screen 객체의 새 배열을 생성하고 반환합니다 (내부 배열을 Screen 개로 유지하고 해당 객체에 액세스 할 수 있음).). 전화 할 때 :

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

을 당신은 Screen.screens에 두 개의 별도의 접근을, 그래서 그 통화의 각 객체의 다른 배열을 반환하는 경우, 그것은 당신이 어떤 일치를 찾을 수없는 이유를 쉽게 - indexOf 방법 때문에 === 동등성을 테스트하기 때문에 두 개의 서로 다른 Screen 개체는 동일한 물리적 화면에 대한 정보가 포함되어 있어도 일치하지 않습니다.

해결 방법은 화면 배열 복사본을 잡고 사용하는 것입니다. 이 작동합니다.

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

Nice - 나는 네가 완전히 옳다고 확신한다. 저것은 어떤 종류의 표준 관례를 따르는가, 나는 생각해 본다? 읽기 전용 배열 부분은 의미가 있기 때문에 화면이 변경 될 때마다 장면의 뒤에서 업데이트 된 배열이 될 것으로 기대합니다. 요청 될 때마다 배열을 다시 작성하는 대신 ... 어쨌든, 고마워, 그게 내가 원하는거야. –

+0

일반적으로 오브젝트를 평등하게 테스트 할 때주의해야 할 사항이 있습니다 ... API가 이전 오브젝트 또는 새 오브젝트와 동일한 오브젝트에 대한 참조를 제공하는지 여부는 궁극적으로 항상 가장 안전한 API 구현의 세부 사항입니다 의존하지 말라. 결국, 같은 대상에 대한 두 개의 참조가 있는지 여부는 신경 쓰지 않고, 동일한 물리적 화면을 참조하는지 여부는 신경 쓰지 않습니다.이 경우에는 일종의 결정하기가 어렵지만, 그러나 의미 적으로 당신은 내가 의미하는 것을 본다. ;) – fenomas

+0

그러나 귀하의 질문에 대답하기 위해, 일반적으로 그냥 정보 재산의 덩어리입니다 화면과 같은 뭔가가 일회용 개체가 될 가능성이 높습니다. 매우 복잡한 NativeWindow 객체를 제공하는 NativeApplication.openedWindows와 같은 것이 영구 객체에 대한 참조를 제공 할 가능성이 더 큽니다.그리고 빠른 시험 후에, 그것은 그것이하는 것처럼 보인다. 그러나 그것을 피할 수 있다면 그것을 의지하지 않는 것이 좋습니다. 물론 .. – fenomas