搜索附件  
同能RPG制作大师 附件中心 同能RM技术讨论区 RPG Maker XP 讨论区 可视化战斗选择框v1.1 09-12-7更新: d5.jpg

可视化战斗选择框v1.1 09-12-7更新: d5.jpg

 

可视化战斗选择框v1.1 09-12-7更新:
这个版本只是单纯的把VX的【可视化战斗选择框】移植过来

可视化战斗选择框作者:柳柳
http://rpg.blue/viewthread.php?tid=71904&page=1

还用到了一个模拟RGSS2 Bitmap的XPBitmap脚本
作者:猫哥哥
http://rpg.blue/viewthread.php?t ... 2D6%2D7+1%3A32%3A11

可视化战斗选择框v1.1


使用时候首先下载以下图:

命名为enemy_select_back.png放在Graphics/pictures目录下

这个效果基本上在默认这种纵板的战斗板式上不太好


选择框的大小是根据战斗图的尺寸来计算的


现在的算法只合适默认的这种静态战斗图.全动画战斗应该也可以用
但是不适合超级战斗方式做出来的动态战斗
关于这一点就需要你自己动手改改了



如果想要选择框的大小固定的话需要自己改数据
如果想加大选择框的大小又不会脚本的话.可以用图片处理工具.比如Photoshop
把战斗图的画布向4方位扩展.让可见区域和图片边缘留出透明区域多一点即可

完整脚本如下:(包含猫哥哥的bitmap部分)
  1. #==============================================================================# ■ 本脚本来自 www.66rpg.com 使用或转载时请保留此信息.谢谢!#==============================================================================#==============================================================================# ■ 可视化战斗选择框#      原作者:柳柳   (VX平台)#      移植  :后知后觉(HZHJ)#      版本  :v1.1#     使用说明:整段脚本插入到 Main 前#               Graphics/pictures 目录下有一张图片 一起拷贝到自己工程去#               切记这张图片不要改名 原来名字为 enemy_select_back.png#        这图为圆形.可以根据你的喜好改成五角星.方框.桃心等诡异形状#    本脚本还使用到 猫哥哥 的 RGSS2_bitmap_xp#    用到了里面的 clear_rect,blur,blur_r#    这个脚本的其他功能因为本脚本未使用.所以用 =begin~=end 进行了块注释#==============================================================================#==============================================================================# ■ Scene_Battle (分割定义 1)#==============================================================================class Scene_Battle  #--------------------------------------------------------------------------  # ● 刷新画面画面 (角色命令回合 : 选择敌人)  #--------------------------------------------------------------------------  alias hzhj_update_select_enemy update_phase3_enemy_select  def update_phase3_enemy_select    hzhj_update_select_enemy    if @enemy_arrow != nil and @hzhj_select_enemy != @enemy_arrow.index      @hzhj_select_enemy = @enemy_arrow.index      update_target_select_sprite($game_troop.enemies[@enemy_arrow.index])    end  end  #--------------------------------------------------------------------------  # ● 画面更新 (角色指令回合 : 选择角色)  #--------------------------------------------------------------------------  alias hzhj_update_select_actor update_phase3_actor_select  def update_phase3_actor_select    hzhj_update_select_actor    if @actor_arrow != nil and @hzhj_select_actor != @actor_arrow.index      @hzhj_select_actor = @actor_arrow.index      update_target_select_sprite($game_party.actors[@actor_arrow.index])    end  end  #--------------------------------------------------------------------------  # ● 开始选择敌人  #--------------------------------------------------------------------------  alias hzhj_start_enemy_select start_enemy_select  def start_enemy_select    hzhj_start_enemy_select    @enemy_arrow.visible = false    @target_select_sprite = Sprite.new    @target_select_sprite.z = 9999    @target_select_sprite.bitmap = Bitmap.new(640, 480)    @target_select_sprite.opacity = 160    @hzhj_select_enemy = 9999  end  #--------------------------------------------------------------------------  # ● 结束选择敌人  #--------------------------------------------------------------------------  alias hzhj_end_enemy_select end_enemy_select  def end_enemy_select    hzhj_end_enemy_select    @target_select_sprite.bitmap.dispose    @target_select_sprite.dispose    @target_select_sprite = nil    @hzhj_select_enemy = 9999  end  #--------------------------------------------------------------------------  # ● 开始选择角色  #--------------------------------------------------------------------------  alias hzhj_start_actor_select start_actor_select  def start_actor_select    hzhj_start_actor_select    @actor_arrow.visible = false    @target_select_sprite = Sprite.new    @target_select_sprite.z = 9999    @target_select_sprite.bitmap = Bitmap.new(640, 480)    @target_select_sprite.opacity = 160    @hzhj_select_actor = 9999  end  #--------------------------------------------------------------------------  # ● 结束选择角色  #--------------------------------------------------------------------------  alias hzhj_end_actor_select end_actor_select  def end_actor_select    hzhj_end_actor_select    @target_select_sprite.bitmap.dispose    @target_select_sprite.dispose    @target_select_sprite = nil    @hzhj_select_actor = 9999  end#★★★★★★★★★★★★★★★★★★★★★★★★★  #--------------------------------------------------------------------------  # ● 刷新画面 战斗可视化选择框  #--------------------------------------------------------------------------  def update_target_select_sprite(enemy)    @target_select_sprite.bitmap.clear    @target_select_sprite.bitmap.fill_rect(0, 0, 640, 480, Color.new(0, 0, 0, 255))    enemy_bmp = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue)    enemy_x = enemy.screen_x    enemy_y = enemy.screen_y    hzhj_x = enemy_x - enemy_bmp.width / 2    hzhj_y = enemy_y - enemy_bmp.height    if enemy_bmp.width < enemy_bmp.height      hzhj_wh = enemy_bmp.height      hzhj_x = hzhj_x - (enemy_bmp.height - enemy_bmp.width) / 2    elsif enemy_bmp.width > enemy_bmp.height      hzhj_wh = enemy_bmp.width      hzhj_y = hzhj_y - (enemy_bmp.width - enemy_bmp.height) / 2    else      hzhj_wh = enemy_bmp.width    end    dest_rect = Rect.new(hzhj_x,hzhj_y,hzhj_wh,hzhj_wh)    src_bitmap = RPG::Cache.picture("enemy_select_back")    src_rect = src_bitmap.rect    @target_select_sprite.bitmap.clear_rect(dest_rect)    @target_select_sprite.bitmap.stretch_blt(dest_rect, src_bitmap, src_rect)    @target_select_sprite.bitmap.blur    @target_select_sprite.bitmap.blur  end#▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲end#=============================================================================##                                                                             ##   ●RGSS2_bitmap_xp ver 1.02                                               ##                                                                             ##                                  by 猫哥哥        [email protected]     #                                                                             #                                                                            #                                                                          ##=============================================================================##                                                                             ##Logs:                                                                       ##      ※ 模拟了RGSS2的blur,gradient_fill_rect,clear_rect,并为各个方法增   ##         加了新的功能。                                                      # #      ※ 另赠送fragment_blur,fragment_bluring,blur_r,glass_fill_rect几个  ##         方法。                                                              ##      ※ 模拟RGSS2给draw_text,text_size增加了一点RGSS2的内容。              ##      ※ radial_blur不做了,嫌麻烦=_=                                        ##      ※ 优化了某个临时的bitmap没有释放的问题。                              ##      ※ 因为某些原因,应该不会再更新了。转载请保留说明内容。                ##                                                                             ##=============================================================================#class Bitmap=begin    def gradient_fill_rect(x, y, width, height, color1, color2,vertical = false,opacity = 255)       #gradient_fill_rect(x坐标,y坐标,矩形宽,矩形高,颜色1,颜色2,横(竖)填充,不透明度)      vertical == false ? step = width - x : step = height - y;color = color1;color.alpha = opacity      key_re = Math.sqrt(((color2.red - color1.red)/step)**2);key_gr = Math.sqrt(((color2.green - color1.green)/step)**2);key_bl = Math.sqrt(((color2.blue - color1.blue)/step)**2)      color2.red-color1.red>0 ? key_re=key_re : key_re= -key_re;color2.green-color1.green>0 ? key_gr=key_gr : key_gr= -key_gr;color2.blue-color1.blue>0 ? key_bl=key_bl : key_bl= -key_bl            if vertical == true         for i in y..height           self.fill_rect(x, y, width, 1, color)           y=y+1;color.red =color.red + key_re;color.green =color.green + key_gr;color.blue =color.blue + key_bl         end      else        for i in x..width           self.fill_rect(x, y, 1, height, color)           x=x+1;color.red =color.red + key_re;color.green =color.green + key_gr;color.blue =color.blue + key_bl        end    end   end#-------------------------------------------------------------------------------      def fragment_blur(radius=6)      #fragment_blur(分散半径)      src_bitmap = self;rect = self.rect;key = 255/7      self.blt(0,0,src_bitmap,rect,key*4)      self.blt(0,-radius,src_bitmap,rect,key*2)      self.blt(radius,0,src_bitmap,rect,key*2)      self.blt(-radius,0,src_bitmap,rect,key*2)      self.blt(0,radius,src_bitmap,rect,key*2)      self.blt(radius,-radius,src_bitmap,rect,key*1)      self.blt(-radius,radius,src_bitmap,rect,key*1)      self.blt(-radius,-radius,src_bitmap,rect,key*1)      self.blt(radius,radius,src_bitmap,rect,key*1)    end#-------------------------------------------------------------------------------     def fragment_bluring(blur=4,during=3)    #fragment_bluring(重做模糊次数,经历帧数)    src_bitmap = self    for i in 1..blur      src_bitmap.fragment_blur(i)      self.blt(0, 0, src_bitmap, self.rect)      for j in 1..during        Graphics.update      end          end      end=end#-------------------------------------------------------------------------------   def blur(times=1,during =1,blur=1)   #blur(重做模糊次数,经历帧数,分散半径)   for i in 1..times     blur_r(blur)     for j in 1..during       Graphics.update if i > 1 and during >1     end        end    end#-------------------------------------------------------------------------------  def blur_r(radius = 2)    #blur_r(分散半径)    radius = 1 if radius  255;key = 1 if key < 1                src_rect = Rect.new(x,y,1,height);k = x        for i in x..width          self.blt(x, y, a1, src_rect, (width-i)*key)          self.blt(x, y, a2, src_rect, (i-k)*key)          x = x+1        end      else        key =255/( height - y);key = 255 if key > 255;key = 1 if key < 1                  src_rect = Rect.new(x,y,width,1);k = y        for i in y..height          self.blt(x, y, a1, src_rect, (height-i)*key)          self.blt(x, y, a2, src_rect, (i-k)*key)          y = y+1        end      end      a1.dispose;a2.dispose    end=end#-------------------------------------------------------------------------------      def clear_rect(x, y, width, height)      #clear_rect(x坐标, y坐标, 矩形宽, 矩形高)      src_bitmap = Bitmap.new(self.width,self.height)      rect_1 = Rect.new(0,0,self.width,y);rect_2 = Rect.new(0,y,x,height)      rect_3 = Rect.new(x+width,y,self.width-(x+width),height);rect_4 = Rect.new(0,y+height,self.width,self.height-(y+height))      src_bitmap.stretch_blt(rect_1, self, rect_1);src_bitmap.stretch_blt(rect_2, self, rect_2)      src_bitmap.stretch_blt(rect_3, self, rect_3);src_bitmap.stretch_blt(rect_4, self, rect_4)      self.clear;self.blt(0,0,src_bitmap,src_bitmap.rect)      src_bitmap.dispose    end=begin#-------------------------------------------------------------------------------  #以下都是重定义的部分      alias :bsucat_text_size :text_size    def text_size(str)      if str.instance_of?(String) == false          str=str.to_s      end      bsucat_text_size(str)       end        alias :bsucat_draw_text :draw_text    def draw_text(x, y, width=0, height=0, str="", align=0)#       if x.instance_of?(Rect)       if x.is_a?(Rect)#          if y.is_a?(String) == false#            y=y.to_s#          end         bsucat_draw_text(x.x, x.y, x.width, x.height, y, align=0)          else          if str.instance_of?(String) == false            str=str.to_s          end         bsucat_draw_text(x, y, width, height, str, align=0)       end     end              alias :bsucat_glass_fill_rect :glass_fill_rect    def glass_fill_rect(x, y, width, height=false, color1=nil, color2=nil,vertical = false)           if x.instance_of?(Rect) == true             bsucat_glass_fill_rect(x.x, x.y, x.width, x.height, y, width,height)           else             bsucat_glass_fill_rect(x, y, width, height, color1, color2,vertical = false)           end               end         alias :bsucat_gradient_fill_rect :gradient_fill_rect    def gradient_fill_rect(x, y, width, height=false, color1 = 255, color2=nil,vertical = false,opacity = 255)      if x.instance_of?(Rect)        bsucat_gradient_fill_rect(x.x, x.y, x.width, x.height, y, width,height,color1)      else        bsucat_gradient_fill_rect(x, y, width, height, color1, color2,vertical = false,opacity = 255)      end    end=end    alias :bsucat_clear_rect :clear_rect    def clear_rect(x, y=nil, width=nil, height=nil)      if x.instance_of?(Rect)        bsucat_clear_rect(x.x, x.y, x.width, x.height)      else        bsucat_clear_rect(x, y, width, height)      end    endend  #==============================================================================# ■ 本脚本来自 www.66rpg.com 使用或转载时请保留此信息.谢谢!#==============================================================================复制代码
复制代码
09-12-7更新
    把椭圆换成了圆形
    脚本中的一些东西换成了 alias 语句减少冲突
            本帖来自P1论坛作者后知后觉,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=126572  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
可视化战斗选择框v1.1 09-12-7更新: d5.jpg
Loading...

QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

GMT+8, 2024-11-24 02:47 , Processed in 0.050702 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部