關於部落格
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);
})();

  • 303700

    累積人氣

  • 67

    今日人氣

    0

    追蹤人氣

【腳本】定義實例變數


定義實例變數
當你要修改或是獲取已經存入在變量中的類裡面的特定的變量之時
RMXP畫面運行說明中的更新窗口部份有說過,變量右邊加【.方法名
即可執行該方法或是獲取該方法的數值,例如:
class Sword
  def sw
    @sw1 = 10
    @sw2 = 30
  end
end
$Sword = Sword.new # 將該類代入到全局變量中
p $Sword.sw
#=> 30
以上是讀取方法中變量,如果方法中存在2個變量,通常會顯示最下面的變量數值
這寫的方式都相當的麻煩又佔行數,這時可以用定義實例變數的方式一行就搞定好
以下3種方式其實可以想成是方便幫你產生方法XD
 
只可寫
attr_writer     :變量名稱
這個在預設的腳本中似乎沒有看到,定義一個只可以寫入(就是代入啦)的變量(方法XD)
但是如果嘗試讀取就會發生錯誤(真不方便...不能讀有什麼意義...)
class Sword
  attr_writer     :sw
end
$Sword = Sword.new
$Sword.sw = 10
p $Sword.sw # 發生錯誤,因為不可讀取
 
只可讀
attr_reader    :變量名稱
這個和上面的只可寫正好相反,定義一個只可以讀取的變量
相對的不能寫入這個變量...
class Sword
  attr_reader    :sw
end
$Sword = Sword.new
p $Sword.sw #=> nil
$Sword.sw = 10 # 發生錯誤,因為不可寫入
 
可寫可讀
attr_accessor :變量名稱
這個就是可寫又可讀的定義方式,要修改變量或是讀取都行
(別問我為什麼腳本都不用這個就好了,也別問我為什麼要分成3種)
class Sword
  attr_accessor :sw
end
$Sword = Sword.new
p $Sword.sw #=> nil
$Sword.sw = 10
p $Sword.sw
#=> 10
 
 
初始化物件
你用定義實例變數之後,其得到的數值都是nil(代表空的意思)
有些變量知識因該都知道,每次都要先定義一個值之後才能計算
例如你在未定義之前就進行加減乘除...之類的計算,新人往往不知道錯在哪裡
a = 0
a += 10
# 不會錯誤,變量a已經定義成0
b += 10 # 發生錯誤,變量b還未定義
說了太多無關的東西了,回正題回正題
定義實例變量會產生出值為nil的變量,其實我們可以在該類中先定義好變量
class Sword
  attr_accessor :sw1
  attr_accessor :sw2
  attr_accessor :sw3
  attr_accessor :sw4
  def initialize # 方法initialize會自動執行,不用特意呼叫
    @sw1 = 0
    @sw2 = ""
    @sw3 = []
  end
end
$Sword = Sword.new
p $Sword.sw1 #=> 0
p $Sword.sw2 #=> ""
p $Sword.sw3 #=> []
p $Sword.sw4
#=> nil
 
 
方法特性
我說過可以將定義實例變數想成是自動產生方法,因為他的呼叫方式和方法相同
(雖然實際上本人也不是很確定到底是真的產生方法還是只是有特殊功能的變量= =)
此外也一樣有由下面同名方法取代上面的同名方法的規則一樣存在,如下:
# ★範例1
class Sword
  attr_accessor :sw
  def initialize
    @sw = 0
  end
  def sw
    @sw = 50
  end
end
$Sword = Sword.new
p $Sword.sw
#=> 50
# ★範例2
class Sword
  def initialize
    @sw = 0
  end
  def sw
    @sw = 50
  end
  attr_accessor :sw
end
$Sword = Sword.new
p $Sword.sw
#=> 0
 
 
將類代入變量中
以上方式都有發現我有將該類代入一個全局變量中
但在看腳本編輯器的腳本時候卻沒看到該類中有看到這個代入動作
其實一開始「Game」開頭的腳本通常方法內的內容都沒有執行(頂多被檢查而已)
只有在我們點選「新 的 遊 戲」或是戰鬥測試之時,才會去執行那些類的方法並代入變量
看到腳本「Scene_Title」第117行(新的遊戲部份)或是第192行(戰鬥測試部份)發現:
# 產生成各種遊戲物件
$game_temp          = Game_Temp.new
$game_system        = Game_System.new
$game_switches      = Game_Switches.new
$game_variables     = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen        = Game_Screen.new
$game_actors        = Game_Actors.new
$game_party         = Game_Party.new
$game_troop         = Game_Troop.new
$game_map           = Game_Map.new
$game_player        = Game_Player.new
「讀取遊戲」就不用在使用了,在使用只是讓玩家回歸到原始的狀態而已
因為這些變量早已經代入好,並將變量存到了存檔之中了
說到原始狀態,常常看到有些人問說怎麼讓遊戲中所有獨立開關關掉之類的問題
 
 
獨立開關的初始化
基本上只要重新初始化定義獨立開關的類在觸動更新地圖即可
腳本:$game_self_switches = Game_SelfSwitches.new
獨立開關的操作:A= OFF
第1個事件(腳本)為是重新將變量$game_self_switches重代入Game_SelfSwitches.new
這樣的話所有的獨立開關都會變為OFF,但這時畫面還不會更新
例如你利用獨立開關,讓一個NPC消失(用獨立開關換到事件第2頁的方式)
這時你只用了【$game_self_switches = Game_SelfSwitches.new
雖然獨立開關已經關閉了,但是畫面未更新所以依然處於消失的狀態
這時通常都要外加開關、變數、獨立開關操作來觸動這個更新
開關、變數、獨立開關做什麼都可以,讓OFF代入OFF還是OFF一樣可以成功更新
相簿設定
標籤設定
相簿狀態