注册会员 登录
Project1 返回首页

j433463的个人空间 https://rpg.blue/?312267 [收藏] [复制] [分享] [RSS]

日志

修改小筆記 Part.6

热度 2已有 752 次阅读2013-2-18 18:26

1. 跳過標題菜單的腳本修改

 這次要改的是一個國外找到的腳本,這腳本是我見過最短的跳過標題頁腳本,用來做事件標題菜單或者乾脆直接進游戲都可以,它並不是真的略過默認 Scene_Title 腳本,而是簡化到一個極致,自動進入地圖 MAP001,當開啟 RMVA 後雖然執行了標題頁,但因為沒有看到那些選單窗口,也沒有背景之類,是一片黑色,所以會感覺好像跳過了標題頁直接進入游戲地圖。

 但是它有一個問題,就是作者刪減太過頭了,以至於開啟游戲後要進入標題頁再進入地圖一,這之間有一個淡入淡出浪費了些許時間,所以感覺上一片黑的時間比較久,我們就是不要浪費這一段時間,所以就要修改。

 原本的跳過標題畫面腳本如下:

#==============================================================================
# Skip Title Screen                                           JV Master Script
#------------------------------------------------------------------------------
# Skip Title Screen, going to first game map.
#==============================================================================

#==============================================================================
# Scene Title
#==============================================================================
class Scene_Title < Scene_Base
  def start
    SceneManager.clear
    Graphics.freeze
    DataManager.setup_new_game
    $game_map.autoplay
    SceneManager.goto(Scene_Map)
  end

  def terminate
    SceneManager.snapshot_for_background
    Graphics.fadeout(Graphics.frame_rate)
  end
end
#==============================================================================

 令人驚訝的簡短,那要怎麼改,很簡單,原本的 Scene_Title 有個調整轉場漸變時間的設置:

  def transition_speed
    return 20
  end

 我們把這一段加到 def terminate 的上面位置,然後,把 20 改成 1,只要 1 幀的時間。

2. 禁止隊伍第一位角色在菜單的整隊(formation)選項中被替換位置

 如果製作遊戲時,不想要被人把領隊換了,該怎麼辦?我知道已經有現成的腳本,但現在我要做的是直接在默認腳本上進行修改。

 現成的腳本,其實是用一個 alias 把原有的方法繼承別名後,重新定義方法,判斷 pending_index 是不是第一位,如果是就發出選擇無效的音效,然後重新選擇,如果不是,才去執行原來的方法,最常被動到的方法就是 Scene_Menu 腳本的on_formation_ok 或是 Window_MenuStatus 的 process_ok 了,在國內 66rpg 中流傳的是前者,而國外常用的則是後者。

 不過,其實它們都只是在菜單上下工夫,禁止隊伍中的第一位在整隊選項被選擇,真正要完全避免,可以改 Game_Party 中的 swap_order 方法,它的功用就是交換角色順序,原來的方法如下:

  #--------------------------------------------------------------------------
  # ● 交換順序
  #--------------------------------------------------------------------------
  def swap_order(index1, index2)
    @actors[index1], @actors[index2] = @actors[index2], @actors[index1]
    $game_player.refresh
  end

 給它兩個參數,也就是選好的兩個角色位置值,它就進行順序對換,並且刷新隊伍。

 那要怎麼改呢?很簡單,就是最前面加上幾行,如下:

  #--------------------------------------------------------------------------
  # ● 交換順序
  #--------------------------------------------------------------------------
  def swap_order(index1, index2)
    if index1 == 0 or index2 == 0
      Sound.play_buzzer
      return
    end
    @actors[index1], @actors[index2] = @actors[index2], @actors[index1]
    $game_player.refresh
  end

 判斷兩個參數中有沒有一個是選中領隊的,如果有就發出選擇無效的音效,然後跳出方法。

 不過,這樣做雖然保障了領隊不會被交換,但在菜單上的整隊選擇時有可能出現光標不正常消失的現象,所以也可以在菜單上做這個功能,類似現有的腳本,我同樣針對 Scene_Menu 的 on_formation_ok 下手吧,不過既然是直接修改默認腳本了,當然不可能用什麼 alias 別名的方式,我只是在最前面加一段判別,原本的 on_formation_ok 內容如下:

  #--------------------------------------------------------------------------
  # ● 整隊“確定”
  #--------------------------------------------------------------------------
  def on_formation_ok
    if @status_window.pending_index >= 0
      $game_party.swap_order(@status_window.index,
                             @status_window.pending_index)
      @status_window.pending_index = -1
      @status_window.redraw_item(@status_window.index)
    else
      @status_window.pending_index = @status_window.index
    end
    @status_window.activate
  end

 修改後的內容如下:

  #--------------------------------------------------------------------------
  # ● 整隊“確定”
  #--------------------------------------------------------------------------
  def on_formation_ok
    if @status_window.index == 0
      Sound.play_buzzer
      @status_window.pending_index = -1
      @status_window.activate
      return
    end
    if @status_window.pending_index >= 0
      $game_party.swap_order(@status_window.index,
                             @status_window.pending_index)
      @status_window.pending_index = -1
      @status_window.redraw_item(@status_window.index)
    else
      @status_window.pending_index = @status_window.index
    end
    @status_window.activate
  end

 修改的內容中,先判斷整隊選擇的位置值 @status_window.index 是不是選了第一位,由於 index 是從零起算,所以第一位的 index 值是 0,不是 1,當確認 index 等於 0 時,就發出選擇無效的音效,然後取消這一次的選擇。

 當然,也可以把 Game_Party 的 swap_order 與 Scene_Menu 的 on_formation_ok 兩處都修改,那就萬無一失了,除非遇到角色倉庫之類把主角退出隊伍再重新加入,不然的話,整隊想要換掉主角的位置是不會起作用了。


鸡蛋

鲜花

刚表态过的朋友 (0 人)

评论 (0 个评论)

facelist doodle 涂鸦笔

您需要登录后才可以评论 登录 | 注册会员

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-26 12:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

返回顶部