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

Project1

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

[已经过期] 【简单问题】请问人物放大脚本如何和动态模糊脚本兼容

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
50 小时
注册时间
2010-10-21
帖子
26
跳转到指定楼层
1
发表于 2012-1-8 17:20:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #--------------------------------------------------------------------------
  2. # ● 动态糊模效果
  3. # 制作者  小飞侠_shoed
  4. # 用法:
  5. # 打开
  6. # 开关[模糊效果]=ON
  7. # 开关[模糊效果]=OFF

  8. $模糊效果 = 1
  9. #==============================================================================
  10. # ■ Scene_Map
  11. #==============================================================================
  12. class Scene_Map
  13.   #--------------------------------------------------------------------------
  14.   # ● 主处理
  15.   #--------------------------------------------------------------------------
  16.   alias plan_map_window_main main
  17.   def main
  18.     @blur_window = Blur_Effect.new
  19.     @blur_window.visible=$game_switches[$模糊效果]
  20.     plan_map_window_main
  21.     @blur_window.dispose
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 更新
  25.   #--------------------------------------------------------------------------
  26.   alias plan_map_window_update update
  27.   def update
  28.     plan_map_window_update
  29.     @blur_window.visible=$game_switches[$模糊效果]
  30.     @blur_window.update
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 场所移动的变化
  34.   #--------------------------------------------------------------------------
  35.   alias plan_map_window_transfer_player transfer_player
  36.   def transfer_player
  37.     visible = $game_switches[$模糊效果]
  38.     $game_switches[$模糊效果] = false
  39.     @blur_window.visible=$game_switches[$模糊效果]
  40.     plan_map_window_transfer_player
  41.     @blur_window.dispose
  42.     @blur_window = Blur_Effect.new
  43.     $game_switches[$模糊效果] = visible
  44.     @blur_window.visible=$game_switches[$模糊效果]
  45.   end
  46. end

  47. #==============================================================================
  48. # Blur_Effect
  49. #==============================================================================
  50. class Blur_Effect
  51.   def initialize
  52.     @blurSprite=Sprite.new
  53.     @sum=Bitmap.new(640,480)
  54.     @RT=Picture_Map.new
  55.     @blurSprite.bitmap=@sum
  56.     @blurSprite.z=9999
  57.   end
  58.   
  59.   def update
  60.     if $game_switches[$模糊效果] == true
  61.       @RT.update
  62.       @sum.blt(0,0,@RT,Rect.new(0,0,@RT.width,@RT.height),60)
  63.     end
  64.   end
  65.   
  66.   def dispose
  67.     @sum.dispose
  68.     @RT.dispose
  69.     @blurSprite.dispose
  70.   end
  71.   
  72.   def visible=(flag)
  73.     @blurSprite.visible=flag
  74.   end
  75. end

  76. #==============================================================================
  77. # Picture_Character
  78. #==============================================================================
  79. class Picture_Character < Bitmap
  80.   attr_accessor :character                # 角色
  81.   
  82.   def initialize(character = nil)
  83.     @character = character
  84.    
  85.     @bitmap = RPG::Cache.character(@character.character_name,
  86.       @character.character_hue)
  87.     @cw = @bitmap.width / 4
  88.     @ch = @bitmap.height / 4
  89.   
  90.     super(@cw,@ch)
  91.    
  92.     @stopTitles=[]
  93.     @moveTitles=[]
  94.   end
  95.   
  96.   def update
  97.     self.clear
  98.     # 元件 ID、文件名、色相与现在的情况存在差异的情况下
  99.     if @tile_id != @character.tile_id or
  100.        @character_name != @character.character_name or
  101.        @character_hue != @character.character_hue
  102.       # 记忆元件 ID 与文件名、色相
  103.       @tile_id = @character.tile_id
  104.       @character_name = @character.character_name
  105.       @character_hue = @character.character_hue
  106.       # 元件 ID 为有效值的情况下
  107.       if @tile_id >= 384
  108.         @bitmap = RPG::Cache.tile($game_map.tileset_name,
  109.           @tile_id, @character.character_hue)
  110.         @cw = 32
  111.         @ch = 32
  112.       else
  113.         @bitmap = RPG::Cache.character(@character.character_name,
  114.           @character.character_hue)
  115.       end
  116.     end

  117.     # 图形是角色的情况下
  118.     if @tile_id == 0
  119.       # 设置传送目标的矩形
  120.       sx = @character.pattern * @cw
  121.       sy = (@character.direction - 2) / 2 * @ch
  122.       self.blt(0,0,@bitmap,Rect.new(sx,sy,@cw,@ch))
  123.     end
  124.    
  125.     #计算title
  126.     if self.visible
  127.       if @x != self.x or @y != self.y
  128.         @x=self.x
  129.         @y=self.y
  130.         
  131.         @stopTitles.clear
  132.         #@moveTitles.clear
  133.         
  134.         tile_x=self.real_width/32
  135.         if tile_x%2==0
  136.           tile_x+=1
  137.         end
  138.         tile_y=(self.real_height/32.0).ceil
  139.         for j in 0...tile_y
  140.           maskId=[self.x,self.y-j,j]
  141.           @stopTitles.push(maskId)
  142.           for i in 1..(tile_x-1)/2
  143.             maskId=[self.x-i,self.y-j,j]
  144.             @stopTitles.push(maskId)
  145.             maskId=[self.x+i,self.y-j,j]
  146.             @stopTitles.push(maskId)
  147.           end
  148.         end
  149.         
  150.         @[email protected]
  151.         
  152.         case @character.direction
  153.           when 2 #向下
  154.             maskId=[self.x,self.y-tile_y,tile_y]
  155.             @moveTitles.push(maskId)
  156.             for i in 1..(tile_x-1)/2
  157.               maskId=[self.x-i,self.y-tile_y,tile_y]
  158.               @moveTitles.push(maskId)
  159.               maskId=[self.x+i,self.y-tile_y,tile_y]
  160.               @moveTitles.push(maskId)
  161.             end
  162.           when 4 #向左
  163.             for j in 0...tile_y
  164.               maskId=[self.x+(tile_x-1)/2+1,self.y-j,j]
  165.               @moveTitles.push(maskId)
  166.             end
  167.           when 6 #向右
  168.             for j in 0...tile_y
  169.               maskId=[self.x-(tile_x-1)/2-1,self.y-j,j]
  170.               @moveTitles.push(maskId)
  171.             end
  172.           when 8 #向上
  173.             for k in @moveTitles
  174.               k[2]+=1
  175.             end
  176.             maskId=[self.x,self.y+1,0]
  177.             @moveTitles.push(maskId)
  178.             for i in 1..(tile_x-1)/2
  179.               maskId=[self.x-i,self.y+1,0]
  180.               @moveTitles.push(maskId)
  181.               maskId=[self.x+i,self.y+1,0]
  182.               @moveTitles.push(maskId)
  183.             end
  184.           end
  185.       end
  186.     end
  187.   end
  188.   
  189.   def x
  190.     return @character.x
  191.   end
  192.   
  193.   def y
  194.     return @character.y
  195.   end
  196.    
  197.   def screen_x
  198.     return @character.screen_x
  199.   end
  200.   
  201.   def screen_y
  202.     return @character.screen_y
  203.   end
  204.   
  205.   def screen_z
  206.     return @character.screen_z(@ch)
  207.   end
  208.   
  209.   def real_width
  210.     return @cw
  211.   end
  212.   
  213.   def real_height
  214.     return @ch
  215.   end
  216.   
  217.   def visible
  218.     return [email protected]
  219.   end
  220.   
  221.   def opacity
  222.     return @character.opacity
  223.   end
  224.   
  225.   def maskTitles
  226.     if @character.moving?
  227.       return @moveTitles
  228.     else
  229.       return @stopTitles
  230.     end
  231.   end
  232. end


  233. #==============================================================================
  234. # Picture_Map
  235. #==============================================================================
  236. class Picture_Map < Bitmap
  237.   def initialize
  238.     super(640,480)
  239.     @map_cw = $game_map.width * 32
  240.     @map_ch = $game_map.height * 32
  241.    
  242.     @tileset = RPG::Cache.tileset($game_map.tileset_name)
  243.     @autotiles = []
  244.     for i in 0..6
  245.       autotile_name = $game_map.autotile_names[i]
  246.       @autotiles[i] = RPG::Cache.autotile(autotile_name)
  247.     end
  248.     @map_data = $game_map.data
  249.     @priorities = $game_map.priorities
  250.     @character_sprites = []
  251.     for i in $game_map.events.keys.sort
  252.       sprite = Picture_Character.new($game_map.events[i])
  253.       @character_sprites.push(sprite)
  254.     end
  255.     @character_sprites.push(Picture_Character.new($game_player))
  256.     @all_map = Bitmap.new (@map_cw,@map_ch)
  257.     make_map
  258.   end
  259.   
  260.   def update
  261.     self.clear

  262.     self.blt(0,0,@all_map,Rect.new(map_x,map_y,width,height))
  263.    
  264.     # 刷新角色活动块
  265.     @character_sprites.sort!{|a,b|a.screen_z<=>b.screen_z}
  266.     for sprite in @character_sprites
  267.       if sprite.visible
  268.         sprite.update
  269.         
  270.         px=sprite.screen_x-sprite.real_width/2
  271.         py=sprite.screen_y-sprite.real_height
  272.         self.blt(px,py,sprite,Rect.new(0,0,sprite.real_width,sprite.real_height),sprite.opacity)
  273.         
  274.         for mask_id in sprite.maskTitles
  275.           next unless $game_map.valid?(mask_id[0], mask_id[1])
  276.           for i in [2, 1, 0]
  277.             tile = @map_data[mask_id[0], mask_id[1], i]
  278.             next if tile == 0 #透明的
  279.             if $game_map.priorities[tile] > mask_id[2]
  280.               if tile < 384
  281.                 if tile >= 48
  282.                   tile -= 48
  283.                   src_rect = Rect.new(32, 2 * 32, 32, 32)
  284.                   self.blt(mask_id[0] * 32 - map_x, mask_id[1] * 32 - map_y, @autotiles[tile / 48], src_rect)
  285.                 end
  286.               else
  287.                 tile -= 384
  288.                 src_rect = Rect.new(tile % 8 * 32, tile / 8 * 32, 32, 32)
  289.                 self.blt(mask_id[0] * 32 - map_x, mask_id[1] * 32 -  map_y, @tileset, src_rect)
  290.               end
  291.               
  292.               break
  293.             end
  294.           end
  295.         end
  296.       end
  297.     end
  298.   end
  299.   
  300.   def dispose
  301.     super
  302.     # 释放元件地图
  303.     @tileset.dispose
  304.     for i in 0..6
  305.       @autotiles[i].dispose
  306.     end
  307.     # 释放角色活动块
  308.     for sprite in @character_sprites
  309.       sprite.dispose
  310.     end
  311.     @all_map.dispose
  312.    
  313.   end
  314.   
  315.   def make_map
  316.     for y in 0...$game_map.height
  317.       for x in 0...$game_map.width
  318.         for z in 0...3
  319.           tile = @map_data[x, y, z]
  320.           next if tile == nil
  321.           if tile < 384
  322.             if tile >= 48
  323.               tile -= 48
  324.               src_rect = Rect.new(32, 2 * 32, 32, 32)
  325.               @all_map.blt(x * 32, y * 32, @autotiles[tile / 48], src_rect)
  326.             end
  327.           else
  328.             tile -= 384
  329.             src_rect = Rect.new(tile % 8 * 32, tile / 8 * 32, 32, 32)
  330.             @all_map.blt(x * 32, y * 32, @tileset, src_rect)
  331.           end
  332.         end
  333.       end
  334.     end
  335.   end
  336.   
  337.   def map_width
  338.     return @map_cw
  339.   end
  340.   
  341.   def map_height
  342.     return @map_ch
  343.   end

  344.   def map_x
  345.     return $game_map.display_x / 4
  346.   end
  347.   
  348.   def map_y
  349.     return $game_map.display_y / 4
  350.   end
  351. end
复制代码
上面的是动态模糊脚本
  1. #==============================================================================
  2. # ■ Sprite_Character
  3. #------------------------------------------------------------------------------
  4. #  角色显示用脚本。监视 Game_Character 类的实例、
  5. # 自动变化脚本状态。
  6. #==============================================================================
  7. $变大比率 = 1.0
  8. class Sprite_Character < RPG::Sprite
  9.   #--------------------------------------------------------------------------
  10.   # ● 定义实例变量
  11.   #--------------------------------------------------------------------------
  12.   attr_accessor :character                # 角色
  13.   #--------------------------------------------------------------------------
  14.   # ● 初始化对像
  15.   #     viewport  : 查看端口
  16.   #     character : 角色 (Game_Character)
  17.   #--------------------------------------------------------------------------
  18.   def initialize(viewport, character = nil)
  19.     super(viewport)
  20.     @character = character
  21.     update
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 更新画面
  25.   #--------------------------------------------------------------------------
  26.   def update
  27.     super
  28.   #--------------------------------------------------------------------------
  29.     self.zoom_x = self.zoom_y = $变大比率
  30.   #--------------------------------------------------------------------------
  31.     # 元件 ID、文件名、色相与现在的情况存在差异的情况下
  32.     if @tile_id != @character.tile_id or
  33.        @character_name != @character.character_name or
  34.        @character_hue != @character.character_hue
  35.       # 记忆元件 ID 与文件名、色相
  36.       @tile_id = @character.tile_id
  37.       @character_name = @character.character_name
  38.       @character_hue = @character.character_hue
  39.       # 元件 ID 为有效值的情况下
  40.       if @tile_id >= 384
  41.         self.bitmap = RPG::Cache.tile($game_map.tileset_name,
  42.           @tile_id, @character.character_hue)
  43.         self.src_rect.set(0, 0, 32, 32)
  44.         self.ox = 16
  45.         self.oy = 32
  46.       # 元件 ID 为无效值的情况下
  47.       else
  48.         self.bitmap = RPG::Cache.character(@character.character_name,
  49.           @character.character_hue)
  50.         @cw = bitmap.width / 4
  51.         @ch = bitmap.height / 4
  52.         self.ox = @cw / 2
  53.         self.oy = @ch
  54.       end
  55.     end
  56.     # 设置可视状态
  57.     self.visible = (not @character.transparent)
  58.     # 图形是角色的情况下
  59.     if @tile_id == 0
  60.       # 设置传送目标的矩形
  61.       sx = @character.pattern * @cw
  62.       sy = (@character.direction - 2) / 2 * @ch
  63.       self.src_rect.set(sx, sy, @cw, @ch)
  64.     end
  65.     # 设置脚本的坐标
  66.     self.x = @character.screen_x
  67.     self.y = @character.screen_y
  68.     self.z = @character.screen_z(@ch)
  69.     # 设置不透明度、合成方式、茂密
  70.     self.opacity = @character.opacity
  71.     self.blend_type = @character.blend_type
  72.     self.bush_depth = @character.bush_depth
  73.     # 动画
  74.     if @character.animation_id != 0
  75.       animation = $data_animations[@character.animation_id]
  76.       animation(animation, true)
  77.       @character.animation_id = 0
  78.     end
  79.   end
  80. end
复制代码
上面的是人物放大脚本
如果这两个脚本同时使用就会产生BUG,人物是变大的,但是模糊的残影还是原来的大小,请问如何让这两个脚本兼容?
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-11-30 19:06

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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