訂製滑鼠游標 link

Ren’Py有兩套系統可實現訂製滑鼠游標。 一種是利用硬體滑鼠游標,另一種是在Ren’Py中繪製一個可視組件當作滑鼠游標。

硬體滑鼠游標有兩個優點:

  • 非常快。

  • 消耗低。使Ren’Py有更多時間執行其他工作。

同時也有兩個限制:

  • 游標只能是小尺寸。至少一個32×32像素的,常用的大尺寸也不過64×64像素.

  • 游標只能使用圖像文件序列。

使用Ren’Py繪製一個可視組件用作游標可是跳出這些限制。 游標可以是Ren’Py能繪製的任何東西。當計算機啟用圖像三重快取時,Ren’Py繪製游標可能會出現明顯的延遲,而硬體游標不會。

硬體滑鼠游標 link

硬體滑鼠游標由配置項 config.mouse 控制。 該配置項是一個字典型數據,將滑鼠名稱映射為一個序列幀列表。 每個序列幀都是一個三元元組,依次表示圖片檔案名、圖片內部的X和Y軸偏移量。

例如:

define config.mouse = { }
define config.mouse['default'] = [ ( "gui/arrow.png", 0, 0) ]
define config.mouse['spin' ] = [
    ( "gui/spin0.png", 7, 7 ),
    ( "gui/spin1.png", 7, 7 ),
    ( "gui/spin2.png", 7, 7 ),
    ( "gui/spin3.png", 7, 7 ),
    ( "gui/spin4.png", 7, 7 ),
    ( "gui/spin5.png", 7, 7 ),
    ( "gui/spin6.png", 7, 7 ),
    ( "gui/spin7.png", 7, 7 ),
]

若該項是多幀動畫,則固定以20fps幀率播放。Ren’Py會在圖片或偏移值變化後同步修改游標。

下表列舉了游標可能處於的各種狀態,以及相應使用場景:

狀態關鍵字

使用場景

default

所有場景的預設項。該項必須賦值,在沒有明確指定場景關鍵字時都將使用該項。

say

用戶處於“say”界面時使用該項。

with

轉場時使用該項。

menu

用戶處於菜單(例如分支選項菜單)時將使用該項。

prompt

提示用戶進行輸入時使用該項。

imagemap

在imagemap組件上使用。

button

用戶滑鼠懸停在某個button或imagebutton組件上時使用該項。

pause

暫停或調用renpy.pause()函數時,使用該項。

mainmenu

主選單。

gamemenu

遊戲菜單(gamemenu界面)。

每個狀態關鍵字都附帶一個可選的 pressed_ 前綴,表述滑鼠左鍵按下之後切換游標圖案。 例如,pressed_button 會在用戶點擊某個按鈕之後改變游標。 若要定義默認情況下按下滑鼠左鍵時的游標樣式,可以直接使用 pressed_default 關鍵字。 只要沒有其他 pressed_ 的狀態關鍵字,就都會應用該默認游標。

樣例:

define config.mouse = { }
define config.mouse['default'] = [ ( "gui/arrow.png", 0, 0) ]
define config.mouse['pressed_default'] = [ ( "gui/arrow_pressed.png", 0, 0) ]
define config.mouse['button'] = [ ( "gui/arrow_button.png", 0, 0) ]
define config.mouse['pressed_button'] = [ ( "gui/arrow_button_pressed.png", 0, 0) ]
define config.mouse['menu'] = [ ( "gui/arrow_menu.png", 0, 0) ] # 用戶處於菜單界面時,使用該游標
# 由於沒有“pressed_menu”游標,將使用預設的“pressed_default”游標

可視組件滑鼠游標 link

可視組件游標使用配置項 config.mouse_displayable 的值,以及MouseDisplayable類型的可視組件。 下面是一個樣例:

image mouse spin:
    "gui/spin0.png"
    rotate 0.0
    linear 1.0 rotate 360.0

    # 暫停,等待圖像預載入
    pause 1.0

    repeat

define config.mouse_displayable = MouseDisplayable(
    "gui/arrow.png", 0, 0).add("spin", "mouse spin", 9.9, 9.9)
class MouseDisplayable(cursor, x, y) link

用作替換滑鼠游標的可視組件。當用戶在螢幕內移動滑鼠時,該可視組件將跟隨滑鼠一起移動。

cursor

用作繪製游標的可視組件

x, y

熱區(hotspot)坐標,以滑鼠左上角的為原點,虛擬像質數。

add(self, name, cursor, x, y) link

該方法能添加一個游標,根據滑鼠狀態 name 顯示對應的游標。 該方法返回的是MouseDisplayable對象,因此可以連續調用添加多個不同狀態的游標。

(譯者註:MouseDisplayable(cursor, x, y).add(name1, cursor1, x1, y1).add(name2, cursor2, x2, y2).add(name3, cursor3, x3, y3)……)

使用滑鼠游標 link

使用滑鼠游標的通常方法是,對界面內某個可以獲得焦點的組件(按鈕或者條)使用 mouse 特性,指定游標名稱。 例如:

screen test():
    textbutton "滑鼠測試" actiuon NullAction() mouse "spin"

還可以使用 default_mouse 設置全局滑鼠游標:

$ default_mouse = "spin"