Re: [問題] 想知道MC碰到哪個MC但不用LOOP?
: 推 cjcat2266:你的目的是要讓code乾淨點還是要增進效能? 12/03 02:01
: → hirabbitt:CODE乾淨點@@ 12/03 02:28
: → hirabbitt:應該是想讓我的腦袋乾淨點QQ 12/03 02:29
: for (var allMC in MovieClip(root)){
: //hit test
: }
: 裡面通通都是undefind耶
: 難道不能這樣用?
基本上,碰撞偵測絕對無法避免使用迴圈的,要先認清這個事實
因為要偵測碰撞,一定要某些程度上"檢查所有可能碰撞的物件"
如果純粹是要"視覺上"讓code乾淨點
目前大部分的編輯器都可以把大括弧內的code"折疊"起來
不然就是把迴圈的部分refactor成另外一個function
如果是要增進效能,可以搜尋關鍵字broad phase
基本上就是用比較有效率的方法,篩選掉"不可能碰撞"的物件
最簡單的就是使用Axis-Aligned Bounding Box (AABB)
如果兩個物件的AABB沒有碰撞,那他們就不可能碰撞
另外一個常見的簡易broad phase是sweep and prune
在X軸和Y軸上面維持每個物件的min和max座標清單排序
然後從小而大逐一檢視物件
for (i = 0 to length(sortedObjectsX))
{
for (j = i + 1 to length(sortedObjectsX))
{
if (sortedObjects[i].maxX < sortedObjects[j].minX) break;
else hitTest(sortedObjects[i], sortedObjects[j]);
}
}
//repeat for Y axis (and Z in 3D)
還有,for...in statement不是這樣用的
for...in可用在以下狀況
1. 逐一索取dynamic object的dynamic variable名稱字串
for (var s:String in myObject) trace(myObject[s]);
2. 逐一索取Dictionary物件的key
for (var key:* in dictionary) trace(dictionary[key]);
絕非你想像的那麼方便,可以索取所有MovieClip這樣
解決方法就是把你要索取的MC全部存到一個Array、list或Dictionary裡面
--
Blog http://blog.cjcat.net
Gallery http://cjcat2266.deviantart.com
ptt2 Board CJWorkshop
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 67.168.100.223
推
12/04 07:33, , 1F
12/04 07:33, 1F
推
12/04 07:41, , 2F
12/04 07:41, 2F
→
12/04 07:41, , 3F
12/04 07:41, 3F
→
12/04 07:54, , 4F
12/04 07:54, 4F
→
12/04 21:59, , 5F
12/04 21:59, 5F
→
12/04 22:00, , 6F
12/04 22:00, 6F
→
12/05 06:43, , 7F
12/05 06:43, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Flash 近期熱門文章
PTT數位生活區 即時熱門文章