系統公告
熱情贊助
本舖最新更新
輕旅行
搜尋本舖文章
搜尋:
推薦本舖的人
進入本舖的人
意義不明欄位
我的願望是...我要無限的願望!!
本舖人氣指數
當日人次:
累積人次:
熱情贊助
RSS 訂閱
RSS2
ATOM
其它資訊
本部落所刊登之內容,皆由作者個人所提供,不代表 yam天空部落 本身立場。
POWERED BY
POWERED BY
會員登入免費註冊
April 2, 2010
 腳本版本:3  腳本行數:370行  函數修改資料  XP VX 
2010/04/03(6)2011/03/07(3)2012/04/22(6)
☆將字符串定義一個新的函數,用於轉換控制碼為指定的內容之用(僅限本舖提供的控制碼)
☆關鍵字轉換功能,在搜尋字符串尋找特定內容,如果有找到就修改或是前後附加指定內容
☆可以產生一個描繪好文字的位圖,使用者可以將位圖當作圖片一樣放置
☆描繪的文字樣式支援換色、粗體、斜體、底線、刪除線、漸層、陰影、貼圖、填充...等描繪效果
☆可以獲取中途描繪中的位圖(用於打字效果可能)
☆描繪好位圖後,會在特定全局變量中儲存描繪文字的相關資料可以使用
!原則上主要用於強化本舖腳本之用的腳本(讓描繪功能共通使用、方便更新)
!使用本腳本功能,建議有足夠的字符串、精靈、位圖...等相關RGSS知識為佳,會使用塊更佳   

安裝方法
打開腳本編輯器,對腳本「Main」按下右鍵,選擇插入,會出現1個空白腳本
在空白腳本內貼上以下腳本:    

點選框框內的腳本按右鍵打開選單,選擇 [全選] 後在選擇 [複製] ,在指定的位置中貼上腳本即可
     
  
設置腳本方法 
轉換字符串中的控制碼 UP! 
字符串.code_explain
字符串.code_explain(清除描繪標誌)
 範例 
腳本:p '目前1號變數的數值為:\V[1]'.code_explain
執行後,會將該字符串中的控制碼轉換成指定內容
這個函數僅會轉換內容控制碼,描繪控制碼則不會被轉換
請在遊戲正式開始的時候使用(也就是出現標題畫面之後),不然可能無內容或出錯!!
字符串建議使用單引號表示,如果使用雙引號,則控制碼的 \ 斜線必須打兩條才會生效
清除描繪標誌:可設true或false,預設為false,當此引數設為true時
       會將所有描繪位圖用的控制碼內容轉化為空(就是將該控制碼刪除掉)
《返回值》返回一個控制碼被轉化過的字符串,轉化的內容請參考控制碼的說明
  
轉換字符串中的關鍵字 
字符串.critical_word
執行關鍵字轉換,搜尋字符串的關鍵字,關鍵字依照S46_Chase設置的為準
如果字符串中有指定的關鍵字時,則會在關鍵字的前後附加指定的內容
或是將關鍵字修改成其他的內容,詳細請參考S46_Chase設置的內容
《返回值》返回一個關鍵字被轉化過的字符串,轉化的內容請參考控制碼的說明
    
儲存內容到記憶控制碼中 
$game_system.swordM_save[編號] = '文字內容'
 範例 
$game_system.swordM_save[1] = '魔劍工舖'
$game_system.swordM_save[2] = '啊'
p '\L[2]\L[2]~~'.code_explain
#=> "啊啊~~"
p '\L[2]~,\L[1]又沒在更新了'.code_explain #=> "啊~魔劍工舖又沒在更新了"
很像是事件 [變數操作],將數值儲存到變數中,而這個腳本也類似
文字內容儲存到指定編號的變數之中,可以使用「\L」控制碼
將可以將「\L」控制碼轉換成指定編號儲存的內容
    
將字符串描繪成位圖   
字符串.bitmap_explain(寬度, 高度){}
字符串.bitmap_explain(寬度, 高度, 間隔距離){}
字符串.bitmap_explain(寬度, 高度, 間隔距離, 字體){}
將字符串描繪成一個位圖形式,原則上除了用p函數的小窗口顯示出來的檢視內容之外
原則上我們在遊戲畫面中看到的任何文字、圖片、動畫...都是描繪好的位圖後再呈現的
此腳本除了快速用簡短的腳本描繪來,也支援用各種控制碼,來製作更多樣化的描繪效果
像是文字變色、變粗、附加線條...等等,此外也可以描繪出特定圖片或是將某區塊填滿顏色之類的
當描繪完之後,會返回一個已經描繪好的位圖,此外$Sword46變量也會記錄描繪的資訊
寬度、高度:  
  設定位圖的大小(也可以說是設定可顯示的範圍),如果描繪的內容超出位圖大小時
  則超出的內容可能無法顯示出來,不過$Sword46儲存的資料不受位圖大小影響
間隔距離:原則上換行時,前一行與這一行的距離可以說是0(接近貼在一起的感覺,依字體而定)
     而設定這個主要可以增加行與行之間的內容,讓下一行內容隔開更多距離
     一般沒有設定這個的話,預設採用0
字體:這個字體是指RGSS中的Font類,這個類主要用採用的系統字體、文字大小...等資料
   主要是提供後,在尚無使用任何控制碼的情況下的所採用的預設文字描繪樣式
   如果未設定原則上一般來說是採用預設的字體(Font)
   字體(Font)可以設定為『Font.new(字體名稱&, 文字大小&)
   詳細用法請參考F1幫助說明→RGSS 參考→遊戲庫→RGSS 內部類→Font
塊:在這裡可以放置任意腳本來使用,原則上這個位置是一個循環,描繪越多循環次數越多
  在塊中可以獲取一個參數,這個參數為目前描繪好的位圖(也就是說尚未描繪好的位圖)
  原則上每循環一次,會發現會多描繪一個文字(或圖片、色塊...之類的,以下只稱文字)
  參數可以用『|變量名稱|』來獲取,這樣位圖就會儲存在你指定的變量名稱的變量中了
  使用者希望的話,可以利用這個循環,來不斷更換目前顯示的圖片,製造打字效果出來
  如果不使用,則塊設定空白即可,{ } 這個框框必須保留,不然會出錯
《返回值》返回一個位圖對象(Bitmap),可用精靈(Sprite)將描繪的位圖顯示再RM窗口中
   
描繪位圖的資料   
$Sword46
$Sword46[0] # 獲取整體資料

$Sword46[1]
# 獲取每行資料
該變量儲存了最近一次使用描繪腳本的相關資料,主要為3個單元的數組
如果尚未使用過描繪腳本過的話,則儲存nil(就算按下F12,也不會變回nil)
整體資料:可獲取『[描繪最大寬度, 描繪最大高度]
     主要是獲取需要多大的範圍才可以完全顯示所有位圖的內容之用
     所以說獲取到的數值也許會超出當初呼叫所設定的寬度和高度的可能
每行資料:可獲取『[該行最大寬度, 該行最大高度, [單個字資料表*]]
     行數越多,能獲取到的資料也越多(越多數組單元的意思)
     單個字資料表:可獲取『[類型, , Rect.new(X座標, Y座標, 寬度, 高度)]
            類型:0:表示描繪這個字的所在位置已經描繪時大小
               1:表示描繪圖片的檔名還有所在位置和圖片大小
               2:表示描繪色塊的所在位置與填充大小(字資料為nil)
  
引用對象資料 NEW 
$game_system.swordM_data = 對象
某些控制某需要依據對象才可以正常使用,使用這些控制碼能引用對象中的資料來描繪或轉化
右邊這些為需要引用的控制碼:\DA、\EF、\SS
關於這些控制碼會再下方的特殊控制碼中進行詳細的介紹
如果沒有用此腳本引用某個對象的話這些控制碼將找不到對象而出錯
(當然如果對象中沒有這些控制碼要求的資料的話也是一樣會獲取不到)
例如\DA是將對象中指定函數的內容轉化成內容,要取2號角色當前的HP上限話
$game_system.swordM_data = $game_actors[2]
p '\DA[maxhp]'.code_explain
# 顯示2號角色的HP上限
    
   
功能設定 
S46_Switche = ['開時的內容', '關時的內容'] 
該設定主要用於轉換控制碼內容之用
使用控制碼「\SW」變換成的內容,將依照這個設置的內容為準
如果「\SW」控制碼指定編號的開關為ON時會顯示 開時的內容 
如果「\SW」控制碼指定編號的開關為OFF時會顯示 關時的內容  
   
S46_NilText = 24   
該設定主要用於描繪位圖的腳本之用
當單行最大高度為0時(通常情況下是該行無任何內容,連空白鍵都沒有的情況下一般為0)
將這個單行最大高度設定為此設定的數值,設0某方面來說可以說是不使用該功能
主要是處理換行中,如果中間那行無內容的話,看似3行句字可能會變成2行
魔 魔
 →劍
劍  
雖然一般情況下只需要在那空白行加個空白鍵就能利用那個空白產生單行最大高度
所以說此設定主要是方便用的設定而已
  
S46_Chase = {
  關鍵字資料表* 
}
# 設置結束   
該設定主要用於轉換指定關鍵字內容之用
當字符串中的內容有此設置指定的關鍵字時,將關鍵字修改成其他內容
或者是將關鍵字前面和後面附加指定內容
關鍵字資料表:如果設定『'關鍵字'=>['前頭附加內容', '後頭附加內容'],
       則表示找到的關鍵字前面和後面附加你指定的內容
       如果設定『'關鍵字'=>['新文字內容'],
       則表示找到的關鍵字替換成其他內容
       這兩種設定方式可以自行添加多個來指定更多的關鍵字
 
 
特殊控制碼 
會連續確認的控制碼
控制碼「\V」、「\TXT」、「\L」會不斷確認直到沒有為止...
也就是說當「\TXT」中有「\TXT」控制碼時,將會再次轉換內容
直到沒有內容可轉換為止,所以要注意,不要搞到無限呼叫產生死循環
   
\TXT
讀取txt檔案中的內容,txt檔就是指記事本,起始路徑為你的遊戲資料夾
此外注意一點,儲存的記事本的編碼必須為UTF-8編碼,不然中文之類的字可能會變成控制碼?!
 如果使用\TXT控制碼不指定索引的話,則會將指定的txt檔的全部內容都給讀出來
但如果想要指定索引,也就是指讀取控制碼中指定的某一段內容時
這時記事本中的內容寫法,依照 [ ] 作為開頭,無內容的行為結束,像以下這樣:
[a1]
123
 
[a2]
一二三
 
[a3]
壹貳參

(由於部落的問題,以上第3行和第6行有加空白鍵,防止部落顯示沒換行,請想成無空白鍵存在)
假設檔案名稱存為text好了,這時執行『\TXT[text][a2]』,此時這個控制碼將轉換成內容〔一二三〕
如果指定『\TXT[text][a3]』,則該控制碼的內容將會轉換成〔壹貳參〕,依此類推...
如果想要單純的純空白行的話,則建議在加個空白鍵,以免誤判成該索引結束
   
【1】\C[色碼]
【2】\C[,,]
【3】\C[,,,不透明度]
【4】\C[#紅綠藍]
【5】\C[#紅綠藍透]
【6】\C
   
這個控制碼之後的內容將會變更為指定的顏色
如果沒有指定參數(設置法6),則表示恢復到預設的顏色(本腳本預設顏色)
如果使用不包含設置法6的控制碼兩個連續放在一起的話,表示漸層顏色
顯採用左邊的\C當起始色,再採用右邊的\C當結尾色,兩個必須放在一起才生效
如果需要取消漸層色的話,只需在執行任一個\C控制碼即可(包含設置法6)
(注意:漸層色可以會花比較多的時間處理,尤其漸層文字越多就越久的可能)  
(VX:再漸層色的情況下,為了避免描繪出預期外的結果,會暫時無效VX本身陰影效果) 
色碼:原則上和事件指令 [顯示文章] 的\C控制碼的設定方式是相同的
   設定1個數值,如果這個數值有設定顏色,則就變成該數值設定的顏色
   如果該數值沒有設定顏色,則採用普通顏色(Window_Base類的normal_color函數)
   如果要設定每個數值代表什麼顏色,請至「Window_Base」的text_color函數設定
紅、綠、藍:   
  用三原色來指定顏色,可以設定0~255的數值,數值越大表示該顏色越大(亮?)
  可以透過三種顏色的互相混合成各種不同的顏色
  可以參考小畫家程式→色彩→編輯色彩→定義自訂色彩中的紅綠藍
不透明度:可以設定0~255的數值,數值越小表示越透明
     通常在使用設置法2的時候,通常會採用255
紅綠藍、紅綠藍透:   
  某方面來說每個字都是分開的設定,對應設置法2或設置法3的設定一樣
  只是方式上的不同而已,這只是仿照網頁的顏色排列
  也就是6個英文數字組成的16進位設定方式(設置法4),而設置法5多了個不透明度
  每2個英文數字代表一個參數,可設定00~FF的16進位數值(意思同0~255)
  設定『\C[#FF41C2]』其實和『\C[255,65,194]』的顏色是一樣的!!
 
\F  
回到原始文字狀態,也就是回到尚未用任何控制碼的時候的文字
主要為恢復字體、大小、顏色
並解除粗體、斜體、底線、刪除線、陰影
  
【1】\FN[字體名稱]
【2】\FN
  
這個控制碼之後的內容將變更為指定的字體
如果使用設置法2的控制碼,表示回到未變更字體時的字體
此外如果玩家電腦中找不到指定的字體時,則此控制碼的效果將沒有作用
   
【1】\FS[大小]
【2】\FS
   
這個控制碼之後的內容文字大小將會變更成指定的大小
如果使用設置法2的控制碼,表示回到未變更文字大小時的文字大小
這個控制碼的大小有可能改變單行的最大高度可能,寬度也會因大小稍微影響文字排版
    
【1】\FH[位置]
【2】\FH
  
這個控制碼之後的內容文字旁邊會嘗試附加陰影色來增加文字的美觀
如果使用設置法2的控制碼,為不附加陰影,原則上和直接設置『\FH[0]』效果相同
位置:設定附加陰影的位置,用數值來設定,可以設定0~9的數值
   每個數值的位置對應的位置如同鍵盤右邊的數字鍵的位置
   1為左下附加陰影;2為下;3為右下;4為左;6為右;7為左上;8為上;9為右上
   而0為取消陰影;5為全方位都附加陰影
   
\B  
這個控制碼之後的內容將會變更為粗體文字(看似比原來的字還要粗)
如果說已經是粗體狀態下在使用該控制碼的話,會取消粗體
   
\I  
這個控制碼之後的內容將會變更為斜體文字(看似往右邊倒的感覺)
如果說已經是斜體狀態下在使用該控制碼的話,會取消斜體
  
\U  
這個控制碼之後的內容會附加底線(文字底下一條直線)
而這條底線的顏色同目前文字的顏色(不包含漸層色)
如果說已經是底線狀態下在使用該控制碼的話,會取消底線
  
\S  
這個控制碼之後的內容會附加刪除線(文字中央會出現一條線)
而這條刪除線的顏色同目前文字的顏色(不包含漸層色)
如果說已經是刪除線狀態下在使用該控制碼的話,會取消刪除線
  
【1】\BS[路徑]  
【2】\BS[路徑,色相]
  
顯示指定路徑的圖片,如果找不到圖片會發生找不到檔案的錯誤訊息
圖片會影響到接下來的內容的描繪位置,所以請注意排版
路徑:以遊戲所在的位置做為起點,透過路徑的方式連接到圖片
   原則上不用附加副檔名,因為RM預設會自行判讀是否為PNG或JPG圖檔
   如果嫌棄前面的路徑太長又有重複,請善用記憶控制碼\L的功能
色相:可設定0~360的數值,原則上和我們使用RM選擇角色圖片的色相設定相同
    
\CO[寬度,高度]  
顯示一個方形,方形的大小由控制碼的參數而定
而方形的顏色依據目前的文字顏色而定(不包含漸層色)
顯示出來的方形,也會影響到描繪的位置,所以請注意排版
   
\X[像素]  
描繪位置橫向移動特定距離,也就是說下個字會往右或左特定距離時在描繪
更改描繪位置可能會使單行的最大寬度的資料不準確的可能性
所以使用時注意排版,竟可能不要跟其他的字疊在一起
該控制碼主要是對文字的位置做細微修正用,能不使用就不使用為佳
像素:正數為向右移動;負數為向左移動
    
\Y[像素]  
描繪位置直向移動特定距離,也就是說下個字會往下或上特定距離時在描繪
更改描繪位置可能會使單行的最大高度的資料不準確的可能性
所以使用時注意排版,竟可能不要跟其他的字疊在一起
該控制碼主要是對文字的位置做細微修正用,能不使用就不使用為佳
像素:正數為向下移動;負數為向上移動
  
\TY[能力位置] NEW 
此控制碼依據魔劍工舖整合腳本S0_Ability設定設定來將此控制碼內容進行轉化
從0開始為再S0_Ability設定中第1個位置的內容,主要為獲取能力值名稱之用
  
\DA[函數名稱] NEW  
這個控制碼需要有使用『$game_system.swordM_data』引用對象後才可以正常使用
獲取指定對象中指定函數的內容並將此控制碼轉化成該內容
  
\EF NEW 
這個控制碼需要有使用『$game_system.swordM_data』引用對象後才可以正常使用
此控制碼依據魔劍工舖整合腳本S0_Set設定和S0_SetX設定來將此控制碼內容進行轉化
轉化的內容為所有屬性的名稱,每個屬性文字之間都會用全型空白『 』進行分開
產生的內容不包含再S0_SetX設定中的忽略列表中,此外顯示名稱的數量受S0_Set設定指定
此外屬性名稱旁邊會自動附加\C控制碼來表示S0_Set設定所指定的屬性顏色
  
\SS NEW 
這個控制碼需要有使用『$game_system.swordM_data』引用對象後才可以正常使用
此控制碼依據魔劍工舖整合腳本S0_StatuX設定和S0_StatuMax設定...
還有S0_Plus設定以及S0_Minus設定來將此控制碼內容進行轉化
轉化的內容為所有狀態的名稱,每個狀態文字之間都會用全型空白『 』進行分開
產生的內容不包含再S0_StatuX設定中的忽略列表中,此外顯示名稱的數量受S0_StatuMax指定
此外狀態名稱旁邊會自動附加\C控制碼來表示S0_Plus附加狀態或S0_Minus解除狀態的顏色

     
    
範例腳本   
在「Main」腳本按右鍵選擇插入,會在「Main」上面添加1個空白腳本
剛剛新增的空白腳本,必須在「控制碼轉換」腳本位置的下面即可
RPG Maker XP  
Font.default_name = ['標楷體']
$data_system = load_data("Data/System.rxdata")
$game_system = Game_System.new
@base = Window_Base.new(-16, -16, 660, 500)
@base.contents = Bitmap.new(640, 480)
'無效果 \C[4]預設變色 \C[255,255,0]3原色變色 \C[#FF41C2A0]16進位變色\C
\B粗體\B \I斜體\I \U底線\U \S刪除線\S \FN[細明體]細明體 \FN[標楷體]標楷體 \FN
\FS[32]文字大小\FS  \C[#FFFF00]\C[#FF0000]漸層文字\C \FH[3]陰影\FH[5]文字\FH
\BS[Graphics/Characters/001-Fighter01,100] \BS[Graphics/Characters/002-Fighter02] \CO[80, 40]
\B\I\U\S\FH[2]魔劍\F工舖
'.bitmap_explain(640, 480){|bit| @base.contents.clear
@base.contents.blt(0, 0, bit, Rect.new(0, 0, 640, 480))
6.times{Graphics.update}}
loop{Graphics.update}
    
RPG Maker VX  
Font.default_name = ['標楷體']
$data_system = load_data("Data/System.rvdata")
$game_system = Game_System.new
@base = Window_Base.new(-16, -16, 660, 500)
@base.contents = Bitmap.new(640, 480)
'無效果 \C[4]預設變色 \C[255,255,0]3原色變色 \C[#FF41C2A0]16進位變色\C
\B粗體\B \I斜體\I \U底線\U \S刪除線\S \FN[細明體]細明體 \FN[標楷體]標楷體 \FN
\FS[32]文字大小\FS  \C[#FFFF00]\C[#FF0000]漸層文字\C \FH[3]陰影\FH[5]文字\FH
\BS[Graphics/Characters/!$Gate1,100] \BS[Graphics/Characters/!$Gate2] \CO[80, 40]
\B\I\U\S\FH[2]魔劍\F工舖
'.bitmap_explain(640, 480){|bit| @base.contents.clear
@base.contents.blt(0, 0, bit, Rect.new(0, 0, 640, 480))
6.times{Graphics.update}}
loop{Graphics.update}
 



誰推薦這篇文章
引用 (你可以針對此文寫一篇屬於自己的blog/想法,並給作者一個通告)
引用
留言 (4筆)
4.
不好意思 劍魔大 看不懂用法 假設我要顯示開關的狀態
是 :

◆對話:音樂開關狀態為\S[1]中
◆指令碼:'音樂開關狀態為\S[1]中'.code_explain

嗎?
 
板主回覆:
被 ' 或 " 符號包圍住的內容為字符串,並非對話事件的一部份
你這樣寫雖然有運作,但是實質上沒用途,因為沒看到腳本使用這字串
如果要用在對話框中的話,通常要把字串存入對話框的變量之中才有效
VX中主要是使用 $game_message.texts 儲存字符串數組表示
總之...差不多可以寫成這樣@@
a = '音樂開關狀態為\S[1]中'.code_explain
$game_message.texts += [a]
 
其實這個腳本算是了解RGSS基礎的人使用較適合,不然基本上都當其他腳本的外掛
VX好少人用喔= = 於 Jul 25, 2010 留言 |
3.
我懂了~~
謝謝劍魔大大的解說
 
板主回覆:
咦~~??我聽不懂主要在問什麼我就隨便回,難道我回對了??!!
呆呆的 於 Apr 29, 2010 留言 |
2.
請問劍魔大大~~
如果說要用事件的腳本功能
加入指定變數的物品
該怎麼寫??
ex:
變數27為2
變數28為1
增加物品(編號2的物品x1)


還有~~(和上一個問題類型很像)
如果說要用此腳本
顯示說
獲得<000>x<2>
其中
<>為變數數值
第一個<>是用變數轉換成物品名稱
事件中的腳本功能可以寫成
'獲得\IN[\V[27]]x\v[28]

 
板主回覆:
這次的問題好深奧...,不太好懂阿(思考中...)
「加入指定變數的物品」的意思是指 如何用變數指定物品編號??數量??
總之...我先隨便給出一些腳本好了,看看是不是你要的...
$game_variables[27] = 2 # 27號變數代入2
$game_variables[28] = 1 # 28號變數代入1
$game_party.gain_item(2, 1) # 物品編號2的物品增加1個
$game_party.gain_item($game_variables[28], 1) # 物品編號採用28號變數
 
第2個問題是要問什麼??感覺最後變成在解說的感覺?!
看到後來沒看到任何的疑問句,實在不知道你在問哪方面的問題
順便一題,這是這腳本的用法...,但要將字串顯示在哪裡就看你了?!
'\IN[\V[27]]x\v[28]'.code_explain
呆呆的 於 Apr 28, 2010 留言 |
1.
師父...這就是我夢寐以求許久的...超完美對話事件用控制碼嗎?
喔...愛死了...可以和之前的的加強對話相容嗎?
不管了!待會馬上來享用...呵呼呼呼~~~
 
板主回覆:
目前是打算慢慢的整合到所有需要用到控制碼的本部落腳本中
也就是說...往後的控制碼都會引用這個腳本的控制碼
可以大大減少相同腳本的寫法容量(加上我寫腳本也會比較方便)
如果你想的話,其他的對話腳本要用在這個腳本上依然是可行的...
(雖然可能還是有些衝突性外加你必須知道字符串在哪裡!!)
wasami 於 Apr 3, 2010 留言 |
發表你的留言 (字數限制 最多 2000 個中文字)
私密留言:
Name:




內容:
檢視行動版網頁  |  檢視正常版網頁