有點(diǎn)不明白
balls[cnt++] =balls[j];
舉個(gè)例子,每秒循環(huán)20次,當(dāng)?shù)?5次的時(shí)候開始有不符合條件的小球出現(xiàn),此時(shí)數(shù)組的情況是:
那balls[cnt]儲(chǔ)存的部分是后面深藍(lán)的嗎?
cnt計(jì)數(shù)應(yīng)該是從0開始的,可是后面深藍(lán)的部分是從21開始的啊
push()和pop()都是對(duì)最后面的處理,這個(gè)不是去除不掉前面淺藍(lán)的部分嗎?
2014-09-04
根據(jù)你的示意圖,第一次運(yùn)行balls[cnt++] =balls[j]的時(shí)候,就是:
balls[0] = balls[20],之后cnt++,cnt為1;
第二次的時(shí)候?yàn)?balls[1] = balls[21],,之后cnt++,cnt為2;
第三次的時(shí)候?yàn)?balls[2] = balls[22],,之后cnt++,cnt為3;
...
以此類推,
最后一次運(yùn)行的時(shí)候,是:balls[179] = balls[199],,之后cnt++,cnt為180;
之后j=200 循環(huán)結(jié)束。此時(shí),balls[0]-balls[179]為180個(gè)在屏幕內(nèi)的小球。balls[180]-balls[199]的數(shù)據(jù)沒有用了。
這樣的算法,在結(jié)果不規(guī)整的時(shí)候極為有用,比如 balls[3]-balls[21];balls[25]-balls[77];balls[80]-balls[128];balls[156]-balls[177]都顯示在屏內(nèi)時(shí),你可以試著想想這個(gè)算法的操作結(jié)果。
最后的處理就是把尾巴部分balls[180]以后的小球給刪除掉了。
對(duì)于這個(gè)算法,確實(shí)配一個(gè)動(dòng)畫現(xiàn)實(shí)更直觀。謝謝你的提問,