| 赞 | 5  | 
 
| VIP | 620 | 
 
| 好人卡 | 38 | 
 
| 积分 | 70 | 
 
| 经验 | 125468 | 
 
| 最后登录 | 2015-7-27 | 
 
| 在线时间 | 1666 小时 | 
 
 
 
 
 
Lv4.逐梦者 
	- 梦石
 - 0 
 
        - 星屑
 - 6955 
 
        - 在线时间
 - 1666 小时
 
        - 注册时间
 - 2008-10-29
 
        - 帖子
 - 6710
 
 
  
 
 | 
	
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员  
 
x
 
 本帖最后由 后知后觉 于 2009-12-7 16:51 编辑  
 
这个版本只是单纯的把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 
 
可视化选择框v1.1.rar
(681.11 KB, 下载次数: 458)
 
  
使用时候首先下载以下图: 
![]()  
命名为enemy_select_back.png放在Graphics/pictures目录下 
 
这个效果基本上在默认这种纵板的战斗板式上不太好 
 
 
  
选择框的大小是根据战斗图的尺寸来计算的 
 
 
  
现在的算法只合适默认的这种静态战斗图.全动画战斗应该也可以用 
但是不适合超级战斗方式做出来的动态战斗 
关于这一点就需要你自己动手改改了 
 
 
 
 
  
如果想要选择框的大小固定的话需要自己改数据 
如果想加大选择框的大小又不会脚本的话.可以用图片处理工具.比如Photoshop 
把战斗图的画布向4方位扩展.让可见区域和图片边缘留出透明区域多一点即可 
 
完整脚本如下:(包含猫哥哥的bitmap部分) 
- #==============================================================================
 
 - # ■ 本脚本来自 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 <= 1 or radius == nil #值的修正
 
 -     src_bitmap = self
 
 -     rect = self.rect
 
 -     
 
 -     ta_l = 1+radius*2
 
 -     ta = Table.new(ta_l,ta_l)  #过滤器 
 
  
-     for i in 0..ta_l-1
 
 -       for j in 0..ta_l-1
 
 -         ta[i,j] = 1
 
 -       end
 
 -     end
 
  
-       ta[((ta.xsize+1)/2)-1,((ta.xsize+1)/2)-1] = 2**(1+radius)
 
 -       main = ta[((ta.xsize+1)/2)-1,((ta.xsize+1)/2)-1]#找到中心点
 
  
-       nn = 2;j = ((ta.xsize+1)/2)-1;line =[]#主干道
 
 -       for i in 0..((ta.xsize+1)/2)-2
 
 -         ta[i,j] = nn
 
 -         ta[j,i] = nn
 
 -         ta[ta.xsize-1-i,j] = nn
 
 -         ta[j,ta.xsize-1-i] = nn
 
 -         line.push ta[i,((ta.xsize+1)/2)-1]
 
 -         nn = nn * 2
 
 -       end
 
 -     
 
 -     for j in 0..line.size-1
 
 -        for i in 0..((ta.xsize+1)/2)-2
 
 -         line[j] = line[j]/2
 
 -         if line[j] == 1
 
 -           break
 
 -         else
 
 -           ta[((ta.xsize+1)/2)-2-i,j] = line[j]
 
 -           ta[((ta.xsize+1)/2)+i,j] = line[j]
 
 -           ta[((ta.xsize+1)/2)-2-i,ta.xsize-1-j] = line[j]
 
 -           ta[((ta.xsize+1)/2)+i,ta.xsize-1-j] = line[j]
 
 -         end
 
 -       end
 
 -     end 
 
 -     key_a = [];key_p = main
 
 -     for i in 1..main
 
 -       if key_p == 1
 
 -         key_a.push main
 
 -         break
 
 -       else
 
 -       key_p = key_p/2
 
 -       key_a.push key_p
 
 -       end
 
 -     end
 
 -     key_k = 0
 
 -     for i in 0..key_a.size-1
 
 -       key_k = key_k + key_a[i]
 
 -     end
 
 -     key = 255/key_k
 
 -     key = 1 if key <= 0  #值的修正
 
  
-    for i in 0..ta.xsize-1
 
 -         for j in 0..ta.ysize-1
 
 -             key_main = key*ta[i,j]
 
 -             key_main = 255 if key_main > 255 ; key_main = 1 if key_main < 0  #值的修正
 
 -             self.blt(i-(((ta.xsize+1)/2)-1),j-(((ta.xsize+1)/2)-1),src_bitmap,rect,key_main)
 
 -         end
 
 -     end
 
 -   end
 
 - =begin
 
 - #-------------------------------------------------------------------------------   
 
 -     def glass_fill_rect(x, y, width, height, color1, color2,vertical = false)
 
 -       #glass_fill_rect(x坐标,y坐标,矩形宽,矩形高,颜色1,颜色2,横(竖)向填充)
 
 -       a1 = Bitmap.new(width, height);a2 = Bitmap.new(width, height)
 
 -       a1.fill_rect(x, y, width, height, color1);a2.fill_rect(x, y, width, height, color2)
 
  
-       if vertical == false
 
 -         key =255/( width - x); key = 255 if key > 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
 
 -     end
 
 - end  
 
  
- #==============================================================================
 
 - # ■ 本脚本来自 www.66rpg.com 使用或转载时请保留此信息.谢谢!
 
 - #==============================================================================
 
  
  复制代码 09-12-7更新 
    把椭圆换成了圆形 
    脚本中的一些东西换成了 alias 语句减少冲突 |   
 
 
 
 |