2014-12-11 5 views
0

몇 시간 동안이 문제를 조사해 왔지만 다소 비슷한 상황이 발견되었지만 아직 간단한 해결 방법을 찾지 못했습니다. 기본적으로 애니메이션이 재생되는 타임 라인이 있습니다. 결국 나는 메인 게임 스크린 (프레임 256)에 도착한다. stop(); 그러면 사용자는 3 개의 문 중 하나를 클릭합니다. 어떤 문을 클릭하면 사용자가 여러 프레임을 지나서 게임을하게됩니다. 게임이 끝나거나 사용자가 다시 클릭하면 사용자는 원래 프레임 (프레임 256)으로 돌아가며이 작업을 수행 할 때마다 내 "upDoor"가 null 참조이고 upDoor 버튼 (예 : upStairsDoor 버튼)이 더 이상 스테이지에 있지 않습니다.Flash CS3 null 프레임으로 돌아온 후 button/mc에 대한 참조입니다.

이것은 사용자가 먼저 선택한 문에 관계없이 발생하는 것으로 보입니다. 사용자가 upDoor를 선택하여 거기에있는 미니 게임을 선택하거나 outsideDoor를 선택하여 해당 미니 게임을 재생하면 사용자가이 프레임 (프레임 256)으로 돌아 오면이 오류가 문에 표시되고 오류가 발생하므로 당연히 문을 닫습니다. 그 시점에서 다른 것은 작동하지 않으며 게임을 종료해야합니다.

오타가 아닙니다. 내 인스턴스 이름을 확인하지 마십시오. 제가 언급했듯이, 문은 프레임에 처음 도착할 때 잘 작동합니다. 다시 돌아 가면됩니다. 가비지 수집기와 관련이 있다고 읽었지만 프레임으로 돌아 왔을 때 무대에 배치 한 모든 인스턴스를 다시 만들어서는 안됩니까? 무대로 드래그 한 다른 버튼이나 무비 클립에서는 오류가 발생하지 않으며이 특정 문 하나만 오류가 발생합니다.

upDoor 버튼을 참조하는 코드 줄에 오류가 발생했습니다. 여기 코드 줄 ... (프레임 256)이 사용자가 다음 활성화에 모든 문을 설정하는 기능을 실행하는 화면에 다른 개체를 클릭 할 때까지 문을 사용하지 않도록 설정입니다 무엇

if (downDoor.enabled) { 
    downDoor.enabled = false; 
} 
if (upDoor.enabled) { 
    upDoor.enabled = false; 
} 
if (outDoor.enabled) { 
    outDoor.enabled = false; 
} 

있습니다. 문제는 null 참조의 속성에 액세스 할 수 없다는 것입니다.

+1

'gotoAndStop()'또는 다른 프레임 변경을 수행하면 이전 프레임이 ** 폐기 **되고 모든 링크가 무효화되므로 해당 프레임으로 돌아 가면 최상의 수정 IMHO는 스크류 타임 라인 그대로입니다. 더 이상 'downDoor'가 없으며, 이전에 그 프레임에 있었을 때 접근 할 수있는 다른 객체도 없습니다. – Vesper

+1

타임 라인을 삭제할 수없는 경우 부모 MC의 속성을 사용합니다 (예 : if (downDoorEnabled) {downDoorEnabled = false; if (downDoor) downDoor.enabled = false; }'. 이러한 속성은 한 프레임 안에 포함되어 있지 않으므로 미리 계획을 세우십시오. 이러한 속성을 덮어 쓰면 SWF 논리가 손상 될 수 있습니다. 컴파일시에 구문을 검사하지 않으므로 속성을 읽는 동안 어딘가에서 오타를 만든 경우 그 결과가 "정의되지 않음"(또는 해당 속성이 아직 설정되지 않은 경우) 및 쓰기 잘못된 속성으로 변경하면 올바른 속성의 값이 변경되지 않습니다. – Vesper

+0

@ Richard-Chase이 코드 줄은 어디에 있습니까? 내부의 이벤트 처리기는 무엇입니까? –

답변

0

인풋 주셔서 감사합니다. 결국 나를위한 해결책은 결국 프레임을로드 할 때 모든 영화 클립과 버튼을 프로그래밍 방식으로 구현 한 다음 프레임을 전환 할 때이를 모두 제거하는 것이 었습니다. 이렇게하면 프레임이 gotoAndPlay에서 다시로드 될 때마다 모든 것이 다시 만들어집니다.