GoSnackbar — 會自己找位置的訊息
待在畫面底部(或頂部),在安全區域與鍵盤之上,時間到了自己離開。沒有它,每一個得說一句 「已儲存」的畫面,都要自己寫視窗層、擺放位置、計時器與善後。
snack.show_text("已儲存", GoTheme.SUCCESS)
# 給一次復原的機會 — 0 是第一顆按鈕,-1 表示逾時消失
if await snack.post({"text": "已丟棄道具", "actions": ["復原"]}) == 0:
restore_item()
訊息會排隊,而不是互相覆蓋;同一句話重複出現則會合併 — 一秒失敗四次的伺服器, 不會再堆出四分鐘的警告。沒有按鈕的訊息條讓輸入穿過去,底下的遊戲照常跑。
它不是拿來問問題的地方。它會自己消失,所以玩家可能根本沒看到。
無法復原的確認請交給
GoDialogs。這裡的按鈕必須是可有可無的 — 復原、
詳細、重試。
GoNotice 是這一對的另一半:它從不接收輸入或焦點,位置由持有它的畫面決定。
它放不了按鈕,這個可以。
GoSpinner — 看不到盡頭的等待
會跟伺服器說話的遊戲,對這一頁的東西裡最需要的就是它:一個定住不動的畫面, 看起來就像當掉了。一次呼叫,就把你按下的那顆按鈕原地變成轉圈。
GoSpinner.busy(buy_button, true)
var ok := await server.purchase(item)
GoSpinner.busy(buy_button, false)
按鈕維持原本的大小 — 文字是變透明,而不是拿掉,所以那一列不會跳動 — 而且轉圈期間它是停用的。
後面這一點才是重點:await 的時候,購買絕不能被觸發兩次。開了
reduce_motion 就不轉了,改成三個點在呼吸。
量得出進度的是 GoBar。轉圈對什麼時候結束不做任何承諾。
GoBadge — 未讀圓點、「新」標籤、99+
GoBadge.attach(mail_button, unread_count) # 為 0 時自己隱藏
GoBadge.attach(shop_button, 0, "新")
GoBadge.attach(friend_button, 3, "", true) # 一個圓點 — 「那裡有東西」
它用錨點掛在宿主的右上角,所以宿主的大小就算之後才決定,它也跟得上;對同一個宿主掛第二次, 回傳的是同一個徽章。數量會改變玩家行動時用數字,只需要說「那裡有東西」時用圓點。
文字顏色是照外觀替徽章塗上的底色去挑對比出來的 — 從不假設是白色 — 而且它帶有無障礙名稱, 因為一個有顏色的圓點,對螢幕閱讀器什麼也沒說。