魔劍工舖

關於部落格
RPG製作大師XP腳本為主要更新

RPG製作大師VX腳本為其次更新

RPG製作大師VX_Ace目前不考慮

RPG製作大師MV腳本完全沒打算

留言完建議重新整理看看是否顯示

目前不處理本舖外腳本的相關問題

其他相關事項請觀看規定注意事項

本舖未來的經營計畫與VA的支援




var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-37462754-1']);
_gaq.push(['_trackPageview']);

(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

  • 296198

    累積人氣

  • 10

    今日人氣

    0

    訂閱人氣

【API】滑鼠游標

   
  
安裝方法
打開腳本編輯器,對腳本「Main」按下右鍵,選擇插入,會出現1個空白腳本
在空白腳本內貼上以下腳本:
● 此腳本需要安裝魔劍工舖整合腳本才可以正常使用
● 如果要判斷滑鼠左鍵、右鍵、中鍵的話,請使用
全鍵盤按鍵(4)腳本來判斷

點選框框內的腳本按右鍵打開選單,選擇 [全選] 後在選擇 [複製] ,在指定的位置中貼上腳本即可
   
  
測試腳本 NEW
在「滑鼠游標」下方新增空白腳本或者在「滑鼠游標」最後一行處
插入以下的腳本內容:  

點選框框內的腳本按右鍵打開選單,選擇 [全選] 後在選擇 [複製] ,在指定的位置中貼上腳本即可
安裝好之後,使用測試模式(用RM主程式運行遊戲)時
會在畫面左上方即時顯示滑鼠的座標
還有紅色的十字描準線跟隨滑鼠移動(不管有無生成滑鼠圖形)
    
    
素材規格  
原則上不限大小,只是要注意中心點的問題,這裡稱的中心點為滑鼠實際點的座標
不一定一定要將圖片的左上角做為,也可以讓圖片正中央、右下角...等9個方位可以設定
關於中心點的指定,可以參考『Mouse.cache』方法的說明,以下是中心點指定為5
也就是以圖片正中央為實際滑鼠座標位置,此時圖片樣是就如以下這樣:
 
 
  
    
 
設置方法
設置滑鼠游標圖形[R] UP!  
# 清除滑鼠游標圖形
Mouse.cache

# 用圖片產生滑鼠游標靜態圖形
Mouse.cache('圖片檔案名稱')

# 用圖片產生滑鼠游標靜態圖形(順便設定不透明度)
Mouse.cache('圖片檔案名稱', 不透明度)

# 用圖片產生滑鼠游標靜態圖形(順便設定不透明度 和 中心點)
Mouse.cache('圖片檔案名稱', 不透明度, 中心點)

# 用位圖產生滑鼠游標靜態圖形
Mouse.cache(位圖)

# 用位圖產生滑鼠游標靜態圖形(順便設定不透明度)
Mouse.cache(
位圖, 不透明度)
# 用位圖產生滑鼠游標靜態圖形(順便設定不透明度)
Mouse.cache(位圖, 不透明度, 中心點)
# 用動畫產生滑鼠游標動態圖形
Mouse.cache(動畫編號)
你裝這腳本之後,沒執行這個腳本,是沒辦法在你的遊戲畫面中看到滑鼠游標圖形的
了不起也只能看到預設的電腦滑鼠,而但在RM窗口一段時間預設滑鼠會自動隱藏
總之可以執行這個腳本產生滑鼠游標圖形,在次使用可以將會採用新設定的滑鼠圖標之圖形
此外什麼引數也不使用則是清除滑鼠游標
圖片檔案名稱:設定滑鼠游標的圖片檔案名稱,滑鼠游標圖片請放在Pictures資料夾中
不透明度:設定滑鼠游標的不透明程度,可設為0~255的數值,數值越低則滑鼠就越透明
     如果省略這個設定,基本上不透明度預設設為255
     這雖然可以完全隱藏滑鼠圖標(沒意義),但是不等於清除,請特別注意
位圖:指定使用『Bitmap.new(寬度, 高度)』定義的位圖對象,將用這位圖進行描繪
動畫編號:指定資料庫中設定的動畫資料,則滑鼠圖標將採用這個動畫生成動態圖標
     不過由於解釋動畫的主要還是預設腳本,所以基本特性跟預設腳本相同
     例如可以閃爍滑鼠圖標不然就是播放SE(不過會很吵)
     滑鼠的實際座標位置等同你在資料庫中設定動畫時,格線的中間就是了
中心點:取用圖片中的哪個方位來當做滑鼠的實際座標位置,可設定1~9的數值
    位置相當於鍵盤右鍵數字鍵的位置對應,比如說...
    設定5為圖片中央;設定7為圖片左上角,設定2為圖片下方中間...依此類推
    如果沒有設定此參數的話,預設設定為5(圖片正中間)
  
判斷是否已經產生滑鼠游標圖形[R]
Mouse.cache?
p Mouse.cache? # 撿視是否已經產生
if Mouse.cache? # 條件分歧:當滑鼠游標圖形產生的場合
end
判斷是否有用已經產生了滑鼠游標的圖形,游標不透明度很低到看不到不代表沒產生過
要實際消除滑鼠游標,直接執行『Mouse.cache』腳本就好,不必附帶參數
已經產生了滑鼠游標圖形就返回true;還尚未產生滑鼠游標圖形就返回false
 
更新游標的顯示位置[R] UP!
Mouse.update
更新滑鼠的相關操作,原則上要使用滑鼠功能時,必須要每幀調用1次
滑鼠的座標必需要先執行這方法後才會更新,不然將永遠獲取到相同的座標位置
以及滑鼠圖形的位置更新、滑鼠動畫的更新、滑鼠軌跡效果的更新
此外也負責分配有使用滑鼠模組的窗口的更新以及更新順序的管理
如果有啟用S59_Graphics設定的功能的話,則會自動調用本方法,不需要特別去使用
 
判斷滑鼠是否在指定的範圍內[R]    
Mouse.rect?(X座標, Y座標, 寬度, 高度)
Mouse.rect?(矩形)
和產生窗口的原理類似,在指定的座標設為原點,伸展出指定寬高的範圍(以下稱矩形)
模擬判斷滑鼠游標的點處是否在你所指定的矩形範圍之中
矩形:可用此腳本『Rect.new(X座標, Y座標, 寬度, 高度)』生成矩形對象
   效果上和指定4個參數沒什麼區別,只是有時候為了方便指定而已
當滑鼠的點在矩形範圍內的話返回true;不再矩形內的話就返回false
 
獲取滑鼠的點的座標[R]
Mouse.coord # 獲取滑鼠座標數組,分別為 [X座標, Y座標]
Mouse.coord[0] # 只獲取X座標
Mouse.coord[1] # 只獲取Y座標
剛剛介紹了可以判斷滑鼠是否在某個範圍內,但有時也會想實際知道滑鼠目前指著的座標在哪吧
這個腳本可以獲取目前滑鼠的點座標之用
在次強調,滑鼠座標的原點座標是在遊戲顯示畫面左上角(不含窗口外邊)
所以滑鼠在左邊或上面的窗口範圍外,可能會獲取到負數的值(數字左邊多個 - 符號為負數)
返回一個有兩個單元的數組,分別為 [X座標, Y座標]
  
設定滑鼠的座標位置[R]    
Mouse.coord(X座標, Y座標)
用於指定滑鼠的位置之用,已RM遊戲畫面左上方來座標起始點(0, 0)
這個移動為真實的滑鼠移動,所以要將游標移動到RM遊戲畫面之外是可行的
(只是本腳本的滑鼠圖標不會也跟著跑出去而已...)
  
獲取與設定滑鼠的座標[A] NEW
# 獲取滑鼠X座標,效果等同於:Mouse.coord[0]
Mouse.x
# 變更滑鼠X座標,效果等同於:Mouse.coord(X座標, Mouse.coord[1])
Mouse.x = X座標
# 獲取滑鼠Y座標,效果等同於:Mouse.coord[1]
Mouse.y
# 變更滑鼠Y座標,效果等同於:Mouse.coord(Mouse.coord[0], Y座標)
Mouse.y = Y座標
原則上算是『Mouse.coord』方法的別名,使用結果基本上沒有差別
  
獲取滑鼠所在的地圖座標[R] NEW
# 獲取滑鼠所在的地圖X座標
$game_map.mouse_x
# 獲取滑鼠所在的地圖X座標
$game_map.mouse_y
建議在地圖畫面中使用該方法,此方法能獲取滑鼠所在的地圖座標
地圖座標就是地圖上角色所使用的基本座標,預設32x32大小為1格座標
這方法可以用於判斷,玩家使用滑鼠點了地圖哪一個位置上的地圖區塊之用
  
獲取滑鼠滾輪訊息[R] NEW
Mouse.scroll
如果滑鼠往上滾,返回一個正數值;如果滑鼠往下滾則反回一個負數值
如果當前滑鼠沒有做滾動的動作返回0
通常只要執行該方法後,就有可能會發生頂端!所說的問題發生,所以目前不建議使用
 
判斷滑鼠是否移動中[R] 
Mouse.move?
判斷滑鼠是否有移動,主要用於防止滑鼠搶游標(窗口的)的情況,假設游標可以用滑鼠和鍵盤操作
如果單純判斷滑鼠座標來移動游標位置時,假設滑鼠停留在這個選像上面的話
按鍵盤移動游標時,可能因為滑鼠判定還在選項範圍內,所以游標又馬上移動回滑鼠所在的位置中
使用此腳本可以加1層判斷,讓滑鼠不會去搶鍵盤的游標,直到你使用滑鼠才取滑鼠的選項位置
滑鼠移動中就返回true;如果滑鼠保持原地不動則返回false
 
判斷滑鼠是否在RM遊戲畫面中[R]    
Mouse.rm_window?
假設你某個滑鼠按鍵是全域性的(遊戲畫面中任意處按均有效),例如按右鍵返回之類的...
不過本舖的全鍵盤按鍵腳本,如果滑鼠在遊戲顯示區域之外按下按鍵依然有效果
可以用此腳本判斷滑鼠是否在顯示區內,防止玩家點奇怪的地方卻還是生效的問題
滑鼠在RM顯示區中返回true;如果滑鼠在RM顯示區之外就返回false
  
設置滑鼠軌跡效果[R]  
# 設定滑鼠軌跡效果
Mouse.trajectory(畫格數)
# 取消滑鼠軌跡效果
Mouse.trajectory
設定滑鼠的軌跡效果,所謂的軌跡效果,就是當你移動滑鼠的時候
就會有如殘影般的,滑鼠移動的路線上都會出現一模一樣的滑鼠,越後面顏色越淡
本軌跡效果原則上可適用於動態滑鼠圖標,不過畫格多可能會明顯影響效能
不過要注意,當使用『Mouse.cache』腳本時,本軌跡效果會自動取消,必須重新在執行
畫格數:設定軌跡效果出現的殘影總數,設定越大,能夠製造更長更持久的軌跡....
    此外依照畫格數,也決定了不透明度的變化速度
    (簡單來說就是均分減少不透明度製造逐漸消失的效果,畫格越多透明就越慢)
    本設定為0視同取消滑鼠軌跡效果    
    
    
功能設定   
S59_Complete = false  
這個設定主要功能是...是否啟用進階滑鼠功能,true為要;false為不要
進階滑鼠為將腳本的操作方式大大的朝向全以滑鼠來操作,甚至能捨棄鍵盤操作!!
這個會影響滑鼠模組中的一些操作變化,舉例來說...啟用後...
當滑鼠沒有指向窗口中的任何一個選項之時,則將選項位置設定為nil
在滑鼠模組中,這判定為沒有指定任何的按鍵,不過當然使用後很多東西都要變更
例如有些資料或許是這樣讀取的『a[index]』或『index > 0』...之類的
如果index變成nil的話可能會出錯,所以必須要手動改腳本來排除這個問題
  
S59_RollTempo = 8 NEW
設定滑鼠模組中,滾動窗口內容的速度,速度 = 每1幀時間的執行像素數
有些窗口本身的大小並不一定能夠顯示出所有的選項內容(這時窗口周圍會出現鍵頭)
此時用滑鼠指向鍵頭處時,窗口的內容會自動的滾動
 
S59_Scroll = false NEW
設定滑鼠模組中,上下滾動的方式是否改用滑鼠滾輪來操作
啟用時,滑鼠指向窗口的上鍵頭或者下鍵頭將失去做用,全由滑鼠滾輪負責
不過左鍵頭和右鍵頭不會被此設定影響,還是一樣指向後自動滾動
目前該功能似乎不夠完善,不建議啟用該功能,可能出現的問題已經寫在頂端!處了
 
S59_Graphics = true NEW
是否自動更新滑鼠,簡單來說就是自動使用『Mouse.update』方法
自動使用的時機通常與『Graphics.update』一起每幀調用它
如果關閉這個功能,需要使用滑鼠的功能的時候必需自己寫該方法來執行
 
 
滑鼠模組 NEW 
自動處理一些選項類型的窗口能夠快速支援滑鼠的操作控制
使用滑鼠模組的窗口會具備以下的功能
● 當滑鼠指向某個選項時,self.index會自動代入為第幾個選項值
● 自動修正成相當於在窗口中的位圖描繪的座標,不用特別計算窗口座標邊框..等
● 當位圖大於窗口而顯示箭頭時,滑鼠指向該箭頭觸的邊框能夠滾動內容
● 附加進階滑鼠操作,啟用期間滑鼠沒指向選選項時self.index會代入nil
● 不會跟鍵盤操作搶按鍵(例如滑鼠指著某選項,用鍵盤移動不會被滑鼠移回來)
● Z座標高的窗口優先判讀,並且不會判讀到被蓋住的窗口選項的範圍
 
對想要支援滑鼠的類中添加以下腳本
(註:選擇的類必需繼承「Window_Base」或者「Window_Selectable」)
include Window_Mouse
範例
 
class WSword_S59_1 < Window_Base
  include Window_Mouse
end
此外要注意,繼承「Window_Base」需要另外定義1個方法給滑鼠模組使用
就是index的寫入方法(滑鼠模組會將指向的游標位置直接儲存於index之用)
class WSword_S59_1 < Window_Base
  include Window_Mouse
  def index=(index)
    @index = index
# 將儲存的結果存到@index變數中
  end
end
不過繼承「Window_Selectable」必需要添加這兩個方法,因為該類本來就有了
 
接著就是寫一些一般窗口該有的方法,設定窗口位圖、描繪位圖內容
不過描繪內容的時候,因該要順便連同選項的位置也一同設定
滑鼠模組定義了一個mouse_rect方法,它儲存著一個數組
該數組每個單元都代表一個選項,而單元值為4個單元值的數組
這4個單元分別等同於『Mouse.rect?(X座標, Y座標, 寬度, 高度)』的參數
例如說再窗口中座標(10,12)處描繪了3個字
這時mouse_rect中的數組也可增加1個 [10, 12, 66, 32] 的數組
(66相當於3個字的寬度,32為該行的高度,這將做為滑鼠判斷的範圍)
你打算描繪越多的選項,相對的也必需增加mouse_rect的判斷範圍資料
self.mouse_rect = [] # 清空前次資料(如果該窗口只會描繪1次可不加)
contents.draw_text(0, 0, 100, 32, '選項一', 1) # 描繪選項內容
self.mouse_rect << [0, 0, 100, 32] # 添加滑鼠判斷範圍
contents.draw_text(100, 0, 100, 32, '選項二', 1)
self.mouse_rect << [100, 0, 100, 32]
contents.draw_text(200, 0, 100, 32, '選項三', 1)
self.mouse_rect << [200, 0, 100, 32]
以上腳本可以用循環減少不必要的腳本,不過為了看清楚就不搞了...
然後再把其他部分加一加(例如窗口游標的描繪位置等)
剩下的可以參考範例腳本的寫法~~
   
   
範例腳本 NEW 
打開腳本編輯器,對腳本「Main」按下右鍵,選擇插入,會出現1個空白腳本
在空白腳本內貼上以下腳本:

點選框框內的腳本按右鍵打開選單,選擇 [全選] 後在選擇 [複製] ,在指定的位置中貼上腳本即可
範例1 - 效果演示 
◆腳本:$scene = Sword_S59_0.new
這個範例會顯示5個框框(4灰1藍),每個框框都會寫要怎麼處發它
只要觸發到,灰框就會變成黃框,分別為移動框內變黃、點選框內變黃、
點一下變黃,在點一下變回灰、快速點兩下變黃,在快速點兩下則變回灰
而藍框的為可移動式圖片範例,可以對藍框按住滑鼠左鍵不放來移動看看
此外也做了一些重疊處理的情況,防止移動藍框到灰框時也會觸發灰框的問題
 
範例2 - 滑鼠模組使用範例 
◆腳本:$scene = Sword_S59_1.new
使用了滑鼠模組的窗口範例,窗口游標位置會隨著滑鼠位置而自動的變更
共會顯示3個窗口一樣窗口,不過第2個窗口會蓋住第1個窗口,而第3個窗口大小較小
主要是給你測試窗口重疊時,滑鼠模組的運作情況(通常由優先度大的窗口優先)
而第3個窗口給你測試滑鼠模組的滾動效果之用
一開始進入時,你可能沒有看到窗口游標,只要指窗口中其中1個選項即可顯示
因為這個範例是為了進階滑鼠而設計的,所以可以啟用S59_Complete設定來看看效果差異性
 
 
特別感謝  
呆呆的
● 提供了圖片游標指定中心點的功能
(其實這個功能我原本有想過,不過素材統一圖片中心為滑鼠實際位置後其實沒必要
他提供這項時我還考慮了一段時間XD)
● 提供讀取滑鼠滾輪的功能
(目前還不算完美,使用後會發生的問題在頂端紅字!處已經說明)
相簿設定
標籤設定
相簿狀態