在遊戲主循環或事件處理中,開發者常需根據觸摸事件類型(如 TOUCH_DOWN、TOUCH_UP)執行不同邏輯。原代碼使用 if (event.type != TOUCH_UP) continue; 過濾事件,導致後續邏輯僅處理 TOUCH_UP,難以擴展處理其他事件類型。
for (int i = 0; i < len; i++) {
TouchEvent event = touchEvents.get(i);
if (event.type != TouchEvent.TOUCH_UP) continue;
// 僅處理 TOUCH_UP 邏輯
world.doodle.DOODLE_Y = 3;
// ... 其他邏輯
}
continue 會跳過本次循環剩餘代碼,直接進入下一次迭代。continue 過濾方式不夠靈活。TOUCH_DOWN 事件被直接跳過,無法處理按下邏輯。for (int i = 0; i < len; i++) {
TouchEvent event = touchEvents.get(i);
switch (event.type) {
case TouchEvent.TOUCH_DOWN:
// 處理按下邏輯
handleTouchDown(event);
break;
case TouchEvent.TOUCH_UP:
// 處理抬起邏輯
handleTouchUp(event);
break;
case TouchEvent.TOUCH_DRAGGED:
// 處理拖拽邏輯
handleTouchDragged(event);
break;
default:
// 忽略未知事件類型
continue;
}
}
優點:結構清晰、易擴展、每種事件類型對應獨立處理邏輯。
for (TouchEvent event : touchEvents) {
if (event.type == TouchEvent.TOUCH_DOWN) {
handleTouchDown(event);
} else if (event.type == TouchEvent.TOUCH_UP) {
handleTouchUp(event);
}
// 其他類型直接忽略,無需 continue
}
適用於事件類型較少、邏輯簡單的場景。
若處理完某關鍵事件(如暫停遊戲)後無需繼續處理後續事件:
for (TouchEvent event : touchEvents) {
if (event.type == TouchEvent.TOUCH_UP) {
if (OverlapTester.pointInRectangle(pauseBounds, touchPoint)) {
Assets.clicks();
state = GAME_PAUSED;
break; // 直接跳出循環,不再處理其他事件
}
}
}
| 關鍵字 | 作用 | 適用場景 |
|---|---|---|
continue | 跳過本次迭代剩餘代碼,進入下一次循環 | 過濾不需處理的數據項 |
break | 立即結束整個循環 | 找到目標、發生錯誤、觸發關鍵狀態變更 |
return | 結束整個方法 | 在方法中處理完核心邏輯後直接退出 |
switch 或 if-else 明確分派事件類型,避免濫用 continue 導致邏輯隱蔽。handleTouchDown()),提高可讀性與可測試性。總結:針對不同觸摸事件類型,應使用 switch-case 或多條件 if-else 進行顯式分派,而非依賴單一 continue 過濾。break 應保留用於提前結束整個循環的關鍵節點。