看板 Flash 關於我們 聯絡資訊
下面這段程式, 我希望複製出busno個bus, 前grannyno個把對應的"granny"+i蓋住, 已確定各個granny不會有重疊問題, 希望剩下沒有蓋東西的bus也不要重疊, 但是那個do while有時候會失靈, 囧 有人能幫我看看嗎? for(i=1;i<=busno;i++){ bus.duplicateMovieClip("bus"+i,layer--); _root["bus"+i].v=random(8)+1; if(i<=grannyno){ _root["bus"+i]._x=_root["granny"+i]._x; _root["bus"+i]._y=_root["granny"+i]._y+30;} else{ do{ _root["bus"+i]._x=random(5)*101+80; _root["bus"+i]._y=random(6)*60+48; for(j=1;j<i;j++) f=_root["bus"+i].hitTest(_root["bus"+j]); }while(f==1) } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.161.194.250
cjcat2266:失靈的意思是?另外,寫while(f)就夠了,因為f是布林值 03/30 23:28
cjcat2266:寫f==1反而會因轉型而浪費"一點點"CPU資源 03/30 23:29
cjcat2266: ↑幾乎沒有,但不必要 03/30 23:29
IDontBite:就是當它random出來好幾次都跟別人重疊, 會跑出迴圈... 03/30 23:32
cjcat2266:你用random,本來就有可能會重疊到吧 03/30 23:33
icedesign:第二個for有沒有少一個"{"啊?另外失靈的意思是啥?(無 03/30 23:33
cjcat2266:噢,我懂你的意思了,我再看看 03/30 23:33
icedesign:法昭喚大魔神嗎?),覺得第二段用do...while,感覺有點 03/30 23:34
icedesign:浪費的說。 03/30 23:34
cjcat2266:你的do下一行要重新設定 f = false 03/30 23:34
cjcat2266:否則f只要偵測到一次重疊,就永遠是true了 03/30 23:34
icedesign:@@~我記得do...while的do是一定會執行,不管while對錯。 03/30 23:37
IDontBite:cj大, 試過了還是一樣@@ 剛剛測了一下f的值, 03/30 23:47
IDontBite:發現f有時候重疊會顯現false= =! 03/30 23:47
IDontBite:ice 不好意思= ="排版有點亂, for我沒有加{} 03/30 23:49
cjcat2266:那搞不好是連else block都沒有跑進去? 03/31 00:00
IDontBite:應該有, i<=grannyno時f都是undefined, 之後f有值 03/31 00:32
icedesign:你的f初值是多少?從0開始嗎?這樣當然會跑兩遍啊! 03/31 00:38
cjcat2266:ice,他用do..while是要移動物件,直到跟其他東西沒重疊 03/31 13:31
cjcat2266:雖然用這種方法,非常有可能連續很多次都還會重疊這樣.. 03/31 13:32
icedesign:我是看的出來xy一定會跟位移有關,只是他問的問題我實在 03/31 13:54
icedesign:想清楚他所謂的[失靈],是指重疊還是指跑出迴圈? 03/31 13:56
cjcat2266:他的意思好像是明明hitTest()看起來會回傳true 03/31 14:28
cjcat2266:但是f卻還是維持false值 03/31 14:28
cjcat2266:原po乾脆把FLA原始檔po上來好了 03/31 14:31
※ 編輯: IDontBite 來自: 118.161.191.181 (04/01 12:47)