Re: [問題] 想知道MC碰到哪個MC但不用LOOP?

看板Flash作者 (CJ Cat)時間13年前 (2011/12/04 06:43), 編輯推噓2(205)
留言7則, 3人參與, 最新討論串2/2 (看更多)
: 推 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
感謝 因為我之前有用過MovieClip(root)["物件名"].屬性
12/04 21:59, 5F

12/04 22:00, , 6F
就以為有名字的物件都可以用陣列型式表示...
12/04 22:00, 6F

12/05 06:43, , 7F
這個syntax叫做associative array,可以Google一下詳情
12/05 06:43, 7F
文章代碼(AID): #1EsgO0Nf (Flash)
文章代碼(AID): #1EsgO0Nf (Flash)