更新於 2024/08/28閱讀時間約 3 分鐘

GameMaker|while迴圈|程式基礎

這篇內容,將會講解什麼是「while迴圈」,以及與「while迴圈」相關的知識。有了這些概念,各位會更容易理解,要如何設計程式碼。

本篇教學所使用的系統是Windows 10,如果有按鍵相關的說明,會用Windows的系統來解釋。如果你用的是Mac系統,再麻煩自行換成相對應的按鍵。


前置知識


在學習本篇內容之前,最好具備以下的前置知識,以免看不懂這篇教學的內容。


while迴圈的簡介


如果我們希望,讓某段程式碼,重複的執行,直到「達成某個條件才結束」,那我們就可以考慮使用「while迴圈」。

while迴圈的運作邏輯,跟for迴圈類似,不同的地方是,他不需要定義一個變數,來充當計時器。跳出迴圈的條件,也可以自行定義。

以下是兩段功能一樣的程式碼,一個使用for迴圈,一個使用while迴圈:

//讓a++的程式碼,重複執行10次​
a = 0 ;
for (var _i = 0 ; _i <= 9 ; _i ++) {
a ++ ;
}

//這是while迴圈的程式碼,功能跟上面那段一樣
a = 0 ;
var _i = 0 ;
while (_i <= 9) {
a ++ ;
_i ++ ;
}


while後面的括號裡,放置的是判別式,使用的口訣,跟我們在for迴圈提到的一樣:「true就執行」或「false就跳出」。

不過,通常我們不會用這種方式,來使用while迴圈,大多數的情境,都是用在「不知道要執行幾次」的迴圈上面。


while迴圈


以下的範例,是不使用計時器的while迴圈:

//如果"沒有"撞上obj_wall,就執行迴圈(有的相反是沒有)
//讓實體不斷往右0.5的距離,直到撞上obj_wall才停止(結束迴圈)
while (!place_meeting(id.x + 0.5 , id.y , obj_wall)) {
id.x += 0.5 ;
}


上面的這段範例,是while迴圈比較常見的用法,place_meeting()的函式,可以用來偵測實體之間,是否有產生碰撞。

如果沒有產生碰撞,那實體就移動,如果碰撞,那麼判別式會回傳false,接著while迴圈就會終止,不會再繼續執行。


在使用while迴圈時,最重要的一點,就是判別式的設定,如果設定不妥,那就可能變成「永久迴圈」,程式碼會一直卡在這裡循環,導致遊戲死機。


break / continue


在for迴圈的教學裡,我們已經有提到break和continue,用法基本上是一樣的,因此這裡只展示一段,break的使用範例:

//讓實體不斷往右0.5的距離,直到撞上obj_wall才停止(結束迴圈)
//將迴圈設定成永久執行
while (true) {
//如果撞上obj_wall,就終止迴圈
if (place_meeting(id.x + 0.5 , id.y , obj_wall)) {
break ;
}
id.x += 0.5 ;
}




🔔如果內容對你有幫助,可以按個喜歡,這樣就能讓更多人,接觸到這些棒棒的內容🔔


✨祝各位也能開心的做出好遊戲✨

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.