Project1

标题: 关于 战斗镜头 和 敌人呼吸 两个脚本的冲突 [打印本页]

作者: Sence    时间: 2014-9-3 15:03
标题: 关于 战斗镜头 和 敌人呼吸 两个脚本的冲突
本帖最后由 Sence 于 2014-9-4 12:11 编辑

单独使用两个脚本 都有效果 ,但是 同时使用的话,就只有 战斗镜头 能用,而 呼吸脚本 就没有效果了,拜托 大触们看看 是哪里出现的问题。


以下是脚本

呼吸脚本和战斗镜头
RUBY 代码复制
  1. #==============================================================================
  2. # ★ RGSS3_バトラー表示拡張 Ver1.01
  3. #==============================================================================
  4. =begin
  5.  
  6. 作者:tomoaky
  7. webサイト:ひきも記 ([url=http://hikimoki.sakura.ne.jp/]http://hikimoki.sakura.ne.jp/[/url])
  8.  
  9. 戦闘シーンにおいてエネミーのスプライトに以下の効果を適用します。
  10.   ・ランダムに左右反転
  11.   ・Y座標を元に拡大縮小をおこない遠近感を演出
  12.   ・一定間隔で拡大縮小をおこない息遣いを演出
  13.  
  14. 行動不可状態のエネミーは息遣いが自動的に一時停止します
  15.  
  16. 2011.12.20  Ver1.01
  17.   ・解像度に合わせて遠近効果の基準となるY座標を自動計算するように修正
  18.  
  19. 2011.12.15  Ver1.0
  20.   公開
  21.  
  22. =end
  23.  
  24. #==============================================================================
  25. # □ 設定項目
  26. #==============================================================================
  27. module TMBSPREX
  28.   # 左右反転を適用しないトループをIDで指定
  29.   NO_MIRROR_TROOP = [4, 5, 6]
  30.  
  31.   # 左右反転を適用しないエネミーをIDで指定
  32.   NO_MIRROR_ENEMY = [2, 3]
  33.  
  34.   # 遠近効果を適用しないトループをIDで指定
  35.   NO_ZOOM_TROOP = [5, 6]
  36.  
  37.   # 遠近効果を適用しないエネミーをIDで指定
  38.   NO_ZOOM_ENEMY = [6]
  39.  
  40.   # 息遣いを適用しないトループをIDで指定
  41.   NO_BREATH_TROOP = []
  42.  
  43.   # 息遣いを適用しないエネミーをIDで指定
  44.   NO_BREATH_ENEMY = [6]
  45. end
  46.  
  47. #==============================================================================
  48. # ■ Sprite_Battler
  49. #==============================================================================
  50. class Sprite_Battler < Sprite_Base
  51.   #--------------------------------------------------------------------------
  52.   # ● オブジェクト初期化
  53.   #--------------------------------------------------------------------------
  54.   alias tmbsprex_sprite_battler_initialize initialize
  55.   def initialize(viewport, battler = nil)
  56.     tmbsprex_sprite_battler_initialize(viewport, battler)
  57.     if battler
  58.       unless TMBSPREX::NO_MIRROR_TROOP.include?($game_troop.troop.id)
  59.         unless TMBSPREX::NO_MIRROR_ENEMY.include?(battler.enemy.id)
  60.           self.mirror = (rand(3) == 0)      # 1/3の確率で左右反転
  61.         end
  62.       end
  63.       unless TMBSPREX::NO_ZOOM_TROOP.include?($game_troop.troop.id)
  64.         unless TMBSPREX::NO_ZOOM_ENEMY.include?(battler.enemy.id)
  65.           border_y = Graphics.height * 65 / 100
  66.           self.zoom_x = (battler.screen_y - border_y) * 0.005 + 1.0
  67.         end
  68.       end
  69.       unless TMBSPREX::NO_BREATH_TROOP.include?($game_troop.troop.id)
  70.         unless TMBSPREX::NO_BREATH_ENEMY.include?(battler.enemy.id)
  71.           @zoom_max = rand(30) + 150
  72.           @zoom_count = rand(@zoom_max)
  73.         end
  74.       end
  75.     end
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● フレーム更新
  79.   #--------------------------------------------------------------------------
  80.   alias tmbsprex_sprite_battler_update update
  81.   def update
  82.     tmbsprex_sprite_battler_update
  83.     if @battler
  84.       if @use_sprite
  85.         self.zoom_y = self.zoom_x
  86.         self.z = 50 + self.y
  87.         if @zoom_max && @battler.movable?
  88.           @zoom_count += 1
  89.           @zoom_count = 0 if @zoom_count == @zoom_max
  90.           f = Math.sin(Math::PI * @zoom_count / (@zoom_max / 2))
  91.           self.zoom_y += f * 0.015 + 0.015
  92.         end
  93.       end
  94.     end
  95.   end
  96. end

RUBY 代码复制
  1. #==============================================================================
  2. # F14 - 战斗镜头 - By芙蕾娅
  3. #------------------------------------------------------------------------------
  4. #  ★ - 新增  ☆ - 修改  ■ - 删除 ● - 无变更
  5. #==============================================================================
  6. module Freya
  7.   # 镜头帧速,数字越小越快
  8.   Camera_Frame_Speed = 12
  9.   # 镜头放大率,正常大小1.0,默认放大1.2
  10.   Take_Zoom = 1.2
  11.   # 背景增大率,默认0.1
  12.   # 避免默认素材背景在镜头移动后出现黑边所做的处理
  13.   Back_Zoom = 0.1
  14. end
  15. #==============================================================================
  16. # ■ Battle_Camera
  17. #------------------------------------------------------------------------------
  18. #  保存着战斗镜头的讯息
  19. #==============================================================================
  20. class Battle_Camera
  21.   #--------------------------------------------------------------------------
  22.   # ● 定义实例变量
  23.   #--------------------------------------------------------------------------
  24.   attr_accessor :x
  25.   attr_accessor :y
  26.   attr_accessor :zoom
  27.   attr_accessor :new_zoom
  28.   attr_reader :center_width
  29.   attr_reader :center_height
  30.   #--------------------------------------------------------------------------
  31.   # ● 初始化对象
  32.   #--------------------------------------------------------------------------
  33.   def initialize
  34.     @x = @new_x = @center_width = Graphics.width / 2
  35.     @y = @new_y = @center_height = Graphics.height / 1.5
  36.     [url=home.php?mod=space&uid=98379]@zoom[/url] = @new_zoom = 1.0
  37.     @frame_speed = Freya::Camera_Frame_Speed
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # ● 初始化帧率
  41.   #--------------------------------------------------------------------------
  42.   def reset_frame_speed
  43.     @frame_speed = Freya::Camera_Frame_Speed
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 设置镜头瞄准对象
  47.   #--------------------------------------------------------------------------
  48.   def look(target,zoom=nil,speed=nil)
  49.     if target.is_a?(Game_Enemy)
  50.       reset_frame_speed
  51.       @new_x = target.screen_x
  52.       @new_y = target.screen_y
  53.       @new_zoom = zoom unless zoom.nil?
  54.       @frame_speed = speed unless speed.nil?
  55.     end
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ● 将镜头移至中心
  59.   #--------------------------------------------------------------------------
  60.   def center(zoom = 1.0)
  61.     @new_x = @center_width
  62.     @new_y = @center_height
  63.     @new_zoom = zoom
  64.   end
  65.   #--------------------------------------------------------------------------
  66.   # ● 计算x坐标
  67.   #--------------------------------------------------------------------------
  68.   def battler_x(battler)
  69.     distance = battler.screen_x - @x
  70.     value = distance * ([url=home.php?mod=space&uid=98379]@zoom[/url] - 1.0)
  71.     pos = battler.screen_x - (@x - @center_width)
  72.     return pos + value
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 计算y坐标
  76.   #--------------------------------------------------------------------------
  77.   def battler_y(battler)
  78.     distance = battler.screen_y - @y
  79.     value = distance * ([url=home.php?mod=space&uid=98379]@zoom[/url] - 1.0)
  80.     pos = battler.screen_y - (@y - @center_height)
  81.     return pos + value
  82.   end
  83.   #--------------------------------------------------------------------------
  84.   # ● 更新画面
  85.   #--------------------------------------------------------------------------
  86.   def update
  87.     if @x != @new_x
  88.       @x = (@new_x - @x > 0) ?
  89.         [@x + move_speed_x, @new_x].min : [@x - move_speed_x, @new_x].max
  90.     end
  91.     if @y != @new_y
  92.       @y = (@new_y - @y > 0) ?
  93.         [@y + move_speed_y, @new_y].min : [@y - move_speed_y, @new_y].max
  94.     end
  95.     if [url=home.php?mod=space&uid=98379]@zoom[/url] != @new_zoom
  96.       [url=home.php?mod=space&uid=98379]@zoom[/url] = (@new_zoom - [url=home.php?mod=space&uid=98379]@zoom[/url] > 0) ?
  97.         [[url=home.php?mod=space&uid=98379]@zoom[/url] + zoom_speed, @new_zoom].min : [[url=home.php?mod=space&uid=98379]@zoom[/url] - zoom_speed, @new_zoom].max
  98.     end
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 镜头x坐标与指定点x坐标的距离
  102.   #--------------------------------------------------------------------------
  103.   def dis_x
  104.     (@x - @new_x).abs
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● 镜头y坐标与指定点y坐标的距离
  108.   #--------------------------------------------------------------------------
  109.   def dis_y
  110.     (@y - @new_y).abs
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● 镜头放大率与指定放大率的差距
  114.   #--------------------------------------------------------------------------
  115.   def dis_zoom
  116.     (@zoom - @new_zoom).abs
  117.   end
  118.   #--------------------------------------------------------------------------
  119.   # ● 镜头x坐标移动速度
  120.   #--------------------------------------------------------------------------
  121.   def move_speed_x
  122.     return [(dis_x / @frame_speed).to_i, 1].max
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ● 镜头y坐标移动速度
  126.   #--------------------------------------------------------------------------
  127.   def move_speed_y
  128.     return [(dis_y / @frame_speed).to_i, 1].max
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ● 镜头缩放速度
  132.   #--------------------------------------------------------------------------
  133.   def zoom_speed
  134.     return [(dis_zoom / @frame_speed), 0.01].max
  135.   end
  136. end
  137. #==============================================================================
  138. # ■ Sprite_Battler
  139. #------------------------------------------------------------------------------
  140. #  显示战斗者的精灵。根据 Game_Battler 类的实例自动变化。
  141. #==============================================================================
  142. class Sprite_Battler < Sprite_Base
  143.   #--------------------------------------------------------------------------
  144.   # ● 定义实例变量
  145.   #--------------------------------------------------------------------------
  146.   attr_accessor :hp_gauge
  147.   #--------------------------------------------------------------------------
  148.   # ☆ 设置动画的精灵
  149.   #--------------------------------------------------------------------------
  150.   def animation_set_sprites(frame)
  151.     cell_data = frame.cell_data
  152.     set_animation_origin
  153.     @ani_sprites.each_with_index do |sprite, i|
  154.       next unless sprite
  155.       pattern = cell_data[i, 0]
  156.       if !pattern || pattern < 0
  157.         sprite.visible = false
  158.         next
  159.       end
  160.       sprite.bitmap = pattern < 100 ? @ani_bitmap1 : @ani_bitmap2
  161.       sprite.visible = true
  162.       sprite.src_rect.set(pattern % 5 * 192,
  163.         pattern % 100 / 5 * 192, 192, 192)
  164.       if @ani_mirror
  165.         sprite.x = @ani_ox - cell_data[i, 1]
  166.         sprite.y = @ani_oy + cell_data[i, 2]
  167.         sprite.angle = (360 - cell_data[i, 4])
  168.         sprite.mirror = (cell_data[i, 5] == 0)
  169.       else
  170.         sprite.x = @ani_ox + cell_data[i, 1]
  171.         sprite.y = @ani_oy + cell_data[i, 2]
  172.         sprite.angle = cell_data[i, 4]
  173.         sprite.mirror = (cell_data[i, 5] == 1)
  174.       end
  175.       sprite.z = self.z + 300 + i
  176.       sprite.ox = 96
  177.       sprite.oy = 96
  178.       sprite.zoom_x = cell_data[i, 3] / 100.0 * self.zoom_x
  179.       sprite.zoom_y = cell_data[i, 3] / 100.0 * self.zoom_y
  180.       sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  181.       sprite.blend_type = cell_data[i, 7]
  182.     end
  183.   end
  184. end
  185. #==============================================================================
  186. # ■ Spriteset_Battle
  187. #------------------------------------------------------------------------------
  188. #  处理战斗画面的精灵的类。本类在 Scene_Battle 类的内部使用。
  189. #==============================================================================
  190. class Spriteset_Battle
  191.   #--------------------------------------------------------------------------
  192.   # ★ 定义实例变量
  193.   #--------------------------------------------------------------------------
  194.   attr_accessor :battle_camera
  195.   #--------------------------------------------------------------------------
  196.   # ☆ 初始化对象
  197.   #--------------------------------------------------------------------------
  198.   alias initialize_freya_camera initialize
  199.   def initialize
  200.     create_camera
  201.     initialize_freya_camera
  202.   end
  203.   #--------------------------------------------------------------------------
  204.   # ★ 创建镜头
  205.   #--------------------------------------------------------------------------
  206.   def create_camera
  207.     @battle_camera = Battle_Camera.new
  208.   end
  209.   #--------------------------------------------------------------------------
  210.   # ☆ 更新画面
  211.   #--------------------------------------------------------------------------
  212.   alias update_freya_camera update
  213.   def update
  214.     update_freya_camera
  215.     update_camera
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ● 刷新镜头
  219.   #--------------------------------------------------------------------------
  220.   def update_camera
  221.     @battle_camera.update
  222.     update_battleback_position
  223.     update_enemy_position
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # ● 刷新背景坐标
  227.   #--------------------------------------------------------------------------
  228.   def update_battleback_position
  229.     zom = Freya::Take_Zoom + Freya::Back_Zoom
  230.     zoom = @back1_sprite.zoom_x = @back2_sprite.zoom_x = @battle_camera.zoom * zom
  231.     zoom = @back1_sprite.zoom_y = @back2_sprite.zoom_y = @battle_camera.zoom * zom
  232.     x = @back1_sprite.ox
  233.     y = @back1_sprite.oy
  234.     bbx = (x - (@battle_camera.x - @battle_camera.center_width))
  235.     bby = (y - (@battle_camera.y - @battle_camera.center_height))
  236.     @back1_sprite.x = @back2_sprite.x = bbx
  237.     @back1_sprite.y = @back2_sprite.y = bby
  238.   end
  239.   #--------------------------------------------------------------------------
  240.   # ● 刷新敌人坐标
  241.   #--------------------------------------------------------------------------
  242.   def update_enemy_position
  243.     for sprite in @enemy_sprites
  244.       next if sprite.nil? || sprite.battler.nil?
  245.       sprite.zoom_x = @battle_camera.zoom
  246.       sprite.zoom_y = @battle_camera.zoom
  247.       sprite.x = @battle_camera.battler_x(sprite.battler)
  248.       sprite.y = @battle_camera.battler_y(sprite.battler)
  249.       unless sprite.hp_gauge.nil?
  250.         sprite.hp_gauge.x = sprite.x - sprite.hp_gauge.width / 2
  251.         sprite.hp_gauge.y = sprite.y
  252.       end
  253.     end
  254.   end
  255. end
  256. #==============================================================================
  257. # ■ Scene_Battle
  258. #------------------------------------------------------------------------------
  259. #  战斗画面
  260. #==============================================================================
  261. class Scene_Battle < Scene_Base
  262.   #--------------------------------------------------------------------------
  263.   # ★ 获取镜头
  264.   #--------------------------------------------------------------------------
  265.   def camera
  266.     return @spriteset.battle_camera
  267.   end
  268.   #--------------------------------------------------------------------------
  269.   # ☆ 使用技能/物品
  270.   #--------------------------------------------------------------------------
  271.   def use_item
  272.     camera.look(@subject,Freya::Take_Zoom)
  273.     wait(Freya::Camera_Frame_Speed)
  274.     item = @subject.current_action.item
  275.     @log_window.display_use_item(@subject, item)
  276.     @subject.use_item(item)
  277.     refresh_status
  278.     targets = @subject.current_action.make_targets.compact
  279.     camera.look(targets,Freya::Take_Zoom)
  280.     wait(Freya::Camera_Frame_Speed)
  281.     show_animation(targets, item.animation_id)
  282.     targets.each {|target| item.repeats.times { invoke_item(target, item) } }
  283.     camera.center
  284.   end
  285.   #--------------------------------------------------------------------------
  286.   # ☆ 应用技能/物品效果
  287.   #--------------------------------------------------------------------------
  288.   alias apply_item_effects_freya_camera apply_item_effects
  289.   def apply_item_effects(target, item)
  290.     camera.look(target, Freya::Take_Zoom)
  291.     wait(Freya::Camera_Frame_Speed)
  292.     apply_item_effects_freya_camera(target, item)
  293.   end
  294.   #--------------------------------------------------------------------------
  295.   # ☆ 发动反击
  296.   #--------------------------------------------------------------------------
  297.   alias invoke_counter_attack_freya_camera invoke_counter_attack
  298.   def invoke_counter_attack(target, item)
  299.     camera.look(target, Freya::Take_Zoom)
  300.     wait(Freya::Camera_Frame_Speed)
  301.     invoke_counter_attack_freya_camera(target, item)
  302.   end
  303.   #--------------------------------------------------------------------------
  304.   # ☆ 发动反射魔法攻击
  305.   #--------------------------------------------------------------------------
  306.   alias invoke_magic_reflection_freya_camera invoke_magic_reflection
  307.   def invoke_magic_reflection(target, item)
  308.     camera.look(target, Freya::Take_Zoom)
  309.     wait(Freya::Camera_Frame_Speed)
  310.     invoke_magic_reflection_freya_camera(target, item)
  311.   end
  312.   #--------------------------------------------------------------------------
  313.   # ☆ 显示普通动画
  314.   #--------------------------------------------------------------------------
  315.   def show_normal_animation(targets, animation_id, mirror = false)
  316.     animation = $data_animations[animation_id]
  317.     if animation
  318.       camera.center if animation.to_screen?
  319.       targets.each do |target|
  320.         camera.look(target, Freya::Take_Zoom) unless animation.to_screen?
  321.         target.animation_id = animation_id
  322.         target.animation_mirror = mirror
  323.         abs_wait_short unless animation.to_screen?
  324.       end
  325.       abs_wait_short if animation.to_screen?
  326.     end
  327.   end
  328. end




@taroxd  
@VIPArcher @熊喵酱
作者: Sence    时间: 2014-9-4 14:45
顺序调整过也没有效果,如果脚本冲突,那有没有可以一个脚本中同时实现 敌人呼吸和战斗镜头的链接,地球村和图书馆都没有淘到,已解决里似乎大家也不太关心呐
作者: 克莉丝    时间: 2014-9-4 15:32
顺序没有关系,把脚本 "战斗镜头" 的第245和246行的"="改成" *= " (不带引号
作者: Sence    时间: 2014-9-4 17:04
克莉丝 发表于 2014-9-4 15:32
顺序没有关系,把脚本 "战斗镜头" 的第245和246行的"="改成" *= " (不带引号

恩,试过了...还删掉了一个冲突脚本...
可是还有一个问题...
单独使用正常的的战斗镜头时出现的怪物图是....

但是现在的情况是...

已经不会飞出去了,可是这怪物比例略鬼畜...
该如何修改呢...
作者: Sence    时间: 2014-9-5 02:19
本帖最后由 Sence 于 2014-9-7 14:51 编辑
Sence 发表于 2014-9-4 17:04
恩,试过了...还删掉了一个冲突脚本...
可是还有一个问题...
单独使用正常的的战斗镜头时出现的怪物图是. ...


传上工程,如果有时间,希望可以帮忙看看!(6r的附件闹哪样)http://pan.baidu.com/s/1c00A8Be

@taroxd 问题已解决,麻烦归类。(点评招不啊!)




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1