2012-01-19 5 views
0

私はユーザーがマウスで画面上に図形を描くことを可能にするプログラムを作っています。完了したらボタンを押して終了します。ユーザーはステージの特定の領域を描画し、タイムライン上でこれを制御することができます。ユーザーが描くことができないすべての領域を占めるムービークリップがあります。タイムライン上のムービークリップと、アクションスクリプトに描画されたムービークリップとの衝突検出

ユーザーがボタンを押すと私は、ユーザーが描いた形が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; 
     } 

コメントアウトものは異なるものがにしようと試みたアイブです: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'の四角形の代わりにMC自体を渡す必要があります。また、あなたはこれを2回言った: 'getBounds(mc1);'あなたがするつもりはないかもしれない? – case2000

関連する問題