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

  • 307163

    累積人氣

  • 12

    今日人氣

    0

    追蹤人氣

RMXP畫面運行說明

我先簡單的製作1個畫面的腳本(效果為中間出現1個長條窗口,按確定鍵回地圖)
class Sword
  def main
    @help_window = Window_Help.new
    @help_window.y = 200
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @help_window.dispose
  end
  def update
    @help_window.update
    if Input.trigger?(Input::C)
      $scene = Scene_Map.new
    end
  end
end
 
【end:結束】
從end先介紹是怕有人搞混,由於類、方法、條件、循環...等等都是用end來結束
很容易讓人搞混哪個end是結束哪個,通常最新的需要加end最先判定結束
我這樣說可能說不清楚,看圖吧...感覺很像是事件排列的感覺相似!!

 
【class:類】
首先先看第1行的【class Sword】,這個是類...
簡單來說就是幫被class到end包圍著的腳本取個名字
舉例來說,當老師叫某人擦黑板時,你必須先叫那個人的名字那同學才會有回應
換成是腳本,就是某個腳本叫那個類的名字,這個類才也會執行(好爛的舉例...)
呼叫腳本的方式為【$scene = 類的名稱.new】,所以如果想要執行上面的那個腳本
則腳本就要用【$scene = Sword.new】才會呼叫到以上那個腳本
當其他腳本存在同名的類時,同名的類裡面的內容都可以共同使用!!
如以下:(左邊的設置2個同名的類,實際上和右邊的設置沒什麼差別)
class Sword
  def cofft
  end
end
class Sword
  def koiin
  end
end
class Sword
  def cofft
  end
  def koiin
  end
end
 
【def:函數(方法)】
簡單來說,就是在類裡面在將def到end包圍的內容取個名字呼叫用
通常當你呼叫類的時候,通常系統預設會執行【def initialize】裡面的內容
但是由於腳本「Main」的影響,也會自動執行【def main】裡面的內容
腳本「Main」的事情以後再說...,還有其他方法名稱的呼叫法等一下再說
當方法名一樣的時候,放在比較下面的方法會取代放在上面的方法
class Sword
  def main #此方法不會執行
  end
  def main
  end
end
 
【產生窗口】
第3行發現【@help_window = Window_Help.new】,仔細看會發現...
和切換畫面【$scene = 類的名稱.new】一樣,是變量代入類中
變量開頭為@表示實變量,這個變量可以在其他的方法(def)中互相使用
變量名稱可以自定,不過要修改那個窗口或是關掉那個窗口都必須使用該名稱的變量
@help_window = Window_Help.new】為變量@help_window代入Window_Help.new
就這樣產生了1個窗口了(腳本Window_Help為說明窗口,就是最上面長長的那條)
下面的【@help_window.y = 200】為變更該變量中的窗口的Y座標的意思...
 
【Graphics.transition:執行漸變(過渡)】
和事件的 執行漸變 一樣,當執行準備漸變的時候,則畫面將會固定不動
此時你執行的內容都不會被看到,只會看到固定的畫面而已
除非你使用執行漸變,畫面才會開始行動,通常這是用來隱藏一些處理用的
可見在到第5行之前的內容都是準備漸變的狀態中,原因等一下在說明...
 
【loop do:循環】
被loop do到end裡面的內容將會不斷被執行,和事件中的循環的效果一樣
除非你用【break】來中斷循環,不然會不停止的執行下去
仔細看會發現,他循環的內容為:
Graphics.update
Input.update
update
if $scene != self
  break
end
 
【Graphics.update:更新畫面】
是更新畫面的意思,並前進1幀的時間(40幀約為1秒)
如果這腳本沒執行,10秒之後會關閉遊戲,由此發現,我們一進入遊戲開始
就隨時都在用【Graphics.update】在更新畫面
 
【Input.update:更新輸入訊息】
是更新你目前按了什麼按鍵之用,可以想像成是事件 按鍵輸入的處理
 
【update】
其實硬要說,【update】本身沒有什麼特別的功能...
如果你看過基本變量教學的話,你會發現這個可以算是單純的變量!!
但在變量尚未被代入任何東西以前,他就具有呼叫方法的功能
所以【update】會去執行【def update】的內容,好像是在呼叫名稱update的公共事件
但只能呼叫這個類的方法,如果是同名的類,也是可以呼叫同名的類的方法的
把update方法的內容取代此【update】腳本的內容其實也說的通:
class Sword
  def main
    @help_window = Window_Help.new
    @help_window.y = 200
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      @help_window.update
      if Input.trigger?(Input::C)
        $scene = Scene_Map.new
      end
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @status_window.dispose
  end
end
 
【if:條件分歧】
和事件中的條件分歧的效果一樣,當滿足指定條件的時候
執行被if到end包圍住的內容,不符合條件就不會執行if裡面的內容
if $scene != self】裡面的【$scene
在上面的內容已經得知為切換畫面時所需要的變量($scene = 類的名稱.new)
而【!=】為不相等的意思,而【self】可以說是此類本身
所以【if $scene != self】的意思為 條件分歧:當變量$scene不是本類時執行
也就是說當你使用【$scene = 類的名稱.new】來切換窗口的時候
就會符合條件分歧所需的條件而執行條件分歧裡面的內容
而條件分歧執行的內容請看到下面的【break:中斷循環】(好沒意義XD)
 
【break:中斷循環】
這個是剛剛介紹的條件分歧內,符合條件時執行的內容
中斷循環通常用在循環裡面,負責結束掉循環而使用
從上面的【loop do:循環】到這裡你會發現,當我們停留在1個畫面中
不管是站著不動、走路...等等事情,遊戲一直停留在這循環中不斷執行
不斷的更新畫面、不斷的確認目前按下的按鍵、不斷的呼叫update方法
只有當我們切換畫面之時,他才換結束循環開始往下繼續執行
 
【Graphics.freeze:準備漸變(過渡)】
從這裡開始為當中斷循環之時才會執行到的內容
我在上面的【Graphics.transition:執行漸變(過渡)】說過...
在前5行之前的狀態都是準備漸變的狀態,這裡就是原因
在這裡準備漸變,讓畫面固定,防止看到關掉窗口、切換畫面、產生窗口的情況
畫面將會固定到執行了執行漸變為止
 
【變量.dispose:關閉窗口(釋放窗口)】
就是將變量裡的窗口關閉掉,所以【@help_window.dispose】會關閉掉說明窗口
你產生1個窗口,這裡也要加1個專門關閉那個窗口的指令
不然切換畫面時會發現那個窗口還出現在畫面上的可笑狀況
 
main方法就這樣執行完畢了,接著看到update方法

 
【def update】
這就不詳細說明了,上面的【def:方法】部分就已經解釋過了
這個方法是透過第9行的【update】而執行的
 
【變量.update:更新窗口】
和上面的介紹的【變量.dispose:關閉窗口(釋放窗口)】用法一樣
效果大概是...更新窗口指標閃爍的效果...,用於更新有指標的東西(如:選項)
除非你在該窗口的腳本上外加方法update(可參考Window_PlayTime遊戲時間窗口腳本)
不然無指標可說是可有可無的腳本,我怕有人會被我上一行的內容搞混,所以在解釋一下
要呼叫窗口裡面的方法,不是用最上面的腳本第9行的【update】來呼叫的
而是利用此腳本來呼叫的,首先變量代入類產生窗口之後
後面加上【.方法名】,則就會執行變量中的那個類中指定的方法名
 
【if Input.trigger?(Input::C)】
if】在上面已經介紹過了,是條件分歧的意思
而右邊的【Input.trigger?(Input::C)】為當按下C鍵的場合時執行的意思
(遊戲中的C鍵為鍵盤中的空白、C、Enter鍵)
 
【$scene = Scene_Map.new】
這個因該不用解釋了吧,就是切換畫面了,這時變量$scene就受到改變了
由於update方法已經執行完畢,又回到第9行下面開始往下執行
這時當然就是先經過第10行的【if $scene != self】判斷變量$scene是否有被改過嘍~
 
【腳本移動路線參考圖】
 
 
【Main】
你一打開遊戲時,遊戲將會從最上面的腳本讀取到最後1個腳本,通常不會回頭或重頭
所以你在「Main」之前的腳本,找個空白處(不再類裡面即可)輸入【p "測試"
則會跑出測試2字的小窗口
(這時腳本讀取就會停留在這邊,不會讀到Main腳本)
由於不會在回頭或重新執行,所以這個測試小窗口只會顯示1次而已
當所有腳本讀取完之時,遊戲就會關閉!!但是為何我們遊戲沒被關閉呢?!
其實和上面介紹的畫面循環相當的相似,也就是說...
我們開始遊戲之後,就停留在腳本「Main」中的循環之中不斷的在執行
由於不斷的在循環,自然就不會在具續往下執行,遊戲也就不會關閉

#=============================================
# ■ Main
#------------------------------------------------------------------------------
#  各定義結束後、從這裡開始實際處理。
#=============================================

begin
  # 準備過渡
  # 設定系統預設字型

  Font.default_name = (["標楷體"])
  Graphics.freeze
  # 產生場景物件 (標題畫面)
  $scene = Scene_Title.new
  # $scene 為有效的情況下呼叫 main 過程
  while $scene != nil
    $scene.main
  end
  # 淡入淡出
  Graphics.transition(20)
rescue Errno::ENOENT
  # 補充 Errno::ENOENT 以外的錯誤
  # 無法開啟檔案的情況下、顯示訊息後結束

  filename = $!.message.sub("No such file or directory - ", "")
  print("沒有發現檔案 #{filename}。 ")
end

腳本第7行的【begin】、第20行的【rescue】、第25行的【end】有點類似條件分歧
只不過是專門捕捉錯誤的條件分歧,【begin】大概為無錯的場合
rescue】為當發生指定的錯誤名稱時的場合,【end】就不用介紹了吧...
第10行的【Font.default_name = (["標楷體"])】設定遊戲的字體
第11行的【Graphics.freeze】為準備漸變,原因...看了上面的畫面介紹因該了解了...
第13行的【$scene = Scene_Title.new】為切換標題畫面
第15行的【while $scene != nil】為當變量$scene不是nil的時候不斷執行
第16行的【$scene.main】這個和上面介紹的【變量.update:更新窗口】原理相同
就是呼叫變量$scene裡面存入的類的main方法(這就是自動執行main方法的原因)
我們開始玩遊戲的時候,就代表系統一直在執行【$scene.main
第19行的【Graphics.transition(20)】只是畫面變暗的效果而已,循環結束才會執行到
所以當我們使用【$scene = nil】,將變量$scene代入nil
第15行的循環因為條件不符合而自動中斷循環,開始執行第19行,讓畫面持續暗
然後腳本執行完了之後,就關閉了遊戲

相簿設定
標籤設定
相簿狀態