设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3964|回复: 8
打印 上一主题 下一主题

[原创发布] 可视化战斗选择框v1.1 09-12-7更新

 关闭 [复制链接]

Lv4.逐梦者

梦石
0
星屑
6855
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

跳转到指定楼层
1
发表于 2009-6-7 10:14:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

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部分)

  1. #==============================================================================
  2. # ■ 本脚本来自 www.66rpg.com 使用或转载时请保留此信息.谢谢!
  3. #==============================================================================

  4. #==============================================================================
  5. # ■ 可视化战斗选择框
  6. #      原作者:柳柳   (VX平台)
  7. #      移植  :后知后觉(HZHJ)
  8. #      版本  :v1.1
  9. #     使用说明:整段脚本插入到 Main 前
  10. #               Graphics/pictures 目录下有一张图片 一起拷贝到自己工程去
  11. #               切记这张图片不要改名 原来名字为 enemy_select_back.png
  12. #        这图为圆形.可以根据你的喜好改成五角星.方框.桃心等诡异形状
  13. #    本脚本还使用到 猫哥哥 的 RGSS2_bitmap_xp
  14. #    用到了里面的 clear_rect,blur,blur_r
  15. #    这个脚本的其他功能因为本脚本未使用.所以用 =begin~=end 进行了块注释
  16. #==============================================================================

  17. #==============================================================================
  18. # ■ Scene_Battle (分割定义 1)
  19. #==============================================================================
  20. class Scene_Battle
  21.   #--------------------------------------------------------------------------
  22.   # ● 刷新画面画面 (角色命令回合 : 选择敌人)
  23.   #--------------------------------------------------------------------------
  24.   alias hzhj_update_select_enemy update_phase3_enemy_select
  25.   def update_phase3_enemy_select
  26.     hzhj_update_select_enemy
  27.     if @enemy_arrow != nil and @hzhj_select_enemy != @enemy_arrow.index
  28.       @hzhj_select_enemy = @enemy_arrow.index
  29.       update_target_select_sprite($game_troop.enemies[@enemy_arrow.index])
  30.     end
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 画面更新 (角色指令回合 : 选择角色)
  34.   #--------------------------------------------------------------------------
  35.   alias hzhj_update_select_actor update_phase3_actor_select
  36.   def update_phase3_actor_select
  37.     hzhj_update_select_actor
  38.     if @actor_arrow != nil and @hzhj_select_actor != @actor_arrow.index
  39.       @hzhj_select_actor = @actor_arrow.index
  40.       update_target_select_sprite($game_party.actors[@actor_arrow.index])
  41.     end
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● 开始选择敌人
  45.   #--------------------------------------------------------------------------
  46.   alias hzhj_start_enemy_select start_enemy_select
  47.   def start_enemy_select
  48.     hzhj_start_enemy_select
  49.     @enemy_arrow.visible = false
  50.     @target_select_sprite = Sprite.new
  51.     @target_select_sprite.z = 9999
  52.     @target_select_sprite.bitmap = Bitmap.new(640, 480)
  53.     @target_select_sprite.opacity = 160
  54.     @hzhj_select_enemy = 9999
  55.   end
  56.   #--------------------------------------------------------------------------
  57.   # ● 结束选择敌人
  58.   #--------------------------------------------------------------------------
  59.   alias hzhj_end_enemy_select end_enemy_select
  60.   def end_enemy_select
  61.     hzhj_end_enemy_select
  62.     @target_select_sprite.bitmap.dispose
  63.     @target_select_sprite.dispose
  64.     @target_select_sprite = nil
  65.     @hzhj_select_enemy = 9999
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 开始选择角色
  69.   #--------------------------------------------------------------------------
  70.   alias hzhj_start_actor_select start_actor_select
  71.   def start_actor_select
  72.     hzhj_start_actor_select
  73.     @actor_arrow.visible = false
  74.     @target_select_sprite = Sprite.new
  75.     @target_select_sprite.z = 9999
  76.     @target_select_sprite.bitmap = Bitmap.new(640, 480)
  77.     @target_select_sprite.opacity = 160
  78.     @hzhj_select_actor = 9999
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 结束选择角色
  82.   #--------------------------------------------------------------------------
  83.   alias hzhj_end_actor_select end_actor_select
  84.   def end_actor_select
  85.     hzhj_end_actor_select
  86.     @target_select_sprite.bitmap.dispose
  87.     @target_select_sprite.dispose
  88.     @target_select_sprite = nil
  89.     @hzhj_select_actor = 9999
  90.   end
  91. #★★★★★★★★★★★★★★★★★★★★★★★★★
  92.   #--------------------------------------------------------------------------
  93.   # ● 刷新画面 战斗可视化选择框
  94.   #--------------------------------------------------------------------------
  95.   def update_target_select_sprite(enemy)
  96.     @target_select_sprite.bitmap.clear
  97.     @target_select_sprite.bitmap.fill_rect(0, 0, 640, 480, Color.new(0, 0, 0, 255))
  98.     enemy_bmp = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue)
  99.     enemy_x = enemy.screen_x
  100.     enemy_y = enemy.screen_y
  101.     hzhj_x = enemy_x - enemy_bmp.width / 2
  102.     hzhj_y = enemy_y - enemy_bmp.height
  103.     if enemy_bmp.width < enemy_bmp.height
  104.       hzhj_wh = enemy_bmp.height
  105.       hzhj_x = hzhj_x - (enemy_bmp.height - enemy_bmp.width) / 2
  106.     elsif enemy_bmp.width > enemy_bmp.height
  107.       hzhj_wh = enemy_bmp.width
  108.       hzhj_y = hzhj_y - (enemy_bmp.width - enemy_bmp.height) / 2
  109.     else
  110.       hzhj_wh = enemy_bmp.width
  111.     end
  112.     dest_rect = Rect.new(hzhj_x,hzhj_y,hzhj_wh,hzhj_wh)
  113.     src_bitmap = RPG::Cache.picture("enemy_select_back")
  114.     src_rect = src_bitmap.rect
  115.     @target_select_sprite.bitmap.clear_rect(dest_rect)
  116.     @target_select_sprite.bitmap.stretch_blt(dest_rect, src_bitmap, src_rect)
  117.     @target_select_sprite.bitmap.blur
  118.     @target_select_sprite.bitmap.blur
  119.   end
  120. #▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  121. end
  122. #=============================================================================#
  123. #                                                                             #
  124. #   ●RGSS2_bitmap_xp ver 1.02                                               #
  125. #                                                                             #
  126. #                                  by 猫哥哥        [email protected]     #                                                                             #                                                                            #                                                                          #
  127. #=============================================================================#
  128. #                                                                             #
  129. #Logs:                                                                       #
  130. #      ※ 模拟了RGSS2的blur,gradient_fill_rect,clear_rect,并为各个方法增   #
  131. #         加了新的功能。                                                      #
  132. #      ※ 另赠送fragment_blur,fragment_bluring,blur_r,glass_fill_rect几个  #
  133. #         方法。                                                              #
  134. #      ※ 模拟RGSS2给draw_text,text_size增加了一点RGSS2的内容。              #
  135. #      ※ radial_blur不做了,嫌麻烦=_=                                        #
  136. #      ※ 优化了某个临时的bitmap没有释放的问题。                              #
  137. #      ※ 因为某些原因,应该不会再更新了。转载请保留说明内容。                #
  138. #                                                                             #
  139. #=============================================================================#
  140. class Bitmap
  141. =begin
  142.     def gradient_fill_rect(x, y, width, height, color1, color2,vertical = false,opacity = 255)
  143.        #gradient_fill_rect(x坐标,y坐标,矩形宽,矩形高,颜色1,颜色2,横(竖)填充,不透明度)
  144.       vertical == false ? step = width - x : step = height - y;color = color1;color.alpha = opacity
  145.       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)
  146.       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
  147.       
  148.       if vertical == true
  149.          for i in y..height
  150.            self.fill_rect(x, y, width, 1, color)
  151.            y=y+1;color.red =color.red + key_re;color.green =color.green + key_gr;color.blue =color.blue + key_bl
  152.          end
  153.       else
  154.         for i in x..width
  155.            self.fill_rect(x, y, 1, height, color)
  156.            x=x+1;color.red =color.red + key_re;color.green =color.green + key_gr;color.blue =color.blue + key_bl
  157.         end
  158.     end
  159.    end
  160. #-------------------------------------------------------------------------------  
  161.     def fragment_blur(radius=6)
  162.       #fragment_blur(分散半径)
  163.       src_bitmap = self;rect = self.rect;key = 255/7
  164.       self.blt(0,0,src_bitmap,rect,key*4)
  165.       self.blt(0,-radius,src_bitmap,rect,key*2)
  166.       self.blt(radius,0,src_bitmap,rect,key*2)
  167.       self.blt(-radius,0,src_bitmap,rect,key*2)
  168.       self.blt(0,radius,src_bitmap,rect,key*2)
  169.       self.blt(radius,-radius,src_bitmap,rect,key*1)
  170.       self.blt(-radius,radius,src_bitmap,rect,key*1)
  171.       self.blt(-radius,-radius,src_bitmap,rect,key*1)
  172.       self.blt(radius,radius,src_bitmap,rect,key*1)
  173.     end
  174. #-------------------------------------------------------------------------------   
  175.   def fragment_bluring(blur=4,during=3)
  176.     #fragment_bluring(重做模糊次数,经历帧数)
  177.     src_bitmap = self
  178.     for i in 1..blur
  179.       src_bitmap.fragment_blur(i)
  180.       self.blt(0, 0, src_bitmap, self.rect)
  181.       for j in 1..during
  182.         Graphics.update
  183.       end      
  184.     end
  185.    
  186.   end
  187. =end
  188. #-------------------------------------------------------------------------------  
  189. def blur(times=1,during =1,blur=1)
  190.    #blur(重做模糊次数,经历帧数,分散半径)
  191.    for i in 1..times
  192.      blur_r(blur)
  193.      for j in 1..during
  194.        Graphics.update if i > 1 and during >1
  195.      end     
  196.    end   
  197. end
  198. #-------------------------------------------------------------------------------
  199. def blur_r(radius = 2)
  200.     #blur_r(分散半径)
  201.     radius = 1 if radius <= 1 or radius == nil #值的修正
  202.     src_bitmap = self
  203.     rect = self.rect
  204.    
  205.     ta_l = 1+radius*2
  206.     ta = Table.new(ta_l,ta_l)  #过滤器

  207.     for i in 0..ta_l-1
  208.       for j in 0..ta_l-1
  209.         ta[i,j] = 1
  210.       end
  211.     end

  212.       ta[((ta.xsize+1)/2)-1,((ta.xsize+1)/2)-1] = 2**(1+radius)
  213.       main = ta[((ta.xsize+1)/2)-1,((ta.xsize+1)/2)-1]#找到中心点

  214.       nn = 2;j = ((ta.xsize+1)/2)-1;line =[]#主干道
  215.       for i in 0..((ta.xsize+1)/2)-2
  216.         ta[i,j] = nn
  217.         ta[j,i] = nn
  218.         ta[ta.xsize-1-i,j] = nn
  219.         ta[j,ta.xsize-1-i] = nn
  220.         line.push ta[i,((ta.xsize+1)/2)-1]
  221.         nn = nn * 2
  222.       end
  223.    
  224.     for j in 0..line.size-1
  225.        for i in 0..((ta.xsize+1)/2)-2
  226.         line[j] = line[j]/2
  227.         if line[j] == 1
  228.           break
  229.         else
  230.           ta[((ta.xsize+1)/2)-2-i,j] = line[j]
  231.           ta[((ta.xsize+1)/2)+i,j] = line[j]
  232.           ta[((ta.xsize+1)/2)-2-i,ta.xsize-1-j] = line[j]
  233.           ta[((ta.xsize+1)/2)+i,ta.xsize-1-j] = line[j]
  234.         end
  235.       end
  236.     end
  237.     key_a = [];key_p = main
  238.     for i in 1..main
  239.       if key_p == 1
  240.         key_a.push main
  241.         break
  242.       else
  243.       key_p = key_p/2
  244.       key_a.push key_p
  245.       end
  246.     end
  247.     key_k = 0
  248.     for i in 0..key_a.size-1
  249.       key_k = key_k + key_a[i]
  250.     end
  251.     key = 255/key_k
  252.     key = 1 if key <= 0  #值的修正

  253.    for i in 0..ta.xsize-1
  254.         for j in 0..ta.ysize-1
  255.             key_main = key*ta[i,j]
  256.             key_main = 255 if key_main > 255 ; key_main = 1 if key_main < 0  #值的修正
  257.             self.blt(i-(((ta.xsize+1)/2)-1),j-(((ta.xsize+1)/2)-1),src_bitmap,rect,key_main)
  258.         end
  259.     end
  260.   end
  261. =begin
  262. #-------------------------------------------------------------------------------   
  263.     def glass_fill_rect(x, y, width, height, color1, color2,vertical = false)
  264.       #glass_fill_rect(x坐标,y坐标,矩形宽,矩形高,颜色1,颜色2,横(竖)向填充)
  265.       a1 = Bitmap.new(width, height);a2 = Bitmap.new(width, height)
  266.       a1.fill_rect(x, y, width, height, color1);a2.fill_rect(x, y, width, height, color2)

  267.       if vertical == false
  268.         key =255/( width - x); key = 255 if key > 255;key = 1 if key < 1
  269.         
  270.         src_rect = Rect.new(x,y,1,height);k = x
  271.         for i in x..width
  272.           self.blt(x, y, a1, src_rect, (width-i)*key)
  273.           self.blt(x, y, a2, src_rect, (i-k)*key)
  274.           x = x+1
  275.         end
  276.       else
  277.         key =255/( height - y);key = 255 if key > 255;key = 1 if key < 1
  278.         
  279.           src_rect = Rect.new(x,y,width,1);k = y
  280.         for i in y..height
  281.           self.blt(x, y, a1, src_rect, (height-i)*key)
  282.           self.blt(x, y, a2, src_rect, (i-k)*key)
  283.           y = y+1
  284.         end
  285.       end
  286.       a1.dispose;a2.dispose
  287.     end
  288. =end
  289. #-------------------------------------------------------------------------------  
  290.     def clear_rect(x, y, width, height)
  291.       #clear_rect(x坐标, y坐标, 矩形宽, 矩形高)
  292.       src_bitmap = Bitmap.new(self.width,self.height)
  293.       rect_1 = Rect.new(0,0,self.width,y);rect_2 = Rect.new(0,y,x,height)
  294.       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))
  295.       src_bitmap.stretch_blt(rect_1, self, rect_1);src_bitmap.stretch_blt(rect_2, self, rect_2)
  296.       src_bitmap.stretch_blt(rect_3, self, rect_3);src_bitmap.stretch_blt(rect_4, self, rect_4)
  297.       self.clear;self.blt(0,0,src_bitmap,src_bitmap.rect)
  298.       src_bitmap.dispose
  299.     end
  300. =begin
  301. #-------------------------------------------------------------------------------
  302. #以下都是重定义的部分  
  303.     alias :bsucat_text_size :text_size
  304.     def text_size(str)
  305.       if str.instance_of?(String) == false
  306.           str=str.to_s
  307.       end
  308.       bsucat_text_size(str)   
  309.     end
  310.    
  311.     alias :bsucat_draw_text :draw_text
  312.     def draw_text(x, y, width=0, height=0, str="", align=0)
  313. #       if x.instance_of?(Rect)
  314.        if x.is_a?(Rect)
  315. #          if y.is_a?(String) == false
  316. #            y=y.to_s
  317. #          end
  318.          bsucat_draw_text(x.x, x.y, x.width, x.height, y, align=0)   
  319.        else
  320.           if str.instance_of?(String) == false
  321.             str=str.to_s
  322.           end
  323.          bsucat_draw_text(x, y, width, height, str, align=0)
  324.        end
  325.      end
  326.      
  327.      
  328.     alias :bsucat_glass_fill_rect :glass_fill_rect
  329.     def glass_fill_rect(x, y, width, height=false, color1=nil, color2=nil,vertical = false)
  330.            if x.instance_of?(Rect) == true
  331.              bsucat_glass_fill_rect(x.x, x.y, x.width, x.height, y, width,height)
  332.            else
  333.              bsucat_glass_fill_rect(x, y, width, height, color1, color2,vertical = false)
  334.            end           
  335.     end
  336.      
  337.     alias :bsucat_gradient_fill_rect :gradient_fill_rect
  338.     def gradient_fill_rect(x, y, width, height=false, color1 = 255, color2=nil,vertical = false,opacity = 255)
  339.       if x.instance_of?(Rect)
  340.         bsucat_gradient_fill_rect(x.x, x.y, x.width, x.height, y, width,height,color1)
  341.       else
  342.         bsucat_gradient_fill_rect(x, y, width, height, color1, color2,vertical = false,opacity = 255)
  343.       end
  344.     end
  345. =end
  346.     alias :bsucat_clear_rect :clear_rect
  347.     def clear_rect(x, y=nil, width=nil, height=nil)
  348.       if x.instance_of?(Rect)
  349.         bsucat_clear_rect(x.x, x.y, x.width, x.height)
  350.       else
  351.         bsucat_clear_rect(x, y, width, height)
  352.       end
  353.     end
  354. end  

  355. #==============================================================================
  356. # ■ 本脚本来自 www.66rpg.com 使用或转载时请保留此信息.谢谢!
  357. #==============================================================================

复制代码
09-12-7更新
    把椭圆换成了圆形
    脚本中的一些东西换成了 alias 语句减少冲突











你知道得太多了

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3299
在线时间
3619 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

2
发表于 2009-6-7 21:00:43 | 只看该作者
感觉效果怪怪的……
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-12-20
帖子
258
3
发表于 2009-6-7 21:03:31 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6855
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

4
 楼主| 发表于 2009-6-7 21:27:11 | 只看该作者
我也觉得不好 改成圆圈再改大些估计会好点

那个算法我现在看着还有点头晕- -!











你知道得太多了

回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-12-20
帖子
258
5
发表于 2009-6-7 23:01:46 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6855
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

6
 楼主| 发表于 2009-6-8 01:24:52 | 只看该作者
那个只需要把角色的Z弄搞就会角色全部不会变暗了











你知道得太多了

回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-12-20
帖子
258
7
发表于 2009-6-8 02:04:41 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6855
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

8
 楼主| 发表于 2009-6-8 02:16:36 | 只看该作者
本帖最后由 后知后觉 于 2009-12-7 16:49 编辑

嗯 是用了那个 clear_rect 还有 blur

有这2个我才把猫哥哥那脚本弄过来的

RGSS里没这2个东西- -!

还有Graphics.width/Graphics.height
我直接改成了640,480 - -!



09-12-7更新
把椭圆换成了圆形
脚本中的一些东西换成了 alias 语句减少冲突











你知道得太多了

回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-8-15
帖子
98
9
发表于 2009-12-10 22:02:11 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-24 02:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表