8-2 碰撞偵測
一、 hitTest方法
語法1:name1_mc.hitTest(name2_mc);
功能:偵測兩個影片片段實體是否重疊或相交。
說明:
1. name1_mc與name2_mc兩個影片片段實體的範圍框有相交,就會傳回true值。
語法2:name_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++; } |
解說:
行01∼03:m_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++); } |
解說:
行01:i由1開始計數。
行02∼08:m_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++); } |
解說:
行01:i由1開始計數。
行02∼08:m_mc(ㄇ形狀)影片片段實體由上往下大約每秒移動12點,即影格預設速率。
行03:判斷m_mc(ㄇ形狀)影片片段實體的ㄇ部分與(200,200)是否相交。
ㄇ形狀物體由上往下移動。ㄇ形狀物體有碰到小圓點(200,200),顯示"碰到了!" 。與範例3執行結果相同。
主場景影格1程式:
01 |
i=1 |
解說:
行01:i由1開始計數。
m_mc(ㄇ形狀)影片片段實體上程式
影格1程式:
01 02 03 04 05 |
if(this.hitTest(200,200,true)){ trace("碰到了!"); } this._y++; trace(_parent.i++); |
解說:
行05:i為主場景的變數。
影格2程式:
01 |
gotoAndPlay(1) |
解說:
行01:影格1與影格2構成迴圈不斷檢查m_mc(ㄇ形狀)影片片段實體與(200,200)點是否相交。