8-2 碰撞偵測

一、 hitTest方法

語法1name1_mc.hitTest(name2_mc);

功能:偵測兩個影片片段實體是否重疊或相交。

說明:

1. name1_mcname2_mc兩個影片片段實體的範圍框有相交,就會傳回true值。

語法2name_mc.hitTest(x, y[,shapeFlag]);

功能:偵測影片片段實體是否與點(x, y)相交。

說明:

1. x, y﹔為舞台上的x座標與y座標。

2. shapeFlag:布林值,預設為false

    true:影片片段實體的形狀與(x, y)有相交,會傳回true

    false:影片片段實體的範圍框與(x, y)有相交,會傳回false

     

                 實心圓為形狀, 虛線矩形為範圍框。

 

二、 onEnterFrame處理常式

語法:

name_mc.onEnterFrame=function(){

     statement(s);

}

功能:SWF檔的影格速率重複使用。

 


     ㄇ形狀物體由上往下移動。

 

 

 

 

 

 

 

 


主場景影格1程式:

01

02

03

onEnterFrame = function() {

   m_mc._y++;

}

解說:

0103m_mc(ㄇ形狀)影片片段由上往下大約每秒移動12點,即影格預設速率(fps=12)

 

 


ㄇ形狀物體由上往下移動。圓球進入ㄇ形狀物體範圍框,顯示"碰到了!"

 

 

 

 

 

 

 

 

 


下面畫面要再Flash環境下執行,才會在【輸出】面板顯示結果。

 

 

 

 

 

 

 

 

 


主場景影格1程式:

01

02

03

04

05

06

07

08

i=1;

onEnterFrame = function() {

if(m_mc.hitTest(circle_mc)){

trace("碰到了!");

}

m_mc._y++;

trace(i++);

}

解說:

01i1開始計數。

0208m_mc(ㄇ形狀)影片片段實體由上往下大約每秒移動12點,即影格預設速率。

03:判斷m_mc(ㄇ形狀)影片片段與circle_mc(圓球)影片片段是否相碰,只要兩個影片片段實體範圍框相交即算碰到。

 

 


ㄇ形狀物體由上往下移動。ㄇ形狀物體有碰到小圓點(200,200),顯示"碰到了!"

 

 

 

 

 

 

 


【輸出】面板顯示結果

 

 

 

 

 

 

 

 

 


主場景影格1程式:

01

02

03

04

05

06

07

08

i=1;

onEnterFrame = function() {

if(m_mc.hitTest(200,200,true)){

trace("碰到了!");

}

m_mc._y++;

trace(i++);

}

解說:

01i1開始計數。

0208m_mc(ㄇ形狀)影片片段實體由上往下大約每秒移動12點,即影格預設速率。

03:判斷m_mc(ㄇ形狀)影片片段實體的ㄇ部分與(200,200)是否相交。

 


ㄇ形狀物體由上往下移動。ㄇ形狀物體有碰到小圓點(200,200),顯示"碰到了!" 。與範例3執行結果相同。

主場景影格1程式:

01

i=1

解說:

01i1開始計數。

 

m_mc(ㄇ形狀)影片片段實體上程式

影格1程式:

01

02

03

04

05

if(this.hitTest(200,200,true)){

trace("碰到了!");

}

this._y++;

trace(_parent.i++);

解說:

05i為主場景的變數。

影格2程式:

01

gotoAndPlay(1)

解說:

01:影格1與影格2構成迴圈不斷檢查m_mc(ㄇ形狀)影片片段實體與(200,200)點是否相交。