Project1

标题: 枫起的超啰嗦脚本详细注释第一弹!Windows_Base代码全注释! [打印本页]

作者: 枫起    时间: 2011-7-16 22:18
标题: 枫起的超啰嗦脚本详细注释第一弹!Windows_Base代码全注释!
本帖最后由 枫起 于 2011-7-16 23:07 编辑

原版本321行。注释后的版本总共640行- -可见该版本有多么的啰嗦- -

本版本坑了N个月后。。。终于发布了。。。当然,我水平有限,必然有很多错误,希望大家能够指出。

该教程是给新手学RGSS看的,这样有些简单的就可以不用查手册了。查手册的话也可以提高效率和记忆效率。
#CY 是我写的注释的说明,与自带的区分。
  1. #==============================================================================
  2. # ■ Window_Base
  3. #------------------------------------------------------------------------------
  4. #  游戏中全部窗口的超级类。
  5. #==============================================================================

  6. class Window_Base < Window        #定义Window_Base类为Window类的子类。
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #     x      : 窗口的 X 坐标
  10.   #     y      : 窗口的 Y 坐标
  11.   #     width  : 窗口的宽
  12.   #     height : 窗口的宽
  13.   #--------------------------------------------------------------------------
  14.   def initialize(x, y, width, height)
  15.   #CY 类Window_Base的名为initialize的方法定义。
  16.   
  17.     super()   
  18.   #CY 重载父类同名的方法。
  19.   
  20.     @windowskin_name = $game_system.windowskin_name
  21.     #CY 先调用$game_system的windowskin_name来获取定义的窗体素材,
  22.     #CY 并且赋给实变量@windowskin_name。
  23.    
  24.     self.windowskin = RPG::Cache.windowskin(@windowskin_name)
  25.     #CY 对RGSS内部模块的RPG::Cache调用windowskin方法,也就是从高速缓存中取得
  26.     #CY 窗口皮肤图像,并调用 Window 类的 windowskin= 方法来赋值。
  27.    
  28.   #CY-------------------以下都为执行他们本身,然后将值赋给它们---------------
  29.     self.x = x   
  30.     self.y = y
  31.     self.width = width
  32.     self.height = height
  33.     self.z = 100
  34.   end               
  35.   #CY 结束此次定义。
  36.   
  37.   #--------------------------------------------------------------------------
  38.   # ● 释放
  39.   #--------------------------------------------------------------------------
  40.   def dispose  
  41.    #CY 定义一个名为dispose的方法。
  42.    
  43.     if self.contents != nil
  44.    # 如果窗口的内容不是空(也就是说窗口有内容)   
  45.    #CY 执行contents这个方法本身,如果执行该方法返回的值不等于nil,则执行下一步,
  46.    #CY 否则执行父类的同名方法dispose。  
  47.    #备注:contents该方法在F1的RGSS参考——游戏库——RGSS内部类里的Window里面。
  48.    
  49.       self.contents.dispose  
  50.    #CY 如果上一步条件满足,则对contents(作为窗口内容显示的位图)
  51.    #CY 执行dispose(释放窗口)方法。
  52.    
  53.     end
  54.     super
  55.     #CY 如果不满足条件,则调用父类的同名方法dispose(释放窗口)。
  56.    
  57.   end
  58.   
  59.   #--------------------------------------------------------------------------
  60.   # ● 获取文字色
  61.   #     n : 文字色编号 (0~7)
  62.   #--------------------------------------------------------------------------
  63.   def text_color(n)     
  64.   #CY 定义一个名为text_color的方法。
  65.    
  66.     case n            
  67.   #CY 执行case循环体
  68.    
  69.     when 0            
  70.   #CY 当n=1时,执行下一句,否则继续往下对比。
  71.       
  72.       return Color.new(255, 255, 255, 255)   
  73.   #CY 返回执行建立Color的实例的值,内部数值分别是RGB和透明度。
  74.   
  75.   #CY 以下都可以依次类推。
  76.     when 1            
  77.       return Color.new(128, 128, 255, 255)
  78.     when 2
  79.       return Color.new(255, 128, 128, 255)
  80.     when 3
  81.       return Color.new(128, 255, 128, 255)
  82.     when 4
  83.       return Color.new(128, 255, 255, 255)
  84.     when 5
  85.       return Color.new(255, 128, 255, 255)
  86.     when 6
  87.       return Color.new(255, 255, 128, 255)
  88.     when 7
  89.       return Color.new(192, 192, 192, 255)
  90.     else
  91.       normal_color
  92.     end
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 获取普通文字色
  96.   #--------------------------------------------------------------------------
  97.   def normal_color           
  98.     #CY 定义一个名为normal_color的方法。
  99.    
  100.     return Color.new(255, 255, 255, 255)  
  101.   end   
  102.   #CY 可以看出。该方法的值和上面的循环体case中n=0的值相等。
  103.   #CY 等等!你没什么要问的么?真的没有?难道你不想知道Color这个类里的那四个
  104.   #CY 参数的意义么?想知道?人家现在才不会告诉你呢!继续往下看才能知道哦!
  105.   
  106.   #--------------------------------------------------------------------------
  107.   # ● 获取无效文字色
  108.   #--------------------------------------------------------------------------
  109.   def disabled_color        
  110.   #CY 定义一个名为disabled_color的方法。
  111.   
  112.     return Color.new(255, 255, 255, 128)  
  113.   #CY 需要注意的是最后一个值为128。
  114.   
  115.   end   
  116.   #CY 可以看到,三原色RGB的值都没变,最后的透明度的值约为255的一半,
  117.   #CY 所以该函数实际应用时字体相对于255的字体来说是半透明的。
  118.   
  119.   #--------------------------------------------------------------------------
  120.   # ● 获取系统文字色
  121.   #--------------------------------------------------------------------------
  122.   def system_color         
  123.   #CY 定义一个名为system_color的方法。
  124.    
  125.     return Color.new(192, 224, 255, 255)  
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # ● 获取危机文字色
  129.   #--------------------------------------------------------------------------
  130.   def crisis_color           
  131.   #CY 定义一个名为crisis_color的方法。
  132.   
  133.     return Color.new(255, 255, 64, 255)
  134.   end
  135.   #--------------------------------------------------------------------------
  136.   # ● 获取战斗不能文字色
  137.   #--------------------------------------------------------------------------
  138.   def knockout_color         
  139.   #CY 定义一个名为knockout_color的方法。
  140.   
  141.     return Color.new(255, 64, 0)   
  142.   
  143.   #CY 啊嘞嘞?为什么这个只有3个参数?
  144.    
  145.   end   
  146.   #CY 好吧,现在是福利时间,还记得上面我说的那个Color类里面参数的含义么?
  147.   #CY 现在该揭晓了,让我们一起来看看吧!你现在要做的就是翻开我们的参考书。
  148.   #CY 阿勒?参考书是什么?能不能吃?好不好吃?吃你妹啊~F1啦!!!F1!!!
  149.   #CY OK,下面大家打开RGSS参考——游戏库——RGSS内部类——Color。仔细看看吧!
  150.   #CY 注意这一句:Color.new(red, green, blue,[alpha])
  151.   #CY 生成 Color 对象。如省略 alpha 的话则默认为 255。
  152.   #CY 看到没有?也就是说第四个参数[alpha](透明度)是可以省略的,只不过省略
  153.   #CY 后Color.new(red, green, blue)等同于Color.new(red, green, blue,255)。
  154.   #CY 也就是没有透明效果了哦!

  155.   #--------------------------------------------------------------------------
  156.   # ● 刷新画面
  157.   #--------------------------------------------------------------------------
  158.   def update                 
  159.   #CY 定义一个名为update的方法。
  160.     super                    
  161.     #CY 调用父类的同名方法(update)重载。
  162.     # 如果窗口的外观被变更了、再设置
  163.    
  164.     if $game_system.windowskin_name != @windowskin_name
  165.   #CY 如果执行全局变量$game_system的windowskin_name方法的值不等于实变量
  166.   #CY @windowskin_name的值,则执行下一步。
  167.   
  168.       @windowskin_name = $game_system.windowskin_name
  169.   #CY 将执行全局变量$game_system的windowskin_name方法的值赋给实变量   
  170.   #CY @windowskin_name。
  171.   
  172.       self.windowskin = RPG::Cache.windowskin(@windowskin_name)
  173.   #CY 看不懂么?魂淡!你有没有看前面啊!!!人家写注释可是很辛苦的!!!往上
  174.   #CY 忘记了的统统给我抬头90°向上看第21行,然后嘴里默念komenasai 100遍!
  175.   #CY PS:傲娇了。。。PIA~然后就是上次写到这出了个非常杯具的事,于是我这是第
  176.   #CY 二遍写这玩意了%>_<%。   
  177.     end
  178.   end
  179.   #--------------------------------------------------------------------------
  180.   # ● 图形的描绘
  181.   #     actor : 角色
  182.   #     x     : 描画目标 X 坐标
  183.   #     y     : 描画目标 Y 坐标
  184.   #--------------------------------------------------------------------------
  185.   def draw_actor_graphic(actor, x, y)
  186.   #CY 定义名为draw_actor_graphic的方法。
  187.    
  188.     bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
  189.   #CY 对RPG::Cache模块执行名为character的方法,该方法需要2个值。这两个值分别
  190.   #CY 是对actor类使用character_name方法(角色文件名)和对actor类使用character
  191.   #CY _hue(角色色相)。取得角色图像。然后将值赋给变量bitmap。
  192.   #CY character方法的定义请看RGSS参考——游戏库——RGSS内部类的RPG::Cache模块。
  193.   #CY 现在不需要你去记忆RPG::Cache模块的内容哦,了解下即可。
  194.   
  195.     cw = bitmap.width / 4   
  196.   #CY 对变量bitmap使用width(取得位图的宽)方法,并且将值除以4,然后赋给变量cw。
  197.   #CY bitmap的方法在RGSS参考——游戏库——RGSS内部类的Bitmap里面。
  198.   
  199.     ch = bitmap.height / 4
  200.   #CY 对变量bitmap使用height(取得位图的高)方法,并且将值除以4,然后赋给变量ch。  
  201.    
  202.   src_rect = Rect.new(0, 0, cw, ch)
  203.   #CY 新建Rect的实例,内部参数为(0, 0, cw, ch),并将该实例的值赋给变量src_rect。
  204.   #CY Rect的方法在RGSS参考——游戏库——RGSS内部类的Rect里面。
  205.   #CY 神马?你问我x和y的意思?继续抬头90°看141行的注释。。。
  206.   
  207.     self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
  208.   #CY 对contents属性执行blt方法,并且执行它本身。
  209.   #CY 不懂?不动就对了!我还没给出附录呢,你怎么能懂呢!
  210.   
  211.   #CY contents属性:作为窗口内容显示的位图(Bitmap)。
  212.   
  213.   #CY blt(x, y, src_bitmap, src_rect[, opacity]) 方法:
  214.   #CY 传送 src_bitmap 的矩形 src_rect(Rect)到该位图的座标(x,y)。
  215.   #CY opacity 指定其不透明度,范围为 0 ~ 255。

  216.   #CY contents属性在RGSS参考——游戏库——RGSS内部类的Window里。
  217.   #CY blt方法在RGSS参考——游戏库——RGSS内部类的Bitmap里。
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # ● 名称的描绘
  221.   #     actor : 角色
  222.   #     x     : 描画目标 X 坐标
  223.   #     y     : 描画目标 Y 坐标
  224.   #--------------------------------------------------------------------------
  225.   def draw_actor_name(actor, x, y)  #CY 定义名为draw_actor_name的方法。
  226.     self.contents.font.color = normal_color
  227.   #CY 对contents执行font类的color(字体的颜色)属性,并将前面定义的normal_color
  228.   #CY 方法的值赋给它,并且执行它本身。
  229.     self.contents.draw_text(x, y, 120, 32, actor.name)
  230.   #CY 对contents执行Bitmap类的draw_text(在该位图的矩形或 中描绘字符串 str属性)
  231.   #CY 并执行它本身。
  232.   
  233.   #CY 将窗口的内容显示字体的颜色设定成 normal_color 返回的颜色
  234.   #CY self 表示的是窗口自己本身, 也就是 WIndow_Base 什么的

  235.   
  236.   #CY 参考:RGSS内部类的Font类和Bitmap类。
  237.   #CY PS:同样是调用不同的类的方法,为什么font类要多加个.fot呢?而Bitmap就不要?
  238.   #CY 大家可以看contents属性的后缀,注意,有个(Bitmap)。
  239. #===========================================================================
  240.   
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ● 职业的描绘
  244.   #     actor : 角色
  245.   #     x     : 描画目标 X 坐标
  246.   #     y     : 描画目标 Y 坐标
  247.   #--------------------------------------------------------------------------
  248.   def draw_actor_class(actor, x, y)   #CY 定义名为draw_actor_name的方法。
  249.    
  250.   #CY 以下参考刚才讲过的前一个例子,也就是第180行。  
  251.     self.contents.font.color = normal_color
  252.     self.contents.draw_text(x, y, 236, 32, actor.class_name)
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● 等级的描绘
  256.   #     actor : 角色
  257.   #     x     : 描画目标 X 坐标
  258.   #     y     : 描画目标 Y 坐标
  259.   #--------------------------------------------------------------------------
  260.   def draw_actor_level(actor, x, y)  #CY 定义名为draw_actor_name的方法。
  261.   #CY---------------------以下皆参考第180行----------------------------------   
  262.     self.contents.font.color = system_color
  263.     self.contents.draw_text(x, y, 32, 32, "Lv")
  264.     self.contents.font.color = normal_color
  265.     self.contents.draw_text(x + 32, y, 24, 32, actor.level.to_s, 2)
  266.   #CY 大家是否对上一行的最后一个参数2产生了疑惑呢?有的话就去查查我们的参考书
  267.   #CY 吧。也可以看下面的注释:
  268.   
  269.   #CY draw_text(x, y, width, height, str,[align])
  270.   #CY 水平方向默认为左对齐,但是当 align 指定为 1 时为居中对齐,指定为 2 时为
  271.   #CY 右对齐。垂直方向则总为居中对齐。
  272.   
  273.   #CY 看到了么?aligh的值是与对齐方法对应的哦。
  274. end

  275.   #--------------------------------------------------------------------------
  276.   # ● 生成描绘用的状态字符串
  277.   #     actor       : 角色
  278.   #     width       : 描画目标的宽度
  279.   #     need_normal : [正常] 是否为必须 (true / false)
  280.   #--------------------------------------------------------------------------
  281.   def make_battler_state_text(battler, width, need_normal)
  282.   #CY 定义名为make_battler_state_text的方法。
  283.   
  284.   # 获取括号的宽
  285.     brackets_width = self.contents.text_size("[]").width
  286.   #CY 先执行contents(作为窗口内容显示的位图),再对其调用text_size方法(取得
  287.   #CY 以draw_text方法描绘字符串 str 的矩形(Rect)。但是,不包含斜体的部分。)
  288.   #CY 然后再对其使用Rect类的width(矩形的宽度)方法,然后再执行它本身,最后再
  289.   #CY 把值赋给变量brackets_width。
  290.   
  291.     # 生成状态名字符串
  292.     text = ""            
  293.     #CY 初始化text变量等于一个空的字符串。
  294.    
  295.     for i in battler.states   
  296.   #CY 先计算表达式battler(battler为函数形参).states,然后针对该对象的每个单
  297.   #CY 元,执行for循环。
  298.   
  299.       if $data_states[i].rating >= 1   
  300.   #CY 如果对全局变量$data_states[i]调用名为rating的方法。如果值大于等于1,则执
  301.   #CY 行下一句。
  302.   #CY 注释:rating为取得优先级。
  303.   
  304.         if text == ""   
  305.   #CY 如果text的值等于空的字符串。则执行下一句。
  306.   
  307.           text = $data_states[i].name
  308.   #CY 对全局变量$data_states [i]调用name方法,并且把值赋给变量text。  
  309.   
  310.         else
  311.   #CY 否则,执行下列语句(即$data_stares[i].rating的值小于1)。
  312.   
  313.           new_text = text + "/" + $data_states[i].name
  314.   #CY 将变量text的值加上字符串“/”加上对$data_stares[i]执行name方法的值,
  315.   #CY 最后赋值给new_text。
  316.   
  317.           text_width = self.contents.text_size(new_text).width
  318.   #CY 执行contents它本身,对其执行text_size(new_text),再对其执行width,然后
  319.   #CY 赋值给变量text_width。
  320.   
  321.           if text_width > width - brackets_width
  322.   #CY 如果text_width的值大于变量width(形参)减去变量brackets_width的值。
  323.   
  324.             break
  325.   #CY 跳出循环。
  326.           end
  327.           text = new_text
  328.   #CY 将new_text的值赋给text。
  329.         end
  330.       end
  331.     end
  332.    
  333.     # 状态名空的字符串是 "[正常]" 的情况下
  334.     if text == ""
  335.   #CY 如果text的值为nil(""相当于没有字符串)
  336.   
  337.       if need_normal
  338.   #CY 如果need_normal(形参)的值不为false或者nil的话则执行下一个语句。
  339.   
  340.         text = "[正常]"
  341.   #CY 将字符串[正常]赋值给text。
  342.   
  343.       end
  344.     else
  345.       # 加上括号
  346.       text = "[" + text + "]"
  347.   #CY 将字符串“[”加上变量text的值再加上“]”赋值给text。
  348.   
  349.     end
  350.     # 返回完成后的文字类
  351.     return text
  352.   #CY 返回text的值
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # ● 描绘状态
  356.   #     actor : 角色
  357.   #     x     : 描画目标 X 坐标
  358.   #     y     : 描画目标 Y 坐标
  359.   #     width : 描画目标的宽
  360.   #--------------------------------------------------------------------------
  361.   def draw_actor_state(actor, x, y, width = 120)
  362.   #CY 定义一个名为draw_actor_state的方法。分别有形参actor,x,y,width(赋初
  363.   #CY 值等于120)。
  364.   
  365.     text = make_battler_state_text(actor, width, true)
  366.   #CY 将方法make_battler_state_text的值赋给变量text。
  367.    
  368.     self.contents.font.color = actor.hp == 0 ? knockout_color : normal_color
  369.   #CY 执行contents本身,然后对其使用font,再对其使用color,最后把actor.hp的值
  370.   #CY 赋值给它。
  371.   
  372.   #CY 对actor使用hp方法,如果值等于0的话,则执行knockout_color(战斗不能的颜色)
  373.   #CY  。否则执行normal_color(普通战斗的颜色)。
  374.   
  375.     self.contents.draw_text(x, y, width, 32, text)
  376.   #CY 执行contents它本身,再对其执行draw_text(在contents位图显示字符串text。
  377.   #CY 高度指定为32。
  378.   
  379.   end
  380.   #--------------------------------------------------------------------------
  381.   # ● 描绘 EXP
  382.   #     actor : 角色
  383.   #     x     : 描画目标 X 坐标
  384.   #     y     : 描画目标 Y 坐标
  385.   #--------------------------------------------------------------------------
  386.   def draw_actor_exp(actor, x, y)
  387.   #CY 定义名为draw_actor_exp的方法。
  388.   
  389.     self.contents.font.color = system_color
  390.   #CY 执行contents本身,然后对其使用font,再对其使用color,最后把system_color
  391.   #CY 的值赋值给它。
  392.   
  393.     self.contents.draw_text(x, y, 24, 32, "E")
  394.   #CY 执行contents它本身,再对其执行draw_text(在contents位图显示字符串E。
  395.   #CY 宽度指定为24,宽度指定为32。
  396.   
  397.     self.contents.font.color = normal_color
  398.   #CY 执行contents本身,然后对其使用font,再对其使用color,最后把normal_color
  399.   #CY 的值赋值给它。
  400.   
  401.     self.contents.draw_text(x + 24, y, 84, 32, actor.exp_s, 2)
  402.   #CY 执行contents它本身,再对其执行draw_text(在x的基础上加24,宽度指定为84,
  403.   #CY 高度指定为32。对actor执行exp_s(获取经验值)。对齐方式为右对齐。
  404.   #CY 注:exp_s在脚本的Game_Actor中。
  405.   
  406.     self.contents.draw_text(x + 108, y, 12, 32, "/", 1)
  407.   #CY 执行contents它本身,再对其执行draw_text(在x的基础上加108,宽度指定为12,
  408.   #CY 高度指定为32。显示字符串“/”。对齐方式为居中对齐。
  409.   
  410.     self.contents.draw_text(x + 120, y, 84, 32, actor.next_exp_s)
  411.   #CY 执行contents它本身,再对其执行draw_text(在x的基础上加120,宽度指定为84,
  412.   #CY 高度指定为32。显示字符串“/”。对齐方式为默认(左对齐)。
  413.   
  414.   end
  415.   #--------------------------------------------------------------------------
  416.   # ● 描绘 HP
  417.   #     actor : 角色
  418.   #     x     : 描画目标 X 坐标
  419.   #     y     : 描画目标 Y 坐标
  420.   #     width : 描画目标的宽
  421.   #--------------------------------------------------------------------------
  422.   def draw_actor_hp(actor, x, y, width = 144)
  423.   #CY 定义名为draw_actor_hp的方法
  424.   
  425.     # 描绘字符串 "HP"
  426.     self.contents.font.color = system_color
  427.   #CY 执行contents本身,然后对其使用font,再对其使用color,最后把system_color
  428.   #CY 的值赋值给它。   
  429.    
  430.     self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)
  431.   #CY 执行contents它本身,再对其执行draw_text(宽度指定为84,高度指定为32。
  432.   #CY 显示的字符串的值为对全局变量$data_system使用words(游戏术语)再对其使用
  433.   #CY hp(取得血量)。
  434.    
  435.     # 计算描绘 MaxHP 所需的空间
  436.     if width - 32 >= 108
  437.   #CY 如果width减去32大于等于108,则执行下一句。
  438.   
  439.       hp_x = x + width - 108
  440.   #CY 将x加上width的值减去108的值赋给hp_x。  
  441.       flag = true
  442.   #CY 将true赋值给flag。
  443.   
  444.     elsif width - 32 >= 48
  445.       hp_x = x + width - 48
  446.       flag = false
  447.   #CY 同上一步。   
  448.   
  449.     end

  450.     # 描绘 HP
  451.     self.contents.font.color = actor.hp == 0 ? knockout_color :
  452.       actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
  453.   #CY 执行contents本身,然后对其执行font再对其执行color,最后将对actor执行hp的
  454.   #CY 值赋给它。如果该表达式的值等于0的话,则该表达式为knockout_color,否者则为
  455.   #CY actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color这一步的值。
  456.   
  457.   #CY actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color解读:
  458.   #CY 如果对actor使用maxhp然后再除以4的值大于对actor使用hp的值的话,则该表达式
  459.   #CY 等于crisis_color否则则为normal_color。
  460.   
  461.     self.contents.draw_text(hp_x, y, 48, 32, actor.hp.to_s, 2)
  462.   #CY 执行contents它本身,再对其执行draw_text(宽度指定为48,高度指定为32。
  463.   #CY 对actor执行hp(获取血量)再对其执行to_s(转换为字符串并且输出)。
  464.   #CY 对齐方式为右对齐。
  465.    
  466.     # 描绘 MaxHP
  467.     if flag
  468.   #CY 如果flag不等于false或者nil,则执行下一步。
  469.   
  470.       self.contents.font.color = normal_color
  471.   #CY 执行contents本身,然后对其使用font,再对其使用color,最后把normal_color
  472.   #CY 的值赋值给它。      
  473.       
  474.       self.contents.draw_text(hp_x + 48, y, 12, 32, "/", 1)
  475.   #CY 执行contents它本身,再对其执行draw_text(在hp_x的基础上加48,宽度指定为12
  476.   #CY ,高度指定为32。显示字符串“/”。对齐方式为居中对齐。      
  477.       
  478.       self.contents.draw_text(hp_x + 60, y, 48, 32, actor.maxhp.to_s)
  479.   #CY 执行contents它本身,再对其执行draw_text(在hp_x的基础上加60,宽度指定为48
  480.   #CY ,高度指定为32。对actor执行maxhp(获取HP最大值)再对其执行to_s(将对象转
  481.   #CY   换为字符串并且输出)
  482.   #CY 注释:maxhp:在脚本Game_Battler 1中定义。
  483.       
  484.     end
  485.    
  486.   end
  487.   #--------------------------------------------------------------------------
  488.   # ● 描绘 SP
  489.   #     actor : 角色
  490.   #     x     : 描画目标 X 坐标
  491.   #     y     : 描画目标 Y 坐标
  492.   #     width : 描画目标的宽
  493.   #--------------------------------------------------------------------------
  494.   def draw_actor_sp(actor, x, y, width = 144)
  495.   #CY 定义名为draw_actor_sp的方法。
  496.   
  497.     # 描绘字符串 "SP"
  498.     self.contents.font.color = system_color
  499.   #CY 执行contents本身,然后对其使用font,再对其使用color,最后把system_color
  500.   #CY 的值赋值给它。        
  501.    
  502.     self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)
  503.   #CY 执行contents它本身,再对其执行draw_text(宽度指定为32,高度指定为32。
  504.   #CY 显示的字符串的值为对全局变量$data_system使用words(游戏术语)再对其使用
  505.   #CY sp(取得sp(魔法值))。
  506.   
  507.   #CY ---------------------------以下类似上面定义的HP-------------------------
  508.   
  509.     # 计算描绘 MaxSP 所需的空间
  510.     if width - 32 >= 108
  511.       sp_x = x + width - 108
  512.       flag = true
  513.     elsif width - 32 >= 48
  514.       sp_x = x + width - 48
  515.       flag = false
  516.     end
  517.    
  518.     # 描绘 SP
  519.     self.contents.font.color = actor.sp == 0 ? knockout_color :
  520.       actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
  521.     self.contents.draw_text(sp_x, y, 48, 32, actor.sp.to_s, 2)
  522.     # 描绘 MaxSP
  523.     if flag
  524.       self.contents.font.color = normal_color
  525.       self.contents.draw_text(sp_x + 48, y, 12, 32, "/", 1)
  526.       self.contents.draw_text(sp_x + 60, y, 48, 32, actor.maxsp.to_s)
  527.     end
  528.   end
  529.   #--------------------------------------------------------------------------
  530.   # ● 描绘能力值
  531.   #     actor : 角色
  532.   #     x     : 描画目标 X 坐标
  533.   #     y     : 描画目标 Y 坐标
  534.   #     type  : 能力值种类 (0~6)
  535.   #--------------------------------------------------------------------------
  536.   def draw_actor_parameter(actor, x, y, type)
  537.   #CY 定义名为draw_actor_parameter的方法。
  538.   
  539.     case type
  540.   #CY 执行case语句。判断值为type。
  541.   
  542.     when 0
  543.   #CY 如果type等于0。
  544.   
  545.       parameter_name = $data_system.words.atk
  546.   #CY 对全局变量$data_system执行words(游戏用语)的atk(攻击力)属性。然后赋值
  547.   #CY 给parameter_name。
  548.   
  549.       parameter_value = actor.atk
  550.   #CY 对actor执行atk(攻击力),然后赋值给parameter_value
  551.   
  552.   #CY -------------------------------以下同上--------------------------------
  553.       when 1
  554.       parameter_name = $data_system.words.pdef
  555.   #CY pdef(物理防御)
  556.       parameter_value = actor.pdef
  557.     when 2
  558.       parameter_name = $data_system.words.mdef
  559.   #CY mdef(魔法防御)
  560.       parameter_value = actor.mdef
  561.     when 3
  562.       parameter_name = $data_system.words.str
  563.   #CY str(力量)
  564.       parameter_value = actor.str
  565.     when 4
  566.       parameter_name = $data_system.words.dex
  567.   #CY dex(灵巧)
  568.       parameter_value = actor.dex
  569.     when 5
  570.       parameter_name = $data_system.words.agi
  571.   #CY agi(速度)   
  572.       parameter_value = actor.agi
  573.     when 6
  574.       parameter_name = $data_system.words.int
  575.   #CY int(魔力)
  576.       parameter_value = actor.int
  577.     end
  578.    
  579.     self.contents.font.color = system_color
  580.   #CY 执行contents本身,然后对其执行font,再对其执行color。最后把system_color的
  581.   #CY 值赋给它。
  582.    
  583.     self.contents.draw_text(x, y, 120, 32, parameter_name)
  584.   #CY 执行contents本身,然后对其执行draw_text(宽度指定为120,高度指定为32。对
  585.   #CY 齐方式默认左对齐。
  586.   
  587.     self.contents.font.color = normal_color
  588.   #CY 执行contents本身,然后对其执行font,再对其执行color。最后把normal_color的
  589.   #CY 值赋给它。
  590.   
  591.     self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)
  592.   #CY 执行contents本身,然后对其执行draw_text(x坐标的值在给定的基础上加120。宽
  593.   #CY 度指定为36,高度指定为32。对齐方式为右对齐。
  594.   #CY to_s为将对象转换为字符串并且返回该字符串。
  595.   
  596.   end
  597.   #--------------------------------------------------------------------------
  598.   # ● 描绘物品名
  599.   #     item : 物品
  600.   #     x    : 描画目标 X 坐标
  601.   #     y    : 描画目标 Y 坐标
  602.   #--------------------------------------------------------------------------
  603.   def draw_item_name(item, x, y)
  604.   #CY 定义名为draw_item_name的方法
  605.     if item == nil
  606.   #CY 如果item的值等于nil。
  607.   
  608.       return
  609.     end
  610.    
  611.     bitmap = RPG::Cache.icon(item.icon_name)
  612.   #CY 执行RPG::Cache.icon。取得图标的图像(形参为对item执行icon_name(取得图标
  613.   #CY 图像名称)。并且将值赋给bitmap。
  614.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
  615.   #CY 执行contents本身,然后对contents执行blt。
  616.   
  617.   #CY ---------------------------------注释-----------------------------------
  618.   #CY blt(x, y, src_bitmap, src_rect[, opacity])
  619.   #CY 传送 src_bitmap 的矩形 src_rect(Rect)到该位图的座标(x,y)。
  620.   #CY opacity 指定其不透明度,范围为 0 ~ 255。
  621.   
  622.   #CY  Rect.new(x, y, width, height)
  623.   #CY 生成 Rect 对象。


  624.   #CY ---------------------------------注释-----------------------------------

  625.     self.contents.font.color = normal_color
  626.   #CY 执行contents本身,然后对其执行font,再对其执行color。最后把normal_color的
  627.   #CY 值赋给它。
  628.     self.contents.draw_text(x + 28, y, 212, 32, item.name)
  629.   #CY 执行contents本身,在对其执行draw_text方法。
  630.   end
  631. end
复制代码

作者: 后知后觉    时间: 2011-7-17 00:09
我还以为你已经放弃了...
作者: 枫起    时间: 2011-7-17 06:30
后知后觉 发表于 2011-7-17 00:09
我还以为你已经放弃了...

坑了很久- -但是不会放弃的- -
作者: 八宝粥先生    时间: 2011-7-17 08:53
老天。。。。。。。。。。
作者: 仲秋启明    时间: 2011-7-17 10:21
枫起也开始方便新手了吗?
作者: 夕阳武士    时间: 2011-7-17 12:16
嗯,我理想中的F1就是这样的
作者: Wind2010    时间: 2011-7-17 13:25
本帖最后由 Wind2010 于 2011-7-17 13:26 编辑

Bug:
316行的注释应该是
  1. # 即text不为空
复制代码
吧?


340行的""不等于nil吧- -
作者: 忧雪の伤    时间: 2011-7-17 13:32
本帖最后由 忧雪の伤 于 2011-7-17 17:34 编辑

奇怪的是为什么从Window_Base开始呢……
其实我更感觉应该从简单的Scene_Title开始。


枫起,其实是不是应该给super后面为什么加个()解释下,毕竟挺重要,传递参数啊。
作者: 枫起    时间: 2011-7-17 17:34
Wind2010 发表于 2011-7-17 13:25
Bug:
316行的注释应该是吧?


那里不是if == “”么?==是等于的意思吧?不等于不是!=么?
作者: qq175908660    时间: 2011-8-5 16:41
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1