RGSS
RGSS
日本的遊戲製作軟體RPG Maker XP所使用的內部腳本系統,是ruby的擴展庫。
RGSS(Ruby Game Scripting System),中文意思是 Ruby 遊戲腳本系統,是應用面向對象的腳本語言 Ruby 開發 Windows 2D 遊戲的系統。使用 RGSS,就和 C 語言等程序語言那樣簡單,能創建完全原創的遊戲系統。Ruby 是一種初學者也能很容易使用,並且功能強大的高級語言。
本文檔是從 Ruby 的參考手冊上摘錄下使用 RGSS 的必要信息,加上關於 RGSS 獨特方法的解說重編輯而成。對於 RGSS 的用戶,在遊戲程序設計方面不重要的部分進行了大幅刪減,對各處描述也稍作了修改。因此在描述上可能會出現不正確的情況。作為 Ruby 的參考,請注意那些非常簡單的東西。
RGSS中的腳本:
在RMXP(Rpg Maker XP)中,遊戲開始運行后,總是從最上邊的腳本開始運行,依次往下,所以,經常把變數聲明、類聲明、函數聲明、函數定義的腳本放在上面,而MAIN腳本總是放在最後。
變數類型:
全局變數 $var
實變數 @var
局部變數 var
常量 VAR
數據類型(註:RGSS中變數類型為弱變數,無需定義,只要初始化即可。):
數值型 0~9
浮點型 0~9,小數點
字元串型 加了""的在ASCII碼錶上的任意字元。
布爾型 true/false
空型 nil
RGSS是Ruby的遊戲腳本系統,所以關鍵字與Ruby原版大同小異,但也有少數修改,如:
RGSS1.02J(或更高版本)中,puts()函數功能被簡化為p,添加了print函數,
RGSS1.03J中添加了塊註釋方法,即以“=begin”開頭,以“=end”結束。
RGSS遇到換行符就自動結束當前的這一行,這一點是與VB相似的,當然,RGSS也可以象C語言那樣以西文分號結束,這點看習慣。
RGSS主程序開始與結束
begin
程序段
end
RGSS庫的開始與結束
modle 庫名
程序段
end
RGSS類的開始與結束
class 類名 < [父類]
程序段
end
RGSS自定義函數的開始與結束
def 函數名[(參數)]
程序段
end
RGSS庫的調用
include 庫名
RGSS類的調用
類名.new[(類中initialize函數的參數)]
RGSS自定義函數的調用
函數名[(參數)]
RGSS中的條件分歧
1.if語句
示例:
if $a == "66rpg"
print("歡迎來到#{$a}")
end
2.if...else語句
示例:
if $username == "admin" and $password == "abc"
print("你好,Admin")
else
print("您無權察看!!")
exit
end
3,if...elsif...else語句
示例:
if $name == "Tony" and $lastname == "Fox"
print("Welcome, Tony Fox!")
elsif $name == "Iceandsnow" and $lastname == "Fox"
print("Welcome, Iceandsnow Fox!")
else
print("unable Name")
end
4.case語句
case 變數
when 值
語句塊
when 值
語句塊
else
語句塊
end
RGSS中的循環
while ~ end在滿足特定條件期間進行循環的情況下使用 while 語句。
a = 0 # 為變數 a 賦值代入 0。
i = 1 # 為變數 i 賦值代入 1。
while i <= 5 # 當變數 i 為 5 以下時循環開始(重複以下處理),
a += i # 變數 a 加上 i 的值。
i += 1 # 變數 i 的值增加 1。
end # 循環結束。
p a # 顯示計算結果。
這個示例是求從 1 到 5 這五個數字總和的程序。在這裡,變數 i 是用來產生從 1 到 5 這五個數字用的。當然變數名也可以不用 i,一般情況下循環處理用的變數會使用 i、j、k 為名稱。
那麼,這個程序最重要的是 i += 1 這行。如果沒有這行 i 的值永遠為 1,而 i <= 5 的條件也會一直滿足,就會成為無限循環。因此,這裡每次都向 i 加上 1 使得 i 的值依次變為 2、3、4、5、6 從而使得循環結束。
變數 a 和 i 的數值變化,如下表所示。
循環 a 的值 i 的值
初始狀態 0 1
1 次后 1 2
2 次后 3 3
3 次后 6 4
4 次后 10 5
5 次后 15 6
循環 5 次后,在 a 的數值裡面實際上進行了 1+2+3+4+5 的計算,i 的值也超過了 5 而執行 end 使得循環結束。
然後以 p 命令顯示最終 a 的值,就會顯示出答案 15。
變化範圍
數值的範圍,例如類似於「從 1 到 5」這樣的概念就稱為變化範圍。
1..5
上述示例表示「從 1 到 5」的意思。使用 .. 運算符,就能作成一個變化範圍。
而且,使用 ... 運算符也可以。
1...5
和 .. 不同的是「不含最後一個數」。所以,這種情況實際上表示的是「從 1 到 4」的意思。
for ~ in ~ end
想在變化範圍表示的範圍內循環的情況下使用 for 語句。
a = 0 # 為變數 a 賦值代入 0。
for i in 1..5 # 變數 i 的值按從 1 到 5 的範圍變化,
a += i # 變數 a 加上 i 的值。
end # 循環結束。
p a # 顯示計算結果。
這個示例和使用 while 語句的示例完全相同,也是求從 1 到 5 這五個數字總和的程序,但比使用 while 的情況更加簡潔。在 while 中變數 i 加上 1 表示的是從 1 到 5 的範圍,然而在 for 中是用變數 i 按「從 1 到 5 的範圍」的順序代入來表示。表面看起來不同,但實際上進行的是意思完全相同的處理。
Ruby 中有許多語法,循環中也存在各種各樣不同的方法。在不同語法使用中,請按照這個示例提示的「讓編寫更簡便」的方式來思考。實際上,如果理解了條件分歧和循環的話,就能進行大部分邏輯運算了。
loop do ~ end
未指定循環次數和條件的情況下,也就是想進行無限循環時使用 loop 語句。這個與 while 和 for 語句的性質稍微有所不同,一般情況下沒有必要注意。
i = 0 # 為變數 i 賦值代入 0。
loop do # 循環開始。
i += 1 # 變數 i 的值增加 1。
p i # 顯示變數 i 的值。
end # 循環結束。
這個示例是「一邊把 i 的值加上 1,一邊顯示 i 的值」的程序,沒有結束條件。一旦運行的話就會連續顯示 1、2、3……。如果這種對話框不斷顯示的話,就算要結束程序也是不可能的,只能按著 F12 鍵不放強行關閉對話框,並點擊右上方的結束按鈕關閉程序。
想中途中斷循環就要使用 break 命令。
i = 0 # 為變數 i 賦值代入 0。
loop do # 循環開始。
i += 1 # 變數 i 的值增加 1。
if i == 5 # 如果變數 i 的值為 5 的話,
break # 中斷循環。
end # 條件分歧結束。
p i # 顯示變數 i 的值。
end # 循環結束。
上述示例在程序中加上了「i 等於 5 的就中斷循環」的條件。運行該程序,顯示 1、2、3、4 就結束了。
break 即使在 while 和 for 等其它方法作成的循環中也能使用。
next
在不中斷循環的情況下,跳過本次循環而進入下一次循環時使用 next 命令。
for i in 1..5 # 變數 i 的值按從 1 到 5 的範圍變化,
if i == 3 # 如果變數 i 的值為 3 的話,
next # 進入下一次循環。
end # 條件分歧結束。
p i # 顯示變數 i 的值。
end # 循環結束。
運行這個示例,會顯示 1、2、4、5。
1,helloworld程序
begin
print("HelloWorld!!")
end
2,數值運算
begin
x = 10
y = 20
p x+y
end
3,條件判斷
begin
a = 10
if a>=5
print("a的值大於等於5")
else
print("a的值小於等於5")
end
end
4,循環
begin
for i in 1..3
print("這是第#次顯示")
end
end
begin
do
print("這是第#次顯示")
while i <= 4
end
begin
loop do
i++
print("這是第#次顯示")
if i = 4
break
end
end
end
5,函數調用
class My_Class
def mian # 主處理
x = 6
y = 5
addnum(x, y)
end
def addnum(num1, num2)
sum = num1 + num2
p sum
end
end
6,類的調用
begin
if $scene != nil
$scene.main
else
exit
end
$scene = Scene_MyClass.new
end
7,庫的生成及調用
module MYMODULE
def division(num1, num2)
sum = num1/num2
return sum
end
end
class My_Class
include MYMODULE
def main
x = 25
y = 16
z = division(x, y)
p z
end
Ruby Game Script System
│
├─Game_Actors 處理角色排列的類。
├─Game_BattleAction 處理行動 (戰鬥中的行動) 的類。
├─Game_Battler 處理戰鬥者的類。
│ ├─Game_Actor 處理角色的類。
│ └─Game_Enemy 處理敵人的類。
├─Game_Character 處理角色的類。
│ ├─Game_Event 處理事件的類。
│ └─Game_Player 處理主角的類。
├─Game_CommonEvent 處理公共事件的類。
├─Game_Map 處理地圖的類。
├─Game_Party 處理同伴的類。
├─Game_Screen 處理屏幕的類。
│ └─Game_Picture 處理圖片的類。
├─Game_SelfSwitches 處理獨立開關的類。
├─Game_Switches 處理開關的類。
├─Game_System 處理系統附屬數據的類。
├─Game_Temp 處理在沒有存檔的情況下的臨時數據的類。
├─Game_Troop 處理隊伍的類。
├─Game_Variables 處理變數的類。
├─interpreter 執行事件命令的解釋器中的命令的類。
├─Scene_Battle 處理戰鬥畫面的類。
├─Scene_Debug 處理調試畫面的類。
├─Scene_End 處理遊戲結束畫面的類。
├─Scene_Equip 處理裝備畫面的類。
├─Scene_File 處理遊戲讀取、存檔畫面的基類。
│ ├─Scene_Save 處理存檔畫面的類。
│ └─Scene_Load 處理讀取畫面的類。
├─Scene_Gameover 處理遊戲結束畫面的類。
├─Scene_Item 處理物品畫面的類。
├─Scene_Map 處理地圖畫面的類。
├─Scene_Menu 處理菜單畫面的類。
├─Scene_Name 處理名稱輸入畫面的類。
├─Scene_Shop 處理商店畫面的類。
├─Scene_Skill 處理技能畫面的類。
├─Scene_Status 處理狀態畫面的類。
├─Scene_Title 處理標題畫面的類。
├─Spriteset_Battle 處理戰鬥的精靈的類。
├─Spriteset_Map 處理地圖的精靈的類。
├─Bitmap(RGSS) 點陣圖的類。
├─Color(RGSS) 顏色的類。
├─Font(RGSS) 字體的類。
├─Plane(RGSS) 平面的類。
├─Rect(RGSS) 矩形的類。
├─RGSSError(RGSS) 處理 RGSS 內部異常的類。
├─RPG(Module) 集合了 RPGXP 數據結構等的模塊。
│ ├─RPG::Cache(Module) 讀取 RPGXP 的各種圖片,建立並存儲 Bitmap 對象的模塊。
│ ├─RPG::Sprite(RGSS) 追加了 RPGXP 使用的各種效果處理的精靈的類。
│ │ └─Sprite_Character 角色顯示用精靈。
│ │ └─Sprite_Battler 戰鬥顯示用精靈。
│ ├─RPG::Weather(RGSS) 用 RPGXP 事件指令顯示天氣效果(雨,風,雪)的類。
│ ├─RPG::Map(Data) 地圖的數據類。
│ ├─RPG::MapInfo(Data) 地圖信息的數據類。
│ ├─RPG::Event(Data) 地圖事件的數據類。
│ │ └─RPG::Event::Page(Data) 事件頁的數據類。
│ │ ├─RPG::Event::Page::Condition(Data) 事件頁“條件”的數據類。
│ │ └─RPG::Event::Page::Graphic(Data) 事件頁“圖像”的數據類。
│ ├─RPG::EventCommand(Data) 事件指令的數據類。
│ ├─RPG::MoveRoute(Data) 移動路線的數據類。
│ ├─RPG::MoveCommand(Data) 移動命令的數據類。
│ ├─RPG::Actor(Data) 角色的數據類。
│ ├─RPG::Class(Data) 職業的數據類。
│ │ └─RPG::Class::Learning(Data) 職業“學會的特技”的數據類。
│ ├─RPG::Skill(Data) 技能的數據類。
│ ├─RPG::Item(Data) 物品的數據類。
│ ├─RPG::Weapon(Data) 武器的數據類。
│ ├─RPG::Armor(Data) 防具的數據類。
│ ├─RPG::Enemy(Data) 敵人的數據類。
│ │ └─RPG::Enemy::Action(Data) 敵人“行為”的數據類。
│ ├─RPG::Troop(Data) 隊伍的數據類。
│ │ ├─RPG::Troop::Member(Data) 隊伍成員的數據類。
│ │ └─RPG::Troop::Page(Data) 戰鬥事件頁的數據類。
│ │ └─RPG::Troop::Page::Condition(Data) 戰鬥事件頁“條件”的數據類。
│ ├─RPG::State(Data) 狀態的數據類。
│ ├─RPG::Animation(Data) 動畫的數據類。
│ │ ├─RPG::Animation::Frame(Data) 動畫“幀”的數據類。
│ │ └─RPG::Animation::Timing(Data) 動畫“SE 與閃爍的時機”的數據類。
│ ├─RPG::Tileset(Data) 圖塊的數據類。
│ ├─RPG::CommonEvent(Data) 公共事件的數據類。
│ ├─RPG::System(Data) 系統的數據類。
│ │ └─RPG::System::Words(Data) 系統“用語”的數據類。
│ ├─RPG::AudioFile(Data) 聲音文件的數據類。
├─Sprite(RGSS) 精靈的類。
│ ├─Sprite_Picture 顯示圖片用的精靈。
│ ├─Sprite_Timer 顯示計時器用的精靈。
│ └─Arrow_Base 在戰鬥畫面使用的箭頭游標的精靈。
│ ├─Arrow_Enemy 選擇敵人的箭頭游標。
│ └─Arrow_Actor 選擇角色的箭頭游標。
├─Table(RGSS) 多維數組的類。
├─Tilemap(RGSS) 管理元件地圖的類。
├─Tone(RGSS) 色調的類。
├─Viewport(RGSS) 視口的類。
└─Window(RGSS) 遊戲內窗口的類。
└─Window_Base 遊戲中全部窗口的基類。
├─Window_Selectable 擁有游標的移動以及滾動功能的窗口類。
│ ├─Window_Command 一般的命令選擇行窗口。
│ ├─Window_MenuStatus 顯示菜單畫面和同伴狀態的窗口。
│ ├─Window_Item 物品畫面、戰鬥畫面、顯示瀏覽物品的窗口。
│ ├─Window_Skill 特技畫面、戰鬥畫面、顯示可以使用的特技瀏覽的窗口。
│ ├─Window_Target 物品畫面與特技畫面的、使用對像角色選擇窗口。
│ ├─Window_EquipRight 裝備畫面、顯示角色現在裝備的物品的窗口。
│ ├─Window_EquipItem 裝備畫面、顯示瀏覽變更裝備的候補物品的窗口。
│ ├─Window_ShopCommand 商店畫面、選擇要做的事的窗口
│ ├─Window_ShopBuy 商店畫面、瀏覽顯示可以購買的商品的窗口。
│ ├─Window_ShopSell 商店畫面、瀏覽顯示可以賣掉的商品的窗口。
│ ├─Window_Message 顯示文章的信息窗口。
│ ├─Window_PartyCommand 戰鬥畫面、選擇戰鬥與逃跑的窗口。
│ ├─Window_DebugLeft 調試畫面、指定開關及變數塊的窗口。
│ └─Window_DebugRight 調試畫面、個別顯示開關及變數的窗口。
├─Window_Help 特技及物品的說明、角色的狀態顯示的窗口。
├─Window_Gold 顯示金錢的窗口。
├─Window_PlayTime 菜單畫面顯示遊戲時間的窗口。
├─Window_Steps 菜單畫面顯示步數的窗口。
├─Window_SkillStatus 顯示特技畫面、特技使用者的窗口。
├─Window_EquipLeft 裝備畫面的、顯示角色能力值變化的窗口。
├─Window_Status 顯示狀態畫面、完全規格的狀態窗口。
├─Window_SaveFile 顯示存檔以及讀檔畫面、保存文件的窗口。
├─Window_ShopNumber 商店畫面、輸入買賣數量的窗口。
├─Window_ShopStatus 商店畫面、顯示物品所持數與角色裝備的窗口。
├─Window_NameEdit 名稱輸入畫面、編輯名稱的窗口。
├─Window_NameInput 輸入名稱的畫面、文字選擇窗口。
├─Window_InputNumber 信息窗口內部使用、輸入數值的窗口。
├─Window_BattleStatus 顯示戰鬥畫面同伴狀態的窗口。
└─Window_BattleResult 戰鬥結束時、顯示獲得的 EXP 及金錢的窗口。
【其中帶(RGSS)的類指內部類,帶(Data)的類指RMXP的數據類】