2012-01-19 6 views
0

사용자가 마우스로 화면에 도형을 그릴 수있는 프로그램을 만들고 있습니다. 완료되면 단추를 눌러 완료합니다. 사용자는 타임 라인에서이를 제어하기 위해 무대의 특정 영역에만 그림을 그릴 수 있습니다. 사용자가 끌어 올 수있는 모든 공간을 차지하는 무비 클립이 있습니다.타임 라인상의 MovieClip과 액션 스크립트에 그려진 것 사이의 충돌 감지

사용자가 버튼을 누르면 나는 프로그램이 사용자가 그린 모양이 moiveclip을 만지는 것을 확인하지 않기를 바랍니다.

//------------------------------DRAW SHAPE------------------------------ 
    private var shape:MovieClip = new MovieClip(); 

    public function startDraw(e:MouseEvent):void { 
     shape.graphics.moveTo(mouseX, mouseY); 
     shape.graphics.lineStyle(4, 0x000000, 0.8); 

     stage.addEventListener(MouseEvent.MOUSE_MOVE, beginDraw); 
    } 

    public function beginDraw(e:MouseEvent):void { 
     shape.graphics.lineTo(mouseX, mouseY); 
    } 

    public function stopDraw(e:MouseEvent):void { 
     stage.removeEventListener(MouseEvent.MOUSE_MOVE, beginDraw); 
    } 
//--------------------------CHECK FOR COLLISION--------------------------- 
    public function bclick(e:MouseEvent):void { 
     if(cd(mcOnTimeline, shape)){ 
      trace("HIT IT"); 
     }else{ 
      trace("DIDNT HIT"); 
     } 
    } 
    public function cd(mc1:MovieClip, mc2:MovieClip):Boolean{ 
     var mc1Bounds:Object = mc1.getBounds(mc1); 
     var mc2Bounds:Object = mc2.getBounds(mc1); 
     //return(mc1Bounds.intersects(mc2Bounds)); 

     var mc1BmpD = new BitmapData(mc1Bounds.width, mc1Bounds.height, true, 0); 
     var mc2BmpD = new BitmapData(mc2Bounds.width, mc2Bounds.height, true, 0); 
     //mc1BmpD.draw(mc1Bounds); 
     //mc2BmpD.draw(mc2Bounds); 
     //return(mc1BmpD.intersects(mc2BmpD)); 

     if(mc1BmpD.hitTest(new Point(mc1Bounds.x, mc1Bounds.y), 255, mc2BmpD, new Point(mc2Bounds.x, mc2Bounds.y),255)){ 
      return true; 
     } 
     else{ 
      return false; 
     } 

주석 처리 된 물건은 여러 가지가 tryed 필자입니다 : heres는 지금까지 무엇을 나는 내가 hitTestObject()

를 사용하지 못할 수 있도록 계정에있는 동영상 클립의 테두리를 복용하지 않고이 작업을 수행 할 수 이 작업을 수행하십시오.

답변

1

그리기 중에 테스트 할 것입니다. 사용자가 그림을 그릴 때 (마우스 버튼 아래로) 마우스 x, y가 영화 클립을 치는 지 테스트합니다. 그렇다면 그에 따라 플래그를 설정하십시오.

1

hitTest 모양의 복잡성에 따라 BitmapData.hitTest()를 사용하는 것이 더 효율적입니다. Mike Chamber's blog post on the subject을 확인하십시오.

+0

이 줄에이 문자를 사용합니다. 'mc1BmpD.hitTest' – taranpyper

+0

아, 네 ... 그렇습니다. BitmapDatas에 아무것도 그리지 않고 코드에 더 가까이 다가 가면 - 그 draw()를 주석 처리하고 'mcXBounds'Rectangle 대신 MC 자체를 전달해야합니다. 또한 당신은 이것을 두 번 말했습니다 :'getBounds (mc1); – case2000