看板 Flash 關於我們 聯絡資訊
: 推 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
p52189:是包個外框給它撞的意思? 12/04 07:33
p52189:如果這個剛好卡住物件形狀的外框沒有碰到 就不用檢查 是 12/04 07:41
p52189:這樣嗎@@? 12/04 07:41
cjcat2266:是的 12/04 07:54
hirabbitt:感謝 因為我之前有用過MovieClip(root)["物件名"].屬性 12/04 21:59
hirabbitt:就以為有名字的物件都可以用陣列型式表示... 12/04 22:00
cjcat2266:這個syntax叫做associative array,可以Google一下詳情 12/05 06:43