作者IDontBite (大便兔子)
看板Flash
标题[问题] do while的问题
时间Mon Mar 30 23:15:50 2009
下面这段程式, 我希望复制出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
1F:推 cjcat2266:失灵的意思是?另外,写while(f)就够了,因为f是布林值 03/30 23:28
2F:→ cjcat2266:写f==1反而会因转型而浪费"一点点"CPU资源 03/30 23:29
3F:→ cjcat2266: ↑几乎没有,但不必要 03/30 23:29
4F:→ IDontBite:就是当它random出来好几次都跟别人重叠, 会跑出回圈... 03/30 23:32
5F:推 cjcat2266:你用random,本来就有可能会重叠到吧 03/30 23:33
6F:推 icedesign:第二个for有没有少一个"{"啊?另外失灵的意思是啥?(无 03/30 23:33
7F:→ cjcat2266:噢,我懂你的意思了,我再看看 03/30 23:33
8F:→ icedesign:法昭唤大魔神吗?),觉得第二段用do...while,感觉有点 03/30 23:34
9F:→ icedesign:浪费的说。 03/30 23:34
10F:→ cjcat2266:你的do下一行要重新设定 f = false 03/30 23:34
11F:→ cjcat2266:否则f只要侦测到一次重叠,就永远是true了 03/30 23:34
12F:推 icedesign:@@~我记得do...while的do是一定会执行,不管while对错。 03/30 23:37
13F:→ IDontBite:cj大, 试过了还是一样@@ 刚刚测了一下f的值, 03/30 23:47
14F:→ IDontBite:发现f有时候重叠会显现false= =! 03/30 23:47
15F:→ IDontBite:ice 不好意思= ="排版有点乱, for我没有加{} 03/30 23:49
16F:推 cjcat2266:那搞不好是连else block都没有跑进去? 03/31 00:00
17F:→ IDontBite:应该有, i<=grannyno时f都是undefined, 之後f有值 03/31 00:32
18F:推 icedesign:你的f初值是多少?从0开始吗?这样当然会跑两遍啊! 03/31 00:38
19F:推 cjcat2266:ice,他用do..while是要移动物件,直到跟其他东西没重叠 03/31 13:31
20F:→ cjcat2266:虽然用这种方法,非常有可能连续很多次都还会重叠这样.. 03/31 13:32
21F:推 icedesign:我是看的出来xy一定会跟位移有关,只是他问的问题我实在 03/31 13:54
22F:→ icedesign:想清楚他所谓的[失灵],是指重叠还是指跑出回圈? 03/31 13:56
23F:推 cjcat2266:他的意思好像是明明hitTest()看起来会回传true 03/31 14:28
24F:→ cjcat2266:但是f却还是维持false值 03/31 14:28
25F:推 cjcat2266:原po乾脆把FLA原始档po上来好了 03/31 14:31
※ 编辑: IDontBite 来自: 118.161.191.181 (04/01 12:47)