2014-01-23 3 views
0

프로젝트에서 세 가지를 성취하려고 노력했습니다. 나는 이것에 초보자이고 이것을 얻기 위해 지침서에 의존했다. 여기에 우리가 간다 !! a. label_3 및 label_4 중 하나 또는 targetlabel_3 및 targetlabel_4에 놓을 수 있지만 다른 레이블 및 대상에는 영향을주지 않을 수 있기를 바랍니다. b. 라벨이 떨어지면 label_1을 맨 위에 놓을 수 있기를 원합니다. label_1을 삭제하면 targetlabel_2가 숨겨지고 label_2에서 대상을 찾을 수 없습니다. c. _1, _2, _3, _4 및 _5 레이블 각각의 알파를 해당 대상에 떨어 뜨리고 레이블 _11, _21, _31, _41 및 _51에 대한 Apha를 100으로 변경하면 0으로 변경하고 싶습니다. 누군가가 내가하려고하는 것을 더 쉽게 볼 수 있도록하기 위해 Apha를 25 개로 설정하십시오.)액션 스크립트 3 여러 끌어서 놓기 끌어서 놓기 개체 및 스택 대상에 대한 alpa 변경합니다.

나는 이것에 대해 며칠 동안 주위를 mocking하고 벽돌 벽에 충돌했습니다. 아무도 도와 줄 수 있습니까?

import flash.display.DisplayObject; 
    import flash.geom.Rectangle; 

    /* Drag and Drop 
    Makes the specified symbol instance moveable with drag and drop. 
    */ 

    var startX:Number; 
    var startY:Number; 
    var counter = 0; 
    var attempts = 0; 
    var rect:Rectangle; 

    rect=new Rectangle(100,100,700,500); 

    correct_txt.text=counter; 
    attempts_txt.text=attempts; 

    label_1.addEventListener(MouseEvent.MOUSE_DOWN,Drag); 
    label_1.addEventListener(MouseEvent.MOUSE_UP,Drop); 
    label_2.addEventListener(MouseEvent.MOUSE_DOWN,Drag); 
    label_2.addEventListener(MouseEvent.MOUSE_UP,Drop); 
    label_3.addEventListener(MouseEvent.MOUSE_DOWN,Drag); 
    label_3.addEventListener(MouseEvent.MOUSE_UP,Drop); 
    label_4.addEventListener(MouseEvent.MOUSE_DOWN,Drag); 
    label_4.addEventListener(MouseEvent.MOUSE_UP,Drop); 
    label_5.addEventListener(MouseEvent.MOUSE_DOWN,Drag); 
    label_5.addEventListener(MouseEvent.MOUSE_UP,Drop); 

label_1.buttonMode = true; 
label_2.buttonMode = true; 
label_3.buttonMode = true; 
label_4.buttonMode = true; 
label_5.buttonMode = true; 

    function Drag(event:MouseEvent):void 

    { 
event.target.startDrag(true,rect); 
feedback_txt.text=""; 
event.target.parent.addChild(event.target); 
startX=event.target.x; 
startY=event.target.y; 
    } 

    function Drop(event:MouseEvent):void 
    { 
event.target.stopDrag(); 
var myTargetName:String="target" + event.target.name; 
var myTarget:DisplayObject=getChildByName(myTargetName); 
if (event.target.dropTarget!=null&&event.target.dropTarget.parent==myTarget){ 
    feedback_txt.text="Well done! You have selcted the correct label and placed it in the recommended position on the package."; 
    feedback_txt.textColor = 0xCC0000 
    event.target.removeEventListener(MouseEvent.MOUSE_UP,Drop); 
    event.target.removeEventListener(MouseEvent.MOUSE_DOWN,Drag); 
    event.target.buttonMode = false; 
    event.target.x=myTarget.x; 
    event.target.y=myTarget.y; 
    counter++; 
    correct_txt.text=counter; 
    correct_txt.textColor = 0x0000ff 
    attempts++; 
    attempts_txt.text=attempts; 
    attempts_txt.textColor = 0x0000ff 


}else{ 
feedback_txt.text="Your attempt is not quite correct. You have either selected the incorrect label or placed it in the wrong position. Please try again."; 
event.target.x = startX; 
event.target.y = startY; 
attempts++; 
attempts_txt.text = attempts; 
} 
if (counter==5){ 
    feedback_txt.text="Well done! You have correctly placed all 5 labels"; 

percentage_txt.text ="Based on your attempts, you have scored "+Math.round ((counter/attempts) *100)+" %"; 
percentage_txt.textColor = 0x0000ff  
    } 


    } 

답변

0

레이블 다른 레이블에있을 때 감지하는 가장 쉬운 방법은 프레임을 입력 이벤트 리스너에 그러나 hitTest 사용하는 것입니다.

stage.addEventListener(Event.ENTER_FRAME, hit_test); 
function hit_test(e:Event):void{ 

    if (label_1.hitTestObject(targetLabel_1)) { 
    trace("Label_1 is hitting targetlabel_1"); 
    label_hit(); 
    } 

    if (label_2.hitTestObject(targetLabel_2)) { 
    trace("Label_2 is hitting targetlabel_2"); 
    label_hit(); 

    } 
} 

hittest가 활성화되면 추적 텍스트가 표시되고 해당 함수가 호출됩니다. 레이블의 알파를 변경하려면 hittest에서 호출하는 함수를 사용하십시오. 예를 들어 :

function label_hit() 
{ 
    label_1.alpha = 0; 
    label_2.alpha = 0; 
    label_3.alpha = 0; 
} 

당신이 일이, 드래그 볼, 또는 테스트 명중 할 수있는 경우에 조건을하려고하는 경우, 그 기능은 당신이 그들을 돌볼 수있는 곳이기도합니다. 예를 들어 히트 테스트까지 레이블을 표시하지 않으려면 함수가 100으로 설정하기 전까지 알파를 0으로 설정해야합니다. 그때까지 레이블을 드래그 할 수 없게하려면 이전의 함수 대신에 함수 내부의 리스너.

function label_hit() 
{ 
    label_1.alpha = 100; 
    label_1.addEventListener(MouseEvent.MOUSE_DOWN,Drag); 
    label_1.addEventListener(MouseEvent.MOUSE_UP,Drop); 
} 

당신이 hittests이 다른 hittests 이미 발생한 후에 만 ​​발생하는 조건에 배치하고 기능에 충족 조건을 갖고 싶어

.

stage.addEventListener(Event.ENTER_FRAME, hit_test); 
function hit_test(e:Event):void{ 

    if (label_1.hitTestObject(targetLabel_1)) { 
    trace("Label_1 is hitting targetlabel_1"); 
    label_hit(); 
    } 

    if(condition) 
    { 
    if (label_2.hitTestObject(targetLabel_2)) { 
     trace("Label_2 is hitting targetlabel_2"); 
     label_hit(); 

    } 
} 

function label_hit() 
{ 
    var condition = true; 
}