查看: 1521|回复: 1

[已经解决] 还是关于状态栏背景图片的“缝隙”问题

[复制链接]
梦石
0
星屑
723
在线时间
530 小时
注册时间
2010-6-9
回帖
668
发表于 2015-8-22 10:26:26 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
经过论坛几位大神的指点,已经改善了很多,在此先由衷表示感谢,感谢指点。
以为将印象中的heightmax从412修正为416能解决问题,回来测试的时候似乎并未解决最下端问题,脚本及图片附上:请再次指点。
QQ截图20150822102735.png
[pre lang="ruby"]#encoding:utf-8
#==============================================================================
# ■ Window_Status
#------------------------------------------------------------------------------
#  状态画面中,显示角色基本信息的窗口。
#==============================================================================
class Window_Status < Window_Selectable
        #--------------------------------------------------------------------------
        # ● 初始化对象
        #--------------------------------------------------------------------------
        def initialize(actor)
                super(0, 0, 544, 416)
                @actor = actor
                refresh
                activate
    self.opacity=0
                @data = []
        end
  def standard_padding
    return 0
  end
        #--------------------------------------------------------------------------
        # ● 设置角色
        #--------------------------------------------------------------------------
        def actor=(actor)
                return if @actor == actor
                @actor = actor
                refresh
        end
        #--------------------------------------------------------------------------
        # ● 刷新
        #--------------------------------------------------------------------------
        def refresh
                contents.clear
                draw_block1   (0)
                draw_skill
        end
        #--------------------------------------------------------------------------
        # ● 绘制区域 1
        #--------------------------------------------------------------------------
        def draw_block1(y)
#~     draw_window_backg
                draw_backg
#~                 draw_actor_name(@actor, 4, y)
#~                 draw_actor_class(@actor, 128, y)
                draw_basic_info(136, y)
                draw_parameters(32, y)
                draw_xparameters
                draw_sparameters
#~                 draw_equipments(288, y)
#~                 draw_description(4, y)
        end
        #--------------------------------------------------------------------------
        # ● 绘制水平线
        #--------------------------------------------------------------------------
        def draw_horz_line(y)
                line_y = y + line_height / 2 - 1
                contents.fill_rect(0, line_y, contents_width, 2, line_color)
        end
        #--------------------------------------------------------------------------
        # ● 获取水平线的颜色
        #--------------------------------------------------------------------------
        def line_color
                color = normal_color
                color.alpha = 48
                color
        end
        #--------------------------------------------------------------------------
        # ● 绘制基本信息
        #--------------------------------------------------------------------------
        def draw_basic_info(x, y)
                w=28
                rct_w=32
                rct_h=24
                y_z=160
                x_z=0
                #~  draw_actor_icons(@actor, x, y + line_height * 1)绘制状态图标
                contents.font.size=16
#~                 draw_actor_hp(@actor, 160, 200,width= 100)
#~                 draw_actor_mp(@actor, 160, 224,width= 100)
                draw_icon(6, x_z  , y_z    , enabled = true)
                draw_icon(3, x_z+w  , y_z  , enabled = true)
                draw_icon(4, x_z+w*2  , y_z, enabled = true)
                draw_icon(8, x_z+w*3  , y_z, enabled = true)
                draw_icon(5, x_z+w*4  , y_z, enabled = true)
                draw_icon(10, x_z+w*5  , y_z, enabled = true)

    draw_text(x_z+4 ,y_z+w-8    ,rct_w,rct_h,@actor.m5_20150228_skill_point["火"])
                draw_text(x_z+w+4 ,y_z+w-8  ,rct_w,rct_h,@actor.m5_20150228_skill_point["水"])
                draw_text(x_z+w*2+4 ,y_z+w-8,rct_w,rct_h,@actor.m5_20150228_skill_point["光"])
                draw_text(x_z+w*3+4 ,y_z+w-8,rct_w,rct_h,@actor.m5_20150228_skill_point["风"])
                draw_text(x_z+w*4+4 ,y_z+w-8,rct_w,rct_h,@actor.m5_20150228_skill_point["地"])
                draw_text(x_z+w*5+4 ,y_z+w-8,rct_w,rct_h,@actor.m5_20150228_skill_point["混沌"])

                draw_text(x_z+4 ,y_z+w+4    ,rct_w,rct_h,@actor.m5_20150228_skill_point_use["火"])
                draw_text(x_z+w+4 ,y_z+w+4  ,rct_w,rct_h,@actor.m5_20150228_skill_point_use["水"])
                draw_text(x_z+w*2+4 ,y_z+w+4,rct_w,rct_h,@actor.m5_20150228_skill_point_use["光"])
                draw_text(x_z+w*3+4 ,y_z+w+4,rct_w,rct_h,@actor.m5_20150228_skill_point_use["风"])
                draw_text(x_z+w*4+4 ,y_z+w+4,rct_w,rct_h,@actor.m5_20150228_skill_point_use["地"])
                draw_text(x_z+w*5+4 ,y_z+w+4,rct_w,rct_h,@actor.m5_20150228_skill_point_use["混沌"])
        end
        #--------------------------------------------------------------------------
        # ● 绘制技能
        #--------------------------------------------------------------------------
        def draw_skill
                dx = 170; dy = 40
                contents.font.size=16
                for skill in @actor.skills
                        next if skill.nil?
                        next unless @actor.added_skill_types.include?(skill.stype_id)
                        draw_item_name(skill, dx, dy)
                        #~  dx = dx == contents.width / 2 + 16 ? 0 : contents.width / 2 + 16
                        dy += line_height #if dx == 0
                        return if dy + line_height > contents.height
                end
        end
        #--------------------------------------------------------------------------
        # ● 绘制普通能力值  
  #def mhp;  param(0);   end    # 最大HP          Maximum Hit Point
  #def mmp;  param(1);   end    # 最大MP          Maximum Magic Point
  #def atk;  param(2);   end    # 物理攻击        ATtacK power
  #def def;  param(3);   end    # 物理防御        DEFense power
  #def mat;  param(4);   end    # 魔法攻击        Magic ATtack power
  #def mdf;  param(5);   end    # 魔法防御        Magic DeFense power
  #def agi;  param(6);   end    # 敏 捷 值        AGIlity
  #def luk;  param(7);   end    # 幸 运 值        LUcK
        #--------------------------------------------------------------------------
        def draw_parameters(x, y)
                contents.font.size=18
    w=24
                rct_w=32
                rct_h=24
                y_z=210
                x_z=0
#~     draw_icon(15, x_z , y_z, enabled = true)
#~                 draw_icon(16, x_z , y_z+w, enabled = true)
#~                 draw_icon(17, x_z , y_z+w*2, enabled = true)
#~                 draw_icon(18, x_z , y_z+w*3, enabled = true)
#~                 draw_icon(19, x_z+70 , y_z, enabled = true)
#~                 draw_icon(10, x_z+70 , y_z+w, enabled = true)
#~                 draw_icon(21, x_z+70 , y_z+w*2, enabled = true)
#~     draw_icon(21, x_z+70 , y_z+w*3, enabled = true)
    draw_actor_param(@actor, x_z, y_z  , 0)
    draw_actor_param(@actor, x_z, y_z + w * 1, 1)
    draw_actor_param(@actor, x_z, y_z + w * 2, 2)
    draw_actor_param(@actor, x_z, y_z + w * 3, 3)
    draw_actor_param(@actor, 74, y_z , 4)
    draw_actor_param(@actor, 74, y_z + w * 1, 5)
    draw_actor_param(@actor, 74, y_z + w * 2, 6)
    draw_actor_param(@actor, 74, y_z + w * 3, 7)
        end
  #--------------------------------------------------------------------------
        # ● 绘制X能力值
        #--------------------------------------------------------------------------
        def draw_xparameters
                x=140
                l=18
                y=Graphics.height-l*10
                contents.font.size=16
                draw_actor_xparam(@actor, x, y+l*1,0 , "物理命中")
                draw_actor_xparam(@actor, x, y+l*2,1 , "物理闪避")
                draw_actor_xparam(@actor, x, y+l*3,2 , "会心一击")
                draw_actor_xparam(@actor, x, y+l*4,3 , "抗会心一击")
                #~  draw_actor_xparam(@actor, x, y+l*5,4 , "技能闪避")
                #~  draw_actor_xparam(@actor, x, y+l*6,5 , "技能反射")
                draw_actor_xparam(@actor, x, y+l*5,6 , "反击")
                draw_actor_xparam(@actor, x, y+l*6,7 , "生命再生")
                draw_actor_xparam(@actor, x, y+l*7,8 , "士气再生")
                #~  draw_actor_xparam(@actor, x, y+l*10,9 , "怒气增长")
        end
  #--------------------------------------------------------------------------
        # ● 绘制S能力值
        #--------------------------------------------------------------------------
        def draw_sparameters
                x=0
                l=18
                y=Graphics.height-l*7
                contents.font.size=16
                draw_actor_sparam(@actor, x, y+l*1, 1,"防御修正")
                draw_actor_sparam(@actor, x, y+l*2, 2,"恢复修正")
                draw_actor_sparam(@actor, x, y+l*3, 3,"治疗修正")
                #~  draw_actor_sparam(@actor, x, y+l*4, 4,"MP消费率")
                #~  draw_actor_sparam(@actor, x, y+l*5, 5,"TP消耗率")
                draw_actor_sparam(@actor, x, y+l*4, 6,"物抗修正")
                #~  draw_actor_sparam(@actor, x, y+l*7, 7,"魔法伤害加成")
                #~  draw_actor_sparam(@actor, x, y+l*8, 8,"地形伤害加成")
                #~  draw_actor_sparam(@actor, x, y+l*9, 9,"经验获得加成")
        end
  #--------------------------------------------------------------------------
        # ● 绘制人物背景
        #--------------------------------------------------------------------------
        def draw_backg
                actor=@actor
                actor_bg(actor.id)
        end
        def actor_bg(file_name)
                bitmap = Cache.picture("/Actor#{file_name}_Status")
                src_rect = Rect.new(0,0,544,416)
                contents.blt(0, 0, bitmap, src_rect,255)
        end
  #--------------------------------------------------------------------------
        # ● 绘制窗口背景
        #--------------------------------------------------------------------------
#~         def draw_window_backg
#~                 windowbg = Cache.picture("/windowbg")
#~                 src_rect = Rect.new(0,0,windowbg.width ,windowbg.height)
#~                 contents.blt(0, 0, windowbg, src_rect,125)
#~         end
end[/pre]

梦石
0
星屑
9716
在线时间
2775 小时
注册时间
2008-9-5
回帖
3458

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

发表于 2015-8-22 12:06:41 | 显示全部楼层
本帖最后由 cinderelmini 于 2015-8-22 19:38 编辑

想了一下。。。果然还是来传教惹……
【Sprite大法好!!】
总之就是不在Window里的contents来生成背景,而是用叠在后方的精灵,
这样就不会被窗口尺寸限制到大小之类的了,
代码如下:
点击展开/收起
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_Status
  4. #------------------------------------------------------------------------------
  5. #  状态画面中,显示角色基本信息的窗口。
  6. #==============================================================================
  7. class Window_Status < Window_Selectable
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对象
  10.   #--------------------------------------------------------------------------
  11.   def initialize(actor)
  12.     @back_sprite = Sprite.new
  13.     @back_sprite.bitmap = Bitmap.new(544, 416)
  14.     super(0, 0, 544, 416)
  15.     @actor = actor
  16.     refresh
  17.     activate
  18.     self.opacity=0
  19.     @data = []
  20.   end
  21.   
  22.   #--------------------------------------------------------------------------
  23.   # ● 释放
  24.   #--------------------------------------------------------------------------  
  25.   def dispose
  26.     super
  27.     @back_sprite.bitmap.dispose
  28.     @back_sprite.dispose
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   # ● 窗口边距
  32.   #--------------------------------------------------------------------------         
  33.   def standard_padding
  34.     return 0
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 设置角色
  38.   #--------------------------------------------------------------------------
  39.   def actor=(actor)
  40.     return if @actor == actor
  41.     @actor = actor
  42.     refresh
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   # ● 刷新
  46.   #--------------------------------------------------------------------------
  47.   def refresh
  48.     contents.clear
  49.     draw_block1(0)
  50.     draw_skill
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 绘制区域 1
  54.   #--------------------------------------------------------------------------
  55.   def draw_block1(y)
  56. #~     draw_window_backg
  57.     draw_backg
  58. #~     draw_actor_name(@actor, 4, y)
  59. #~     draw_actor_class(@actor, 128, y)
  60.     draw_basic_info(136, y)
  61.     draw_parameters(32, y)
  62.     draw_xparameters
  63.     draw_sparameters
  64. #~     draw_equipments(288, y)
  65. #~     draw_description(4, y)
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 绘制水平线
  69.   #--------------------------------------------------------------------------
  70.   def draw_horz_line(y)
  71.     line_y = y + line_height / 2 - 1
  72.     contents.fill_rect(0, line_y, contents_width, 2, line_color)
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 获取水平线的颜色
  76.   #--------------------------------------------------------------------------
  77.   def line_color
  78.     color = normal_color
  79.     color.alpha = 48
  80.     color
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 绘制基本信息
  84.   #--------------------------------------------------------------------------
  85.   def draw_basic_info(x, y)
  86.     w = 28
  87.     rct_w = 32
  88.     rct_h = 24
  89.     y_z = 160
  90.     x_z = 0
  91. #~     draw_actor_icons(@actor, x, y + line_height * 1)绘制状态图标
  92.     contents.font.size=16
  93. #~     draw_actor_hp(@actor, 160, 200,width= 100)
  94. #~     draw_actor_mp(@actor, 160, 224,width= 100)
  95.     draw_icon(6,  x_z,         y_z, enabled = true)
  96.     draw_icon(3,  x_z + w,     y_z, enabled = true)
  97.     draw_icon(4,  x_z + w * 2, y_z, enabled = true)
  98.     draw_icon(8,  x_z + w * 3, y_z, enabled = true)
  99.     draw_icon(5,  x_z + w * 4, y_z, enabled = true)
  100.     draw_icon(10, x_z + w * 5, y_z, enabled = true)
  101.    
  102.     draw_text(x_z + 4,         y_z + w - 8, rct_w, rct_h, @actor.m5_20150228_skill_point["火"])
  103.     draw_text(x_z + w + 4,     y_z + w - 8, rct_w, rct_h, @actor.m5_20150228_skill_point["水"])
  104.     draw_text(x_z + w * 2 + 4 ,y_z + w - 8, rct_w, rct_h, @actor.m5_20150228_skill_point["光"])
  105.     draw_text(x_z + w * 3 + 4 ,y_z + w - 8, rct_w, rct_h, @actor.m5_20150228_skill_point["风"])
  106.     draw_text(x_z + w * 4 + 4 ,y_z + w - 8, rct_w, rct_h, @actor.m5_20150228_skill_point["地"])
  107.     draw_text(x_z + w * 5 + 4 ,y_z + w - 8, rct_w, rct_h, @actor.m5_20150228_skill_point["混沌"])

  108.     draw_text(x_z + 4,         y_z + w + 4, rct_w, rct_h, @actor.m5_20150228_skill_point_use["火"])
  109.     draw_text(x_z + w + 4,     y_z + w + 4, rct_w, rct_h, @actor.m5_20150228_skill_point_use["水"])
  110.     draw_text(x_z + w * 2 + 4, y_z + w + 4, rct_w, rct_h, @actor.m5_20150228_skill_point_use["光"])
  111.     draw_text(x_z + w * 3 + 4, y_z + w + 4, rct_w, rct_h, @actor.m5_20150228_skill_point_use["风"])
  112.     draw_text(x_z + w * 4 + 4, y_z + w + 4, rct_w, rct_h, @actor.m5_20150228_skill_point_use["地"])
  113.     draw_text(x_z + w * 5 + 4, y_z + w + 4, rct_w, rct_h, @actor.m5_20150228_skill_point_use["混沌"])
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ● 绘制技能
  117.   #--------------------------------------------------------------------------
  118.   def draw_skill
  119.     dx = 170; dy = 40
  120.     contents.font.size=16
  121.     for skill in @actor.skills
  122.       next if skill.nil?
  123.       next unless @actor.added_skill_types.include?(skill.stype_id)
  124.       draw_item_name(skill, dx, dy)
  125. #~       dx = dx == contents.width / 2 + 16 ? 0 : contents.width / 2 + 16
  126.       dy += line_height #if dx == 0
  127.       return if dy + line_height > contents.height
  128.     end
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ● 绘制普通能力值  
  132.   #def mhp;  param(0);   end    # 最大HP          Maximum Hit Point
  133.   #def mmp;  param(1);   end    # 最大MP          Maximum Magic Point
  134.   #def atk;  param(2);   end    # 物理攻击        ATtacK power
  135.   #def def;  param(3);   end    # 物理防御        DEFense power
  136.   #def mat;  param(4);   end    # 魔法攻击        Magic ATtack power
  137.   #def mdf;  param(5);   end    # 魔法防御        Magic DeFense power
  138.   #def agi;  param(6);   end    # 敏 捷 值        AGIlity
  139.   #def luk;  param(7);   end    # 幸 运 值        LUcK
  140.   #--------------------------------------------------------------------------
  141.   def draw_parameters(x, y)
  142.     contents.font.size=18
  143.     w = 24
  144.     rct_w = 32
  145.     rct_h = 24
  146.     y_z = 210
  147.     x_z = 0
  148. #~     draw_icon(15, x_z , y_z, enabled = true)
  149. #~     draw_icon(16, x_z , y_z+w, enabled = true)
  150. #~     draw_icon(17, x_z , y_z+w*2, enabled = true)
  151. #~     draw_icon(18, x_z , y_z+w*3, enabled = true)
  152. #~     draw_icon(19, x_z+70 , y_z, enabled = true)
  153. #~     draw_icon(10, x_z+70 , y_z+w, enabled = true)
  154. #~     draw_icon(21, x_z+70 , y_z+w*2, enabled = true)
  155. #~     draw_icon(21, x_z+70 , y_z+w*3, enabled = true)
  156.     draw_actor_param(@actor, x_z, y_z,         0)
  157.     draw_actor_param(@actor, x_z, y_z + w * 1, 1)
  158.     draw_actor_param(@actor, x_z, y_z + w * 2, 2)
  159.     draw_actor_param(@actor, x_z, y_z + w * 3, 3)
  160.     draw_actor_param(@actor, 74,  y_z,         4)
  161.     draw_actor_param(@actor, 74,  y_z + w * 1, 5)
  162.     draw_actor_param(@actor, 74,  y_z + w * 2, 6)
  163.     draw_actor_param(@actor, 74,  y_z + w * 3, 7)
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ● 绘制X能力值
  167.   #--------------------------------------------------------------------------
  168.   def draw_xparameters
  169.     x = 140
  170.     l = 18
  171.     y = Graphics.height - l * 10
  172.     contents.font.size = 16
  173.     draw_actor_xparam(@actor, x, y + l * 1, 0, "物理命中")
  174.     draw_actor_xparam(@actor, x, y + l * 2, 1, "物理闪避")
  175.     draw_actor_xparam(@actor, x, y + l * 3, 2, "会心一击")
  176.     draw_actor_xparam(@actor, x, y + l * 4, 3, "抗会心一击")
  177. #~     draw_actor_xparam(@actor, x, y + l * 5, 4 , "技能闪避")
  178. #~     draw_actor_xparam(@actor, x, y + l * 6, 5 , "技能反射")
  179.     draw_actor_xparam(@actor, x, y + l * 5, 6, "反击")
  180.     draw_actor_xparam(@actor, x, y + l * 6, 7, "生命再生")
  181.     draw_actor_xparam(@actor, x, y + l * 7, 8, "士气再生")
  182. #~     draw_actor_xparam(@actor, x, y + l * 10, 9, "怒气增长")
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● 绘制S能力值
  186.   #--------------------------------------------------------------------------
  187.   def draw_sparameters
  188.     x = 0
  189.     l = 18
  190.     y = Graphics.height - l * 7
  191.     contents.font.size = 16
  192.     draw_actor_sparam(@actor, x, y + l * 1, 1, "防御修正")
  193.     draw_actor_sparam(@actor, x, y + l * 2, 2, "恢复修正")
  194.     draw_actor_sparam(@actor, x, y + l * 3, 3, "治疗修正")
  195. #~     draw_actor_sparam(@actor, x, y + l * 4, 4, "MP消费率")
  196. #~     draw_actor_sparam(@actor, x, y + l * 5, 5, "TP消耗率")
  197.     draw_actor_sparam(@actor, x, y + l * 4, 6, "物抗修正")
  198. #~     draw_actor_sparam(@actor, x, y + l * 7, 7, "魔法伤害加成")
  199. #~     draw_actor_sparam(@actor, x, y + l * 8, 8, "地形伤害加成")
  200. #~     draw_actor_sparam(@actor, x, y + l * 9, 9, "经验获得加成")
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ● 绘制人物背景
  204.   #--------------------------------------------------------------------------
  205.   def draw_backg
  206.     @back_sprite.bitmap.clear
  207.     bitmap = Cache.picture("Actor#{@actor.id}_Status")
  208.     @back_sprite.bitmap.blt(0, 0, bitmap, Rect.new(0, 0, 544, 416))
  209.   end
  210.   
  211.   #--------------------------------------------------------------------------
  212.   # ● 绘制窗口背景
  213.   #--------------------------------------------------------------------------
  214. #~   def draw_window_backg
  215. #~     windowbg = Cache.picture("/windowbg")
  216. #~     src_rect = Rect.new(0,0,windowbg.width ,windowbg.height)
  217. #~     contents.blt(0, 0, windowbg, src_rect,125)
  218. #~   end

  219.   #--------------------------------------------------------------------------
  220.   # ● 绘制能力值
  221.   #--------------------------------------------------------------------------
  222.   def draw_actor_param(actor, x, y, param_id)
  223. #~     change_color(system_color)
  224. #~     draw_text(x, y, 120, line_height, Vocab::param(param_id))
  225.     change_color(normal_color)
  226.     draw_text(x, y, 36, line_height, actor.param(param_id), 2)
  227.   end


  228. end
复制代码

替换掉你原来的就好(有必要的话请先备份一下你原来的脚本……)
PS:顺便整理了一下代码缩进之类的,简直逼死强迫症…………
PS2:顺便兼容了LZ另外一个问题(去掉各种能力值的描述蓝字,如果不需要这个功能,脚本最后一个方法去掉就好。)
PS3:不知道之前图片命名前面需要一个斜杠吗?如果找不到文件的话试试把图片名前面的斜杠去掉?或者在脚本里加回去?

点评

啊~抱歉,某个地方测试的时候加了return忘记去掉了,脚本已修正。  发表于 2015-8-22 19:38
还是先养成规范整理脚本缩进的好习惯吧?→_→  发表于 2015-8-22 12:31
感谢啊,我会借此好好学习Sprite大法的。  发表于 2015-8-22 12:29
感谢指导,我先试试。  发表于 2015-8-22 12:25
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部