赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 21341 |
最后登录 | 2023-11-29 |
在线时间 | 784 小时 |
Lv1.梦旅人 超级囧神 无尽的灌水
- 梦石
- 0
- 星屑
- 144
- 在线时间
- 784 小时
- 注册时间
- 2010-6-27
- 帖子
- 2065
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 a554187203 于 2013-8-29 16:08 编辑
崩溃了...
彻彻底底的被预设脚本打败了
我做过了几个笔记,为了彻底了解预设脚本在做什么
但是...我只想说,呵呵
下面是我写的几个笔记,我慢慢的放上来,你们随意看看(ps·因为每一次写新笔记都删除原有笔记,所以我看一段代码简直看了五十遍啊...哭)- 此笔记主要是从main开始阅读整个脚本流程
- 为了解决繁琐的跳转问题,采用逐句讲解
- 不设有说明
- 【Main】——定义结束后开始实际处理的类
- 13. $scene = Scene_Title.new ——新建了一个实例, # 生成场景对像 (标题画面)
- 15. while $scene != nil——若该全局变量不为空,则不断执行该句下方的内容 # $scene 为有效的情况下调用 main 过程
- 16. $scene.main——由于是Scene_Title的实例,于是跳转到Scene_Title类查看main方法
- 【Scene_Title】
- 11. def main ——方法main
- 13. if $BTEST ——该变量是否为空或者是nil,如果不是,则执行下方内容 # 战斗测试的情况下
- battle_test ——调用方法battle_test
- 175.def battle_test——战斗测试
- 177——189.
- $data_actors = load_data("Data/BT_Actors.rxdata") ——读取数据库内容(战斗测试用),下同
- $data_classes = load_data("Data/BT_Classes.rxdata")
- $data_skills = load_data("Data/BT_Skills.rxdata")
- $data_items = load_data("Data/BT_Items.rxdata")
- $data_weapons = load_data("Data/BT_Weapons.rxdata")
- $data_armors = load_data("Data/BT_Armors.rxdata")
- $data_enemies = load_data("Data/BT_Enemies.rxdata")
- $data_troops = load_data("Data/BT_Troops.rxdata")
- $data_states = load_data("Data/BT_States.rxdata")
- $data_animations = load_data("Data/BT_Animations.rxdata")
- $data_tilesets = load_data("Data/BT_Tilesets.rxdata")
- $data_common_events = load_data("Data/BT_CommonEvents.rxdata")
- $data_system = load_data("Data/BT_System.rxdata") ——同上
- 191. Graphics.frame_count = 0 ——是画面更新次数的计数。游戏开始时这个属性预先设定为 0 # 重置测量游戏时间用的画面计数器
- 193——203.
- $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 ——同上
- 204. $game_party.setup_battle_test_members ——跳转到所属类的方法# 设置战斗测试用同伴
- 【Game_Party】
- 41. def setup_battle_test_members—— # ● 设置战斗测试用同伴
复制代码#主处理 def main # 战斗测试的情况下 if $BTEST ——这个开关应该是内部的开关,表示战斗测试 battle_test ——执行本类的方法battle_test return end # 载入数据库 $data_actors = load_data("Data/Actors.rxdata") ——从数据库读取了变量 $data_classes = load_data("Data/Classes.rxdata") $data_skills = load_data("Data/Skills.rxdata") $data_items = load_data("Data/Items.rxdata") $data_weapons = load_data("Data/Weapons.rxdata") $data_armors = load_data("Data/Armors.rxdata") $data_enemies = load_data("Data/Enemies.rxdata") $data_troops = load_data("Data/Troops.rxdata") $data_states = load_data("Data/States.rxdata") $data_animations = load_data("Data/Animations.rxdata") $data_tilesets = load_data("Data/Tilesets.rxdata") $data_common_events = load_data("Data/CommonEvents.rxdata") $data_system = load_data("Data/System.rxdata") # 生成系统对像 $game_system = Game_System.new ——生成了一个对象,是game_system类的对象 # 生成标题图形 @sprite = Sprite.new ——生成了一个精灵的对象 @sprite.bitmap = RPG::Cache.title($data_system.title_name) ——将此精灵的bitmap属性赋值 ——$data_system.title_name是标题图像的文件名,数据来自数据库 ——rpg::cache.title是模块方法,取得标题图像 # 生成命令窗口 s1 = "新游戏" s2 = "继续" s3 = "退出" @command_window = Window_Command.new(192, [s1, s2, s3]) ——新建了一个window_command类的对象 @command_window.back_opacity = 160 ——使用该对象的方法,下两句同 @command_window.x = 320 - @command_window.width / 2 @command_window.y = 288 # 判定继续的有效性 # 存档文件一个也不存在的时候也调查 # 有効为 @continue_enabled 为 true、无效为 false @continue_enabled = false ——设置一个开关,为伪 for i in 0..3 ——循环四次 if FileTest.exist?("Save#{i+1}.rxdata") ——检测文件是否存在,存在就返回真 @continue_enabled = true ——将变量设置为真 end end # 继续为有效的情况下、光标停止在继续上 # 无效的情况下、继续的文字显示为灰色 if @continue_enabled ——若是该变量为真 @command_window.index = 1 ——设置@command_window的index = 方法,参数为1 else ——否则 @command_window.disable_item(1) ——使用该变量的disble_item(1)方法 end # 演奏标题 BGM $game_system.bgm_play($data_system.title_bgm) ——使用$game_system的方法bgm_play ——$data_system.title_bgm 是标题bgm的数据 # 停止演奏 ME、BGS Audio.me_stop ——模块方法,停止me的播放 Audio.bgs_stop ——停止bgm的播放 # 执行过渡 Graphics.transition ——执行过度 # 主循环 loop do # 刷新游戏画面 Graphics.update ——更新游戏画面,前进一帧的时间 # 刷新输入信息 Input.update ——更新输入信息,原则上一帧调用一次 # 刷新画面 update ——执行本类方法 # 如果画面被切换就中断循环 if $scene != self ——如果$scene != self break ——中断循环 end end # 装备过渡 Graphics.freeze ——准备过度 # 释放命令窗口 @command_window.dispose ——使用方法 # 释放标题图形 @sprite.bitmap.dispose ——使用方法,这里的变量时内部类精灵的对象,精灵的bitmap属性是位图,使用位图的方法,释放掉位图 @sprite.dispose ——使用方法,释放掉精灵 end
#主处理
def main
# 战斗测试的情况下
if $BTEST ——这个开关应该是内部的开关,表示战斗测试
battle_test ——执行本类的方法battle_test
return
end
# 载入数据库
$data_actors = load_data("Data/Actors.rxdata") ——从数据库读取了变量
$data_classes = load_data("Data/Classes.rxdata")
$data_skills = load_data("Data/Skills.rxdata")
$data_items = load_data("Data/Items.rxdata")
$data_weapons = load_data("Data/Weapons.rxdata")
$data_armors = load_data("Data/Armors.rxdata")
$data_enemies = load_data("Data/Enemies.rxdata")
$data_troops = load_data("Data/Troops.rxdata")
$data_states = load_data("Data/States.rxdata")
$data_animations = load_data("Data/Animations.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
$data_common_events = load_data("Data/CommonEvents.rxdata")
$data_system = load_data("Data/System.rxdata")
# 生成系统对像
$game_system = Game_System.new ——生成了一个对象,是game_system类的对象
# 生成标题图形
@sprite = Sprite.new ——生成了一个精灵的对象
@sprite.bitmap = RPG::Cache.title($data_system.title_name) ——将此精灵的bitmap属性赋值
——$data_system.title_name是标题图像的文件名,数据来自数据库
——rpg::cache.title是模块方法,取得标题图像
# 生成命令窗口
s1 = "新游戏"
s2 = "继续"
s3 = "退出"
@command_window = Window_Command.new(192, [s1, s2, s3]) ——新建了一个window_command类的对象
@command_window.back_opacity = 160 ——使用该对象的方法,下两句同
@command_window.x = 320 - @command_window.width / 2
@command_window.y = 288
# 判定继续的有效性
# 存档文件一个也不存在的时候也调查
# 有効为 @continue_enabled 为 true、无效为 false
@continue_enabled = false ——设置一个开关,为伪
for i in 0..3 ——循环四次
if FileTest.exist?("Save#{i+1}.rxdata") ——检测文件是否存在,存在就返回真
@continue_enabled = true ——将变量设置为真
end
end
# 继续为有效的情况下、光标停止在继续上
# 无效的情况下、继续的文字显示为灰色
if @continue_enabled ——若是该变量为真
@command_window.index = 1 ——设置@command_window的index = 方法,参数为1
else ——否则
@command_window.disable_item(1) ——使用该变量的disble_item(1)方法
end
# 演奏标题 BGM
$game_system.bgm_play($data_system.title_bgm) ——使用$game_system的方法bgm_play
——$data_system.title_bgm 是标题bgm的数据
# 停止演奏 ME、BGS
Audio.me_stop ——模块方法,停止me的播放
Audio.bgs_stop ——停止bgm的播放
# 执行过渡
Graphics.transition ——执行过度
# 主循环
loop do
# 刷新游戏画面
Graphics.update ——更新游戏画面,前进一帧的时间
# 刷新输入信息
Input.update ——更新输入信息,原则上一帧调用一次
# 刷新画面
update ——执行本类方法
# 如果画面被切换就中断循环
if $scene != self ——如果$scene != self
break ——中断循环
end
end
# 装备过渡
Graphics.freeze ——准备过度
# 释放命令窗口
@command_window.dispose ——使用方法
# 释放标题图形
@sprite.bitmap.dispose ——使用方法,这里的变量时内部类精灵的对象,精灵的bitmap属性是位图,使用位图的方法,释放掉位图
@sprite.dispose ——使用方法,释放掉精灵
end
借用@command_window = Window_Command.new(192, [s1, s2, s3]) 来解剖这个方法 【window_command】 def initialize(width, commands)接收了两个参数,分别是192 以及 数组 其中的 super(0, 0, width, commands.size * 32 + 32) = 0,0,192, 3 * 32 + 32 这里的size方法是获取数组的长度 转到其父类的同名方法 【1·Window_Selectable——def initialize(x, y, width, height)】 super(x,y,width,height)——接收了参数0,0,192,128 转到其父类的同名方法 【2·Window_Base—— def initialize(x, y, width, height)】 super() ——新建了一个window类的对象 @windowskin_name = $game_system.windowskin_name .windowskin_name获取了窗口皮肤图像的文件名,并把该值给了@windowskin_name @windowskin_name = 窗口皮肤图像的文件名 self.windowskin = RPG::Cache.windowskin(@windowskin_name) 这里的self是@command_window 这里的@windowskin_name是窗口皮肤的文件名 而RPG::Cache.windowskin是取得窗口皮肤图像 self.x = x self.y = y self.width = width self.height = height self.z = 100 设置@command_window的window对象的5个值xy坐标以及宽高,前四个从参数中读取,也就是0,0,192,128 【结束】 @item_max = 1 @column_max = 1 @index = -1 设置了三个实变量,并且赋值 【结束】 @item_max = commands.size @commands = commands 接下来这两个语句 让 @item_max = 3 @commands = [s1,s2,s3] 然后self.contents = Bitmap.new(width - 32, @item_max * 32)语句 让@command_window的作为窗口内容显示的位图,宽高等于192-32,3*32
借用@command_window = Window_Command.new(192, [s1, s2, s3]) 来解剖这个方法
【window_command】
def initialize(width, commands)接收了两个参数,分别是192 以及 数组
其中的
super(0, 0, width, commands.size * 32 + 32) = 0,0,192, 3 * 32 + 32
这里的size方法是获取数组的长度
转到其父类的同名方法
【1·Window_Selectable——def initialize(x, y, width, height)】
super(x,y,width,height)——接收了参数0,0,192,128
转到其父类的同名方法
【2·Window_Base—— def initialize(x, y, width, height)】
super() ——新建了一个window类的对象
@windowskin_name = $game_system.windowskin_name
.windowskin_name获取了窗口皮肤图像的文件名,并把该值给了@windowskin_name
@windowskin_name = 窗口皮肤图像的文件名
self.windowskin = RPG::Cache.windowskin(@windowskin_name)
这里的self是@command_window
这里的@windowskin_name是窗口皮肤的文件名
而RPG::Cache.windowskin是取得窗口皮肤图像
self.x = x
self.y = y
self.width = width
self.height = height
self.z = 100
设置@command_window的window对象的5个值xy坐标以及宽高,前四个从参数中读取,也就是0,0,192,128
【结束】
@item_max = 1
@column_max = 1
@index = -1
设置了三个实变量,并且赋值
【结束】
@item_max = commands.size
@commands = commands
接下来这两个语句
让
@item_max = 3
@commands = [s1,s2,s3]
然后self.contents = Bitmap.new(width - 32, @item_max * 32)语句
让@command_window的作为窗口内容显示的位图,宽高等于192-32,3*32
@command_window = Window_Command.new(192, [s1, s2, s3]) ——新建了一个类 由于是command的类,我们查看它的方法 这里是注释● 初始化对像 width : 窗口的宽 commands : 命令字符串序列 它的初始化方法 def initialize(width, commands) 等价于 def initialize(192, 【s1,s2,s3】) super(0, 0, width, commands.size * 32 + 32)等价于 0,0,192,字符串的长度也就是3 * 32+32 也就是128 转到command的父类 selectable拥有光标的移动以及滚动功能的窗口类。 不难看出,这行有两行的属性 attr_reader :index # 光标位置 attr_reader :help_window # 帮助窗口 均为可读,不可写 转到初始化方法 def initialize(x, y, width, height) super(x, y, width, height) ——这一句又把 0,0,192,128 传递给了父类base base类做了什么 def initialize(x, y, width, height) super()——执行了一遍父类window类的初始化方法 @windowskin_name = $game_system.windowskin_name 创建了一个类变量,它的内容是窗口皮肤图像的文件名 self.windowskin = RPG::Cache.windowskin(@windowskin_name) self 也就是@command_window ——我们一开始创建的对象 它的windowskin是一个存储bitmap类的属性 RPG::Cache.windowskin ——取得窗口皮肤图像 @windowskin_name的内容是窗口皮肤图像的文件名 没有了这句话,窗口就没有图像了 后面的 self.x = x x是0 self.y = y x是0 self.width = width 宽为192 self.height = height 高为128 self.z = 100 z坐标为100 x 窗口的 X 座标。 y 窗口的 Y 座标。 width 窗口的宽度。 height 窗口的高度。 z 窗口背景的 Z 座标。该值大的东西显示在上面。Z 座标相同的话,则后生成的对象显示在上面。窗口内容的 Z 座标为窗口背景的 Z 座标的值加上 2。 base类结束,转回selectable类 @item_max = 1 @column_max = 1 @index = -1 设置了三个变量 select~类结束 @item_max = commands.size 刚刚的变量被赋值为3 @commands = commands ——也就是数组[s1,s2,s3] self.contents = Bitmap.new(width - 32, @item_max * 32) 这里的两个值分别是 160 ,96 self修改父类属性contents作为窗口内容显示的位图(Bitmap)。 refresh ——执行本类的方法 现在查看refresh方法 # ● 刷新 ——它究竟做了什么呢 self.contents.clear —— bitmap方法的清除位图全体。 for i in 0...@item_max 执行多少次,这里的变量的值是3,由于...是0到值-1 所以是0到 2 draw_item(i, normal_color) 这一句话被执行了3次,i的值分别为0——2 【第一次的场合】 draw_item(i,normal_color)——先看括号里的方法,来自base类 def disabled_color return Color.new(255, 255, 255, 255) end 返回了一个颜色的类,属性分别是红、绿、蓝色值,以及透明度 现在来看draw_item的方法 # ● 描绘项目 # index : 项目编号 # color : 文字色 def draw_item(index, color) ——接受参数 ,这里是0 和color的一个类(255,255,255,255) self.contents.font.color = color ——这里contents为窗口内容,是一个位图类,位图类的属性font是字体类,字体类的颜色被更改为 color rect = Rect.new(4, 32 * index, self.contents.width - 8,32) 新建一个rect的新类 它的四个值分别是 x y 宽 高 值为 4,32 * index = 0,self.contents.width(取得位图的宽) 既是160 - 8 = 152, 32 self.contents.fill_rect(rect, Color.new(0, 0,0,0)) 以颜色填充这个矩形,不过由于四个值什么都没有,所以这句等于没有 self.contents.draw_text(rect, @commands[index]) 在矩形之中描绘字符串(文本长度若是超过,则自动缩放60%) @commands的内容是[s1,s2,s3] 此刻是0 【第一次结束】 【第2、3次请参照第一次】 refresh方法结束 self.index = 0 @command_windows开始执行index方法 ● 设置光标的位置 index : 新的光标位置 def index=(index) 此处的index 是0 @index = index = 0 if self.active and @help_window != nil .active是光标的闪烁状态 而后面的@help此刻不知道数值为nil 于是此处的if不成立,不执行,跳过 update_cursor_rect ——执行方法 if @index < 0 ——此刻的值为0,不成立,跳过 row = @index / @column_max row等于 0 / 1 ,等于 0 if row < self.top_row row等于0,top_row是sele~类的方法 返还self.oy /32 (self.oy默认为0) 0< 0为伪,这里也不执行,跳过 if row > self.top_row+ (self.page_row_max - 1) 这里的方法top返还0 后面的返还(self.height - 32) / 32 self.height 是128 ,128 - 32 = 96 /32 = 3 这里的row 是0 而后面的是 2 所以这里也不执行,跳过 # 计算光标的宽度 cursor_width = self.width / @column_max - 32 self.width是192 @column_max是1 cursor 是192 - 32 也就是 160 x = @index % @column_max * (cursor_width + 32) @index为0 对 column_max取余 为0 0乘以任何数都为0,不过还是看看括号中内容 160 +32 y = @index / @column_max * 32 - self.oy @index 是0 0除以任何数都是0 0乘以32也是0 - self.oy = 0 ps·self.oy也返还0 # 更新光标矩形 self.cursor_rect.set(x, y, cursor_width, 32) cursor_rect ——光标的矩形 .set是设置矩形属性 x值为0 y值为0 第三个值为160 最后一个值为32 此方法结束 index = 方法结束 @command = window_command.new的方法结束 整个解读完 读完这个脚本,可以大致明白,这里就是创造了一整个窗口 @command的后续处理也会在此处来说明 # ● 项目无效化 # index : 项目编号 def disable_item(index) draw_item(index, disabled_color) end 简单,把项目的名字更改为灰色
@command_window = Window_Command.new(192, [s1, s2, s3]) ——新建了一个类
由于是command的类,我们查看它的方法
这里是注释● 初始化对像
width : 窗口的宽
commands : 命令字符串序列
它的初始化方法 def initialize(width, commands) 等价于 def initialize(192, 【s1,s2,s3】)
super(0, 0, width, commands.size * 32 + 32)等价于 0,0,192,字符串的长度也就是3 * 32+32 也就是128
转到command的父类 selectable拥有光标的移动以及滚动功能的窗口类。
不难看出,这行有两行的属性
attr_reader :index # 光标位置
attr_reader :help_window # 帮助窗口
均为可读,不可写
转到初始化方法
def initialize(x, y, width, height)
super(x, y, width, height) ——这一句又把 0,0,192,128 传递给了父类base
base类做了什么
def initialize(x, y, width, height)
super()——执行了一遍父类window类的初始化方法
@windowskin_name = $game_system.windowskin_name
创建了一个类变量,它的内容是窗口皮肤图像的文件名
self.windowskin = RPG::Cache.windowskin(@windowskin_name)
self 也就是@command_window ——我们一开始创建的对象 它的windowskin是一个存储bitmap类的属性
RPG::Cache.windowskin ——取得窗口皮肤图像 @windowskin_name的内容是窗口皮肤图像的文件名
没有了这句话,窗口就没有图像了
后面的
self.x = x x是0
self.y = y x是0
self.width = width 宽为192
self.height = height 高为128
self.z = 100 z坐标为100
x
窗口的 X 座标。
y
窗口的 Y 座标。
width
窗口的宽度。
height
窗口的高度。
z
窗口背景的 Z 座标。该值大的东西显示在上面。Z 座标相同的话,则后生成的对象显示在上面。窗口内容的 Z 座标为窗口背景的 Z 座标的值加上 2。
base类结束,转回selectable类
@item_max = 1
@column_max = 1
@index = -1
设置了三个变量
select~类结束
@item_max = commands.size 刚刚的变量被赋值为3
@commands = commands ——也就是数组[s1,s2,s3]
self.contents = Bitmap.new(width - 32, @item_max * 32) 这里的两个值分别是 160 ,96
self修改父类属性contents作为窗口内容显示的位图(Bitmap)。
refresh ——执行本类的方法
现在查看refresh方法 # ● 刷新 ——它究竟做了什么呢
self.contents.clear —— bitmap方法的清除位图全体。
for i in 0...@item_max 执行多少次,这里的变量的值是3,由于...是0到值-1 所以是0到 2
draw_item(i, normal_color) 这一句话被执行了3次,i的值分别为0——2
【第一次的场合】
draw_item(i,normal_color)——先看括号里的方法,来自base类
def disabled_color
return Color.new(255, 255, 255, 255)
end
返回了一个颜色的类,属性分别是红、绿、蓝色值,以及透明度
现在来看draw_item的方法
# ● 描绘项目
# index : 项目编号
# color : 文字色
def draw_item(index, color) ——接受参数 ,这里是0 和color的一个类(255,255,255,255)
self.contents.font.color = color ——这里contents为窗口内容,是一个位图类,位图类的属性font是字体类,字体类的颜色被更改为 color
rect = Rect.new(4, 32 * index, self.contents.width - 8,32)
新建一个rect的新类 它的四个值分别是 x y 宽 高 值为 4,32 * index = 0,self.contents.width(取得位图的宽) 既是160 - 8 = 152, 32
self.contents.fill_rect(rect, Color.new(0, 0,0,0))
以颜色填充这个矩形,不过由于四个值什么都没有,所以这句等于没有
self.contents.draw_text(rect, @commands[index])
在矩形之中描绘字符串(文本长度若是超过,则自动缩放60%) @commands的内容是[s1,s2,s3] 此刻是0
【第一次结束】
【第2、3次请参照第一次】
refresh方法结束
self.index = 0 @command_windows开始执行index方法
● 设置光标的位置
index : 新的光标位置
def index=(index) 此处的index 是0
@index = index = 0
if self.active and @help_window != nil .active是光标的闪烁状态 而后面的@help此刻不知道数值为nil
于是此处的if不成立,不执行,跳过
update_cursor_rect ——执行方法
if @index < 0 ——此刻的值为0,不成立,跳过
row = @index / @column_max row等于 0 / 1 ,等于 0
if row < self.top_row row等于0,top_row是sele~类的方法 返还self.oy /32 (self.oy默认为0)
0< 0为伪,这里也不执行,跳过
if row > self.top_row+ (self.page_row_max - 1) 这里的方法top返还0 后面的返还(self.height - 32) / 32
self.height 是128 ,128 - 32 = 96 /32 = 3
这里的row 是0 而后面的是 2 所以这里也不执行,跳过
# 计算光标的宽度
cursor_width = self.width / @column_max - 32
self.width是192
@column_max是1
cursor 是192 - 32 也就是 160
x = @index % @column_max * (cursor_width + 32)
@index为0 对 column_max取余 为0 0乘以任何数都为0,不过还是看看括号中内容 160 +32
y = @index / @column_max * 32 - self.oy
@index 是0 0除以任何数都是0 0乘以32也是0 - self.oy = 0 ps·self.oy也返还0
# 更新光标矩形
self.cursor_rect.set(x, y, cursor_width, 32)
cursor_rect ——光标的矩形 .set是设置矩形属性 x值为0 y值为0 第三个值为160 最后一个值为32
此方法结束
index = 方法结束
@command = window_command.new的方法结束 整个解读完
读完这个脚本,可以大致明白,这里就是创造了一整个窗口
@command的后续处理也会在此处来说明
# ● 项目无效化
# index : 项目编号
def disable_item(index)
draw_item(index, disabled_color)
end
简单,把项目的名字更改为灰色
【Game_Temp】——临时数据 新建一个类名Game_Temp 此类有45个实变量 在新建此类的对象时,分别会赋值 【game_system】——处理系统数据 首先新建了是变量,有两个的定义方法是attr_reader只拥有取得的方法 初始化对象 27.@map_interpreter = Interpreter.new(0, true)——新建了一个Interpreter类的实例 并且该实例的@depth=0 @main=true @battle_interpreter = Interpreter.new(0, false)——同上,不过main为伪 (在Interpreter 中depth为事件的深度,而main为主标志) ( 在新建的同时,Interpreter调用了自己的方法clear,方法内容如下) @timer = 0——实变量timer为0 @timer_working = false @save_disabled = false @menu_disabled = false @message_position = 2 @message_frame = 0 @save_count = 0 @magic_number = 0 初始化对象完 43.方法bgm_play(bgm) ——演奏bgm @playing_bgm = bgm if bgm != nil and bgm.name != "" ——条件分歧,and表示只要有一个是伪,就不执行下方内容 Audio.bgm_play("Audio/BGM/" + bgm.name, bgm.volume, bgm.pitch) 播放文件夹AUDIO/BGM下方bgm的名字的文件,分别表示文件名,音量,节拍 事实上,这三个bgm是参数——按照我的设想,应该是文件的名字 else Audio.bgm_stop——停止播放bgm if完毕 Graphics.frame_reset——重设画面的更新时间。调用该方法花费时间处理后,能避免严重的跳帧现象。 end 55. def bgm_stop Audio.bgm_stop ·停止bgm end 62. def bgm_fade(time) ——bgm的淡出 @playing_bgm = nil ——将空加入变量 ,注意,此变量在前面出现过 Audio.bgm_fade(time * 1000) ——bgm的淡出,括号内单位为毫秒,一千毫秒为一秒 end 69. def bgm_memorize——记忆bgm @memorized_bgm = @playing_bgm end 75. def bgm_restore——还原bgm bgm_play(@memorized_bgm)——使用上面的bgm_play方法 end 下方的bgs几乎和上面的bgm一样,省略,都含有记忆、还原、淡出、演奏 me的演奏和bgm和bgs的演奏一样 se的演奏缺少了 Graphics.frame_reset ——意义目前未明 停止se和停止bgm一样 141. def playing_bgm——获取演奏中的bgm return @playing_bgm ——返回该变量的值 end 下方的获取bgs一样 153. def windowskin_name—— 获取窗口外观的文件名 if @windowskin_name == nil ——该变量为空则返回真 return $data_system.windowskin_name——data_system.是数据库的系统 windowskin_name是 窗口皮肤图像的文件名。 else return @windowskin_name end end 164. def windowskin_name=(windowskin_name)——设置窗口外观的文件名 @windowskin_name = windowskin_name ——应该是和上方内容联动 end 下方的战斗bgm是一样的,同样拥有设置和获取 下方的战斗结束bgm同样 204. def update——刷新页面 # 计时器减 1 if @timer_working and @timer > 0 ——变量为nil或false 为假,或者timer大于零为假 @timer -= 1 ——变量自减 end end 【Game_Switches】——获取开关的类 此类结构十分简单,所以不予说明 【Game_Variables】——处理变量的类,同上 【Game_SelfSwitches】处理独立开关的类,几乎和上面两个相同,但是是用hash表制作 要注意@data[key] == true ? true : false的阅读顺序 (@data[key] == true )? true : false 【Game_Screen】——更改色调以及画面闪烁、保存画面全体关系处理数据的类。 初始化,22、23调用了生成了tone类的实例,色彩平衡值(红绿蓝灰) 24将一个实变量设为0 25 @flash_color = Color.new(0, 0, 0, 0) 新建了一个实例 底下分别给一些实变量赋值 33. for i in 1..100 ——依次将1到100带入i @pictures.push(Game_Picture.new(i)) ——.push是将内容代入数组末尾,后面则是新建一百个实例 在Game_Picture类的初始化中,@number(图片编号)分别为1到100 end 下方都是一些赋值 47. def start_tone_change(tone, duration) ——开始更改色调 @tone_target = tone.clone —— 生成tone的拷贝?并将拷贝的内容代入变量 @tone_duration = duration ——参数代入 if @tone_duration == 0 ——如果等于0 @tone = @tone_target.clone ——拷贝一份到tone中 end end 54. def start_flash(color, duration)——开始画面闪烁 @flash_color = color.clone @flash_duration = duration end 下方开始震动的结构和上方的几乎一样 99. def update ——刷新画面 if @tone_duration >= 1 d = @tone_duration @tone.red = (@tone.red * (d - 1) + @tone_target.red) / d @tone.green = (@tone.green * (d - 1) + @tone_target.green) / d @tone.blue = (@tone.blue * (d - 1) + @tone_target.blue) / d @tone.gray = (@tone.gray * (d - 1) + @tone_target.gray) / d @tone_duration -= 1 end if @flash_duration >= 1 d = @flash_duration @flash_color.alpha = @flash_color.alpha * (d - 1) / d @flash_duration -= 1 end if @shake_duration >= 1 or @shake != 0 delta = (@shake_power * @shake_speed * @shake_direction) / 10.0 if @shake_duration <= 1 and @shake * (@shake + delta) < 0 @shake = 0 else @shake += delta end if @shake > @shake_power * 2 @shake_direction = -1 end if @shake < - @shake_power * 2 @shake_direction = 1 end if @shake_duration >= 1 @shake_duration -= 1 end end if @weather_duration >= 1 d = @weather_duration @weather_max = (@weather_max * (d - 1) + @weather_max_target) / d @weather_duration -= 1 if @weather_duration == 0 @weather_type = @weather_type_target end end if $game_temp.in_battle for i in 51..100 @pictures[i].update end else for i in 1..50 @pictures[i].update end end end
【Game_Temp】——临时数据
新建一个类名Game_Temp
此类有45个实变量
在新建此类的对象时,分别会赋值
【game_system】——处理系统数据
首先新建了是变量,有两个的定义方法是attr_reader只拥有取得的方法
初始化对象
27.@map_interpreter = Interpreter.new(0, true)——新建了一个Interpreter类的实例
并且该实例的@depth=0 @main=true
@battle_interpreter = Interpreter.new(0, false)——同上,不过main为伪
(在Interpreter 中depth为事件的深度,而main为主标志)
( 在新建的同时,Interpreter调用了自己的方法clear,方法内容如下)
@timer = 0——实变量timer为0
@timer_working = false
@save_disabled = false
@menu_disabled = false
@message_position = 2
@message_frame = 0
@save_count = 0
@magic_number = 0
初始化对象完
43.方法bgm_play(bgm) ——演奏bgm
@playing_bgm = bgm
if bgm != nil and bgm.name != "" ——条件分歧,and表示只要有一个是伪,就不执行下方内容
Audio.bgm_play("Audio/BGM/" + bgm.name, bgm.volume, bgm.pitch)
播放文件夹AUDIO/BGM下方bgm的名字的文件,分别表示文件名,音量,节拍
事实上,这三个bgm是参数——按照我的设想,应该是文件的名字
else
Audio.bgm_stop——停止播放bgm
if完毕
Graphics.frame_reset——重设画面的更新时间。调用该方法花费时间处理后,能避免严重的跳帧现象。
end
55. def bgm_stop
Audio.bgm_stop ·停止bgm
end
62. def bgm_fade(time) ——bgm的淡出
@playing_bgm = nil ——将空加入变量 ,注意,此变量在前面出现过
Audio.bgm_fade(time * 1000) ——bgm的淡出,括号内单位为毫秒,一千毫秒为一秒
end
69.
def bgm_memorize——记忆bgm
@memorized_bgm = @playing_bgm
end
75.
def bgm_restore——还原bgm
bgm_play(@memorized_bgm)——使用上面的bgm_play方法
end
下方的bgs几乎和上面的bgm一样,省略,都含有记忆、还原、淡出、演奏
me的演奏和bgm和bgs的演奏一样
se的演奏缺少了 Graphics.frame_reset ——意义目前未明
停止se和停止bgm一样
141.
def playing_bgm——获取演奏中的bgm
return @playing_bgm ——返回该变量的值
end
下方的获取bgs一样
153.
def windowskin_name——
获取窗口外观的文件名
if @windowskin_name == nil ——该变量为空则返回真
return $data_system.windowskin_name——data_system.是数据库的系统 windowskin_name是 窗口皮肤图像的文件名。
else
return @windowskin_name
end
end
164.
def windowskin_name=(windowskin_name)——设置窗口外观的文件名
@windowskin_name = windowskin_name ——应该是和上方内容联动
end
下方的战斗bgm是一样的,同样拥有设置和获取
下方的战斗结束bgm同样
204.
def update——刷新页面
# 计时器减 1
if @timer_working and @timer > 0 ——变量为nil或false 为假,或者timer大于零为假
@timer -= 1 ——变量自减
end
end
【Game_Switches】——获取开关的类
此类结构十分简单,所以不予说明
【Game_Variables】——处理变量的类,同上
【Game_SelfSwitches】处理独立开关的类,几乎和上面两个相同,但是是用hash表制作
要注意@data[key] == true ? true : false的阅读顺序
(@data[key] == true )? true : false
【Game_Screen】——更改色调以及画面闪烁、保存画面全体关系处理数据的类。
初始化,22、23调用了生成了tone类的实例,色彩平衡值(红绿蓝灰)
24将一个实变量设为0
25 @flash_color = Color.new(0, 0, 0, 0) 新建了一个实例
底下分别给一些实变量赋值
33.
for i in 1..100 ——依次将1到100带入i
@pictures.push(Game_Picture.new(i)) ——.push是将内容代入数组末尾,后面则是新建一百个实例
在Game_Picture类的初始化中,@number(图片编号)分别为1到100
end
下方都是一些赋值
47.
def start_tone_change(tone, duration) ——开始更改色调
@tone_target = tone.clone —— 生成tone的拷贝?并将拷贝的内容代入变量
@tone_duration = duration ——参数代入
if @tone_duration == 0 ——如果等于0
@tone = @tone_target.clone ——拷贝一份到tone中
end
end
54.
def start_flash(color, duration)——开始画面闪烁
@flash_color = color.clone
@flash_duration = duration
end
下方开始震动的结构和上方的几乎一样
99.
def update ——刷新画面
if @tone_duration >= 1
d = @tone_duration
@tone.red = (@tone.red * (d - 1) + @tone_target.red) / d
@tone.green = (@tone.green * (d - 1) + @tone_target.green) / d
@tone.blue = (@tone.blue * (d - 1) + @tone_target.blue) / d
@tone.gray = (@tone.gray * (d - 1) + @tone_target.gray) / d
@tone_duration -= 1
end
if @flash_duration >= 1
d = @flash_duration
@flash_color.alpha = @flash_color.alpha * (d - 1) / d
@flash_duration -= 1
end
if @shake_duration >= 1 or @shake != 0
delta = (@shake_power * @shake_speed * @shake_direction) / 10.0
if @shake_duration <= 1 and @shake * (@shake + delta) < 0
@shake = 0
else
@shake += delta
end
if @shake > @shake_power * 2
@shake_direction = -1
end
if @shake < - @shake_power * 2
@shake_direction = 1
end
if @shake_duration >= 1
@shake_duration -= 1
end
end
if @weather_duration >= 1
d = @weather_duration
@weather_max = (@weather_max * (d - 1) + @weather_max_target) / d
@weather_duration -= 1
if @weather_duration == 0
@weather_type = @weather_type_target
end
end
if $game_temp.in_battle
for i in 51..100
@pictures[i].update
end
else
for i in 1..50
@pictures[i].update
end
end
end
|
|