RMXP脚本解析(三):Game_System

目录

Game_System类代码解析

类变量表

总结


本文对上一节中生成$game_system的类Game_System进行解析。

Game_System类代码解析

#==============================================================================

# ■ Game_System

#------------------------------------------------------------------------------

#  处理系统附属数据的类。也可执行诸如 BGM 管理之类的功能。本类的实例请参考

# $game_system 。

#==============================================================================

class Game_System

    #--------------------------------------------------------------------------

    # ● 定义实例变量

    #--------------------------------------------------------------------------

    attr_reader   :map_interpreter          # 地图事件用解释程序 #只有这两个是“只读”属性

    attr_reader   :battle_interpreter       # 战斗事件用解释程序

    attr_accessor :timer                    # 计时器

    attr_accessor :timer_working            # 计时器执行中的标志

    attr_accessor :save_disabled            # 禁止存档

    attr_accessor :menu_disabled            # 禁止菜单

    attr_accessor :encounter_disabled       # 禁止遇敌

    attr_accessor :message_position         # 文章选项 显示位置

    attr_accessor :message_frame            # 文章选项 窗口外关

    attr_accessor :save_count               # 存档次数

    attr_accessor :magic_number             # 魔法编号 #这个东西在本类中只出现了一次(初始化),不知道后续会不会遇到

    #--------------------------------------------------------------------------

    # ● 初始化对像

    #--------------------------------------------------------------------------

    def initialize #初始化方法

      @map_interpreter = Interpreter.new(0, true) #Interpreter是游戏内定义的类(看着分了七个定义,那确实很长)

      @battle_interpreter = Interpreter.new(0, false)

      @timer = 0 #计时器置0

      @timer_working = false #计时器工作标志置否 

      @save_disabled = false #禁止存档标志置否

      @menu_disabled = false #禁止调出菜单标志置否

      @encounter_disabled = false #禁止遇敌标志置否

      @message_position = 2 #文章显示位置为2(正下方) 1中间 0上方

      @message_frame = 0 #窗口外观为0(显示窗口) 1不显示窗口

      @save_count = 0 #存档次数置0

      @magic_number = 0 #魔法编号置0 (目前不知道具体指的是什么)

    end

    #--------------------------------------------------------------------------

    # ● 演奏 BGM

    #     bgm : 演奏的 BGM

    #--------------------------------------------------------------------------

    def bgm_play(bgm) 

      @playing_bgm = bgm #全局变量标志正在演奏的bgm

      if bgm != nil and bgm.name != "" #要求的bgm名不为nil且其name属性也不为nil时

        Audio.bgm_play("Audio/BGM/" + bgm.name, bgm.volume, bgm.pitch) #Audio为RGSS的内部类,此方法按照Audio.bgm_play(文件名[, 音量[, 节拍(可能是速度)]]) 播放一段音乐。

      else

        Audio.bgm_stop #其他情况只终止bug

      end

      Graphics.frame_reset #Graphics为RGSS的内部类。此方法防止跳帧(猜测与RGSS更新画面的方法有关)

    end

    #--------------------------------------------------------------------------

    # ● 停止 BGM

    #--------------------------------------------------------------------------

    def bgm_stop

      Audio.bgm_stop #单纯就是停止而已啦

    end

    #--------------------------------------------------------------------------

    # ● BGM 的淡出

    #     time : 淡出时间 (秒)

    #--------------------------------------------------------------------------

    def bgm_fade(time)

      @playing_bgm = nil #因为要淡出了,播放的bgm自然置nil

      Audio.bgm_fade(time * 1000) #RGSS淡出bgm的方法

    end

    #--------------------------------------------------------------------------

    # ● 记忆 BGM

    #--------------------------------------------------------------------------

    def bgm_memorize #这个方法记住现在播放的bgm并存储到@memorized_bgm中

      @memorized_bgm = @playing_bgm

    end

    #--------------------------------------------------------------------------

    # ● 还原 BGM

    #--------------------------------------------------------------------------

    def bgm_restore #播放处于记忆中的bgm

      bgm_play(@memorized_bgm)

    end

    #--------------------------------------------------------------------------

    # ● 演奏 BGS

    #     bgs : 演奏的 BGS

    #--------------------------------------------------------------------------

    #后略,反正差不多的

    def bgs_play(bgs) 

      @playing_bgs = bgs

      if bgs != nil and bgs.name != ""

        Audio.bgs_play("Audio/BGS/" + bgs.name, bgs.volume, bgs.pitch)

      else

        Audio.bgs_stop

      end

      Graphics.frame_reset

    end

    #--------------------------------------------------------------------------

    # ● BGS 的淡出

    #     time : 淡出时间 (秒)

    #--------------------------------------------------------------------------

    def bgs_fade(time)

      @playing_bgs = nil

      Audio.bgs_fade(time * 1000)

    end

    #--------------------------------------------------------------------------

    # ● 记忆 BGS

    #--------------------------------------------------------------------------

    def bgs_memorize

      @memorized_bgs = @playing_bgs

    end

    #--------------------------------------------------------------------------

    # ● 还原 BGS

    #--------------------------------------------------------------------------

    def bgs_restore

      bgs_play(@memorized_bgs)

    end

    #--------------------------------------------------------------------------

    # ● ME 的演奏

    #     me : 演奏的 ME

    #--------------------------------------------------------------------------

    def me_play(me)

      if me != nil and me.name != ""

        Audio.me_play("Audio/ME/" + me.name, me.volume, me.pitch)

      else

        Audio.me_stop

      end

      Graphics.frame_reset

    end

    #--------------------------------------------------------------------------

    # ● SE 的演奏

    #     se : 演奏的 SE

    #--------------------------------------------------------------------------

    def se_play(se)

      if se != nil and se.name != ""

        Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)

      end

    end

    #--------------------------------------------------------------------------

    # ● 停止 SE  #SE这么短也要停??#想知道有哪位用了这个功能..

    #--------------------------------------------------------------------------

    def se_stop

      Audio.se_stop

    end

    #--------------------------------------------------------------------------

    # ● 获取演奏中 BGM

    #--------------------------------------------------------------------------

    def playing_bgm

      return @playing_bgm

    end

    #--------------------------------------------------------------------------

    # ● 获取演奏中 BGS

    #--------------------------------------------------------------------------

    def playing_bgs

      return @playing_bgs

    end

    #--------------------------------------------------------------------------

    # ● 获取窗口外观的文件名

    #--------------------------------------------------------------------------

    def windowskin_name 

      if @windowskin_name == nil #如果本类的标记为空

        return $data_system.windowskin_name #就使用文件里记载的名字

      else

        return @windowskin_name

      end #也就是说,游戏里事件的设置优先于文件里的设置

    end

    #--------------------------------------------------------------------------

    # ● 设置窗口外观的文件名

    #     windowskin_name : 新的窗口外观文件名

    #--------------------------------------------------------------------------

    def windowskin_name=(windowskin_name)

      @windowskin_name = windowskin_name

    end

    #--------------------------------------------------------------------------

    # ● 获取战斗 BGM

    #--------------------------------------------------------------------------

    def battle_bgm 

      if @battle_bgm == nil #这里的同上

        return $data_system.battle_bgm

      else

        return @battle_bgm

      end

    end

    #--------------------------------------------------------------------------

    # ● 设置战斗 BGM

    #     battle_bgm : 新的战斗 BGM

    #--------------------------------------------------------------------------

    def battle_bgm=(battle_bgm)

      @battle_bgm = battle_bgm

    end

    #--------------------------------------------------------------------------

    # ● 获取战斗结束的 BGM

    #--------------------------------------------------------------------------

    def battle_end_me

      if @battle_end_me == nil

        return $data_system.battle_end_me

      else

        return @battle_end_me

      end

    end

    #--------------------------------------------------------------------------

    # ● 设置战斗结束的 BGM

    #     battle_end_me : 新的战斗结束 BGM

    #--------------------------------------------------------------------------

    def battle_end_me=(battle_end_me)

      @battle_end_me = battle_end_me

    end

    #--------------------------------------------------------------------------

    # ● 刷新画面

    #--------------------------------------------------------------------------

    def update #系统刷新的同时,如果计时器在工作也要刷新计时器

      # 计时器减 1

      if @timer_working and @timer > 0

        @timer -= 1

      end

    end

  end

类变量表

总结

先来看看RM游戏内的事件系统截图:

这个类提供了很多给游戏内部事件系统的接口方法,并且处理了游戏属性数据与事件新定义的数据之间的取舍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值