code.club

 找回密碼
 立即註冊
搜索
查看: 7689|回復: 0
打印 上一主題 下一主題

有關在 draw() 寫條件迴圈 do{}while()的問題

[複製鏈接]
跳轉到指定樓層
樓主
發表於 2017-1-7 16:34:47 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
這念也適用於 openframeworks裡的 draw()。
在 void draw()裡面寫條件式,包括 if(){},while(){},do{}while(),其中前面二個都可以順利執行,但 do{}while()卻問題,compiler似乎會不理睬後面while()中的條而一直執行do{}下去直到超出邊界。

事實上是,void draw()本身就類似是一個 do{}while()的函數,它執行裡面的程式之後會再重新執一次,一直下去,除非裡面的條件不符合。但像do{}while(),例如  do{ println(x);x++;}while(x<5),就算在某次執行時已經x==5了,但draw()再進去執行時,都像全新執行程式一般,就直接先去do{}裡的東西,雖然此時的while()已經不符合執行條件,但因為先執行了do{}所以後面的while就整個無效。而draw()會一直跳進來執行,每次都是先遇到 do{},此時後面的while()根本就無法發揮它的判斷功能。

如果用每頁frame的設定來看可以看出來,第一個frame出現時,x確實印到了4就停止了,此時x++已變成5。但下一個frame又開始執行時,do{}就直接先印出了5,然後雖然不再印下去因為x已經不小於5了而且已等於6,可是draw()又要執行一個新的frame,於是又去do{}印出了6,然後又跳出去執行新的frame,於是7,8,9....會一直印下去。

以上是請教過銘傳資傳系葉正聖老師之後學到的觀念。

回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

小黑屋|手機版|Archiver|code.club  

GMT+8, 2024-11-11 03:42 , Processed in 0.083929 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表