2012-03-12 3 views
0

AS3을 사용하여 사용자 지정 contextMenu를 만들고이를 스테이지에 적용 할 수 있습니다. 스테이지에 배치 한 모든 무비 클립은 스테이지에서 contextMenu를 상속받지 않습니다. 즉, 기본 contextMenu를 표시합니다.AS3 사용자 지정 컨텍스트 하위 메뉴

내 응용 프로그램의 모든 하위 사용자에게 contextMenu를 적용하려면 어떻게해야합니까?

[편집]

이 내 main.as 파일이 무엇인지의 단순화 된 버전입니다 :

var my_menu:ContextMenu = new ContextMenu(); 
my_menu.hideBuiltInItems(); 

var my_copyright = new ContextMenuItem("Copyright - 2012"); 
my_copyright.enabled = false; 
my_copyright.separatorBefore = true; 

my_menu.customItems.push(my_copyright); 

stage.contextMenu = my_menu; 

내가 무대에서 마우스 오른쪽 단추로 클릭하면

다음 본인이 저작권을 얻을. 스테이지에 무비 클립을 추가 한 다음 마우스 오른쪽 버튼을 클릭하면 기본 컨텍스트 메뉴가 나타납니다.

[편집]

나는이 문제를 발견하고 고쳤다. stage.addChildAt (mc, 0);을 사용하여 배경 이미지를 추가하고있었습니다. 어떤 이유로 문맥 메뉴가 제거됩니다. 자식을 1로 설정하면 모든 문제를 해결하고 contextMenu를 상속받습니다.

하기 전에 : http://richard.parnaby-king.co.uk/examples/stackoverflow/stackoverflow.swf

후 : http://richard.parnaby-king.co.uk/examples/stackoverflow/stackoverflow-after.swf

나는 현상금의 목적을 변경하고 -이 일이 왜 누군가가 설명 할 수있다!?

+0

컨텍스트 메뉴 코드를 공유 할 수 있습니까? –

+0

@theButler 샘플 코드를 추가했습니다. –

+0

스테이지에 contextMenu를 어떻게 추가하고 있습니까? "오류 # 2071 : Stage 클래스가이 속성 또는 메서드를 구현하지 않습니다." 그러려고 할 때. 또한 main.he 문서 클래스입니까? –

답변

1

좋아, 그럼 약간의 테스트 후 이것이 내가 무엇을 가지고 있습니다. 플래시가 이벤트를 마우스 오른쪽 버튼으로 누르지 않아서 추측 일 뿐이므로 확실한 결정이라고 말할 수는 없습니다.보조 노트에

, 당신은 그것을 허용하지 않습니다, 무대에 컨텍스트 메뉴를 추가 할 수 없습니다, 그래서 가장 낮은 항목은 당신이 그것을 추가 할 수있는 문서 클래스

당신입니다 못했습니다 DisplayObject를 클릭하면 해당 객체에 대한 ContextMenu를 찾습니다. 그것은 하나를 찾지 못하면 하나를 찾고있는 객체에 대한 계층 구조 위로 계속 진행할 것이고 하나를 찾으면 멈출 것입니다. 이런 식으로 뭔가 : 당신이 바로 child 클릭하면이 parent 보이는 있도록이 예에서

stage 
    - document (has context menu1) 
     - parent (has context menu2) 
      - child 
     - parent2 

는, 어떤 메뉴가 없습니다. 여기에 context menu2이 있으므로 보여줍니다. 그러나 parent2을 마우스 오른쪽 버튼으로 클릭하면 메뉴가 없으므로 document으로 보입니다. 여기에서 context menu1을 찾습니다.

스테이지의 다른 곳 (예 : 그래픽이없는 어딘가)에서 마우스 오른쪽 버튼을 클릭하면 해킹이 다소 진행된 것 같습니다. 이 경우 무대는 ContextMenu (또는 적어도 하나는 설정할 수 없음)을 가질 수 없으므로 하위 0의 컨텍스트 메뉴 (일반적으로 문서 클래스)를 사용하기로 결정한 것 같습니다.

stage 
    - bg 
    - document (has context menu1) 
     - parent (has context menu2) 
      - child 
     - parent2 

나는 당신이 당신의 컨텍스트를 추가하는 있으리라 믿고있어 : 당신이 깊이 0에서 배경 이미지를 추가

, 당신은 당신의 계층 구조가 지금과 같이 보입니다 깊이 1. 문서 클래스를 해주했다 메뉴에서 문서 클래스 (이 예제에서는 context menu1)로 이동하십시오. 따라서 문서 클래스에 그래픽이 없으면 이벤트는 스테이지까지 검색하고 컨텍스트 메뉴를 찾지 않은 다음 하위 0 - 컨텍스트 메뉴를 찾으려고 시도합니다 이 케이스가없는 bg입니다.

문서 클래스의 graphics 개체에 그림을 그려 (또는 중첩 요소 중 하나를 클릭하여)이를 테스트 할 수 있습니다. 그래픽을 마우스 오른쪽 버튼으로 클릭하면 bg이 깊이 0에 있더라도 사용자 정의 메뉴가 표시됩니다. 또는 bg에 또 다른 메뉴를 추가하여 의미를 확인할 수 있습니다.

0

은 변화하려고 stage.contextMenu = my_menu;에 정말 당신이 무대 & 순서에 추가 할 다른 것과 주관적인 당신의 이유에 contextMenu = my_menu;

+0

제안 해 주셔서 감사합니다. 그러나 작동하지 않습니다. –

+0

필자가 지정한 방식으로, 내 문서 클래스의 공용 함수에 컨텍스트 메뉴 코드를 넣은 다음 타임 라인의 첫 번째 프레임에서이 함수를 호출합니다. 이것이 중요한지는 모르겠지만 타임 라인 코드를 항상 별도의 레이어에 넣고 맨 위에있는 레이어로 만듭니다. 이것은 당신이 시도했던 것과 많이 다르진 않지만, 때로는 플래시가 그렇게 이상 할 수 있습니다. –

1

대답.

I 동일한 관련된 adobe live docs에서 2 점을 인용 할 수 :


0의 인덱스 이 DisplayObjectContainer 객체에 대한 디스플레이리스트의 뒤쪽 (아래쪽)을 나타낸다.

당신이 현재 점유 된 인덱스 위치를 지정하면


는 해당 위치에있는 자식 객체 및 모든 상위 위치는 자식 목록에서 하나 개 위치를 이동합니다. 제대로 모든 것을 무대에 추가 분석 할 경우


난 당신 자신이 답을 얻을 수 있습니다, 생각합니다.

관련 문제