查看: 2161|回复: 4

[已经解决] 关于 战斗镜头 和 敌人呼吸 两个脚本的冲突

[复制链接]
梦石
0
星屑
50
在线时间
100 小时
注册时间
2014-6-23
回帖
71
发表于 2014-9-3 15:03:45 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 Sence 于 2014-9-4 12:11 编辑

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


以下是脚本

呼吸脚本和战斗镜头
[pre lang="ruby" line="1"]#==============================================================================
# ★ RGSS3_バトラー表示拡張 Ver1.01
#==============================================================================
=begin

作者:tomoaky
webサイト:ひきも記 (http://hikimoki.sakura.ne.jp/)

戦闘シーンにおいてエネミーのスプライトに以下の効果を適用します。
  ・ランダムに左右反転
  ・Y座標を元に拡大縮小をおこない遠近感を演出
  ・一定間隔で拡大縮小をおこない息遣いを演出
  
行動不可状態のエネミーは息遣いが自動的に一時停止します

2011.12.20  Ver1.01
  ・解像度に合わせて遠近効果の基準となるY座標を自動計算するように修正

2011.12.15  Ver1.0
  公開

=end

#==============================================================================
# □ 設定項目
#==============================================================================
module TMBSPREX
  # 左右反転を適用しないトループをIDで指定
  NO_MIRROR_TROOP = [4, 5, 6]
  
  # 左右反転を適用しないエネミーをIDで指定
  NO_MIRROR_ENEMY = [2, 3]
  
  # 遠近効果を適用しないトループをIDで指定
  NO_ZOOM_TROOP = [5, 6]
  
  # 遠近効果を適用しないエネミーをIDで指定
  NO_ZOOM_ENEMY = [6]
  
  # 息遣いを適用しないトループをIDで指定
  NO_BREATH_TROOP = []
  
  # 息遣いを適用しないエネミーをIDで指定
  NO_BREATH_ENEMY = [6]
end

#==============================================================================
# ■ Sprite_Battler
#==============================================================================
class Sprite_Battler < Sprite_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias tmbsprex_sprite_battler_initialize initialize
  def initialize(viewport, battler = nil)
    tmbsprex_sprite_battler_initialize(viewport, battler)
    if battler
      unless TMBSPREX::NO_MIRROR_TROOP.include?($game_troop.troop.id)
        unless TMBSPREX::NO_MIRROR_ENEMY.include?(battler.enemy.id)
          self.mirror = (rand(3) == 0)      # 1/3の確率で左右反転
        end
      end
      unless TMBSPREX::NO_ZOOM_TROOP.include?($game_troop.troop.id)
        unless TMBSPREX::NO_ZOOM_ENEMY.include?(battler.enemy.id)
          border_y = Graphics.height * 65 / 100
          self.zoom_x = (battler.screen_y - border_y) * 0.005 + 1.0
        end
      end
      unless TMBSPREX::NO_BREATH_TROOP.include?($game_troop.troop.id)
        unless TMBSPREX::NO_BREATH_ENEMY.include?(battler.enemy.id)
          @zoom_max = rand(30) + 150
          @zoom_count = rand(@zoom_max)
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias tmbsprex_sprite_battler_update update
  def update
    tmbsprex_sprite_battler_update
    if @battler
      if @use_sprite
        self.zoom_y = self.zoom_x
        self.z = 50 + self.y
        if @zoom_max && @battler.movable?
          @zoom_count += 1
          @zoom_count = 0 if @zoom_count == @zoom_max
          f = Math.sin(Math::PI * @zoom_count / (@zoom_max / 2))
          self.zoom_y += f * 0.015 + 0.015
        end
      end
    end
  end
end[/pre]
[pre lang="ruby" line="1"]
#==============================================================================
# F14 - 战斗镜头 - By芙蕾娅
#------------------------------------------------------------------------------
#  ★ - 新增  ☆ - 修改  ■ - 删除 ● - 无变更
#==============================================================================
module Freya
  # 镜头帧速,数字越小越快
  Camera_Frame_Speed = 12
  # 镜头放大率,正常大小1.0,默认放大1.2
  Take_Zoom = 1.2
  # 背景增大率,默认0.1
  # 避免默认素材背景在镜头移动后出现黑边所做的处理
  Back_Zoom = 0.1
end
#==============================================================================
# ■ Battle_Camera
#------------------------------------------------------------------------------
#  保存着战斗镜头的讯息
#==============================================================================
class Battle_Camera
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_accessor :x
  attr_accessor :y
  attr_accessor :zoom
  attr_accessor :new_zoom
  attr_reader :center_width
  attr_reader :center_height
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  def initialize
    @x = @new_x = @center_width = Graphics.width / 2
    @y = @new_y = @center_height = Graphics.height / 1.5
    @zoom = @new_zoom = 1.0
    @frame_speed = Freya::Camera_Frame_Speed
  end
  #--------------------------------------------------------------------------
  # ● 初始化帧率
  #--------------------------------------------------------------------------
  def reset_frame_speed
    @frame_speed = Freya::Camera_Frame_Speed
  end
  #--------------------------------------------------------------------------
  # ● 设置镜头瞄准对象
  #--------------------------------------------------------------------------
  def look(target,zoom=nil,speed=nil)
    if target.is_a?(Game_Enemy)
      reset_frame_speed
      @new_x = target.screen_x
      @new_y = target.screen_y
      @new_zoom = zoom unless zoom.nil?
      @frame_speed = speed unless speed.nil?
    end
  end
  #--------------------------------------------------------------------------
  # ● 将镜头移至中心
  #--------------------------------------------------------------------------
  def center(zoom = 1.0)
    @new_x = @center_width
    @new_y = @center_height
    @new_zoom = zoom
  end
  #--------------------------------------------------------------------------
  # ● 计算x坐标
  #--------------------------------------------------------------------------
  def battler_x(battler)
    distance = battler.screen_x - @x
    value = distance * (@zoom - 1.0)
    pos = battler.screen_x - (@x - @center_width)
    return pos + value
  end
  #--------------------------------------------------------------------------
  # ● 计算y坐标
  #--------------------------------------------------------------------------
  def battler_y(battler)
    distance = battler.screen_y - @y
    value = distance * (@zoom - 1.0)
    pos = battler.screen_y - (@y - @center_height)
    return pos + value
  end
  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  def update
    if @x != @new_x
      @x = (@new_x - @x > 0) ?
        [@x + move_speed_x, @new_x].min : [@x - move_speed_x, @new_x].max
    end
    if @y != @new_y
      @y = (@new_y - @y > 0) ?
        [@y + move_speed_y, @new_y].min : [@y - move_speed_y, @new_y].max
    end
    if @zoom != @new_zoom
      @zoom = (@new_zoom - @zoom > 0) ?
        [@zoom + zoom_speed, @new_zoom].min : [@zoom - zoom_speed, @new_zoom].max
    end
  end
  #--------------------------------------------------------------------------
  # ● 镜头x坐标与指定点x坐标的距离
  #--------------------------------------------------------------------------
  def dis_x
    (@x - @new_x).abs
  end
  #--------------------------------------------------------------------------
  # ● 镜头y坐标与指定点y坐标的距离
  #--------------------------------------------------------------------------
  def dis_y
    (@y - @new_y).abs
  end
  #--------------------------------------------------------------------------
  # ● 镜头放大率与指定放大率的差距
  #--------------------------------------------------------------------------
  def dis_zoom
    (@zoom - @new_zoom).abs
  end
  #--------------------------------------------------------------------------
  # ● 镜头x坐标移动速度
  #--------------------------------------------------------------------------
  def move_speed_x
    return [(dis_x / @frame_speed).to_i, 1].max
  end
  #--------------------------------------------------------------------------
  # ● 镜头y坐标移动速度
  #--------------------------------------------------------------------------
  def move_speed_y
    return [(dis_y / @frame_speed).to_i, 1].max
  end
  #--------------------------------------------------------------------------
  # ● 镜头缩放速度
  #--------------------------------------------------------------------------
  def zoom_speed
    return [(dis_zoom / @frame_speed), 0.01].max
  end
end
#==============================================================================
# ■ Sprite_Battler
#------------------------------------------------------------------------------
#  显示战斗者的精灵。根据 Game_Battler 类的实例自动变化。
#==============================================================================
class Sprite_Battler < Sprite_Base
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_accessor :hp_gauge
  #--------------------------------------------------------------------------
  # ☆ 设置动画的精灵
  #--------------------------------------------------------------------------
  def animation_set_sprites(frame)
    cell_data = frame.cell_data
    set_animation_origin
    @ani_sprites.each_with_index do |sprite, i|
      next unless sprite
      pattern = cell_data[i, 0]
      if !pattern || pattern < 0
        sprite.visible = false
        next
      end
      sprite.bitmap = pattern < 100 ? @ani_bitmap1 : @ani_bitmap2
      sprite.visible = true
      sprite.src_rect.set(pattern % 5 * 192,
        pattern % 100 / 5 * 192, 192, 192)
      if @ani_mirror
        sprite.x = @ani_ox - cell_data[i, 1]
        sprite.y = @ani_oy + cell_data[i, 2]
        sprite.angle = (360 - cell_data[i, 4])
        sprite.mirror = (cell_data[i, 5] == 0)
      else
        sprite.x = @ani_ox + cell_data[i, 1]
        sprite.y = @ani_oy + cell_data[i, 2]
        sprite.angle = cell_data[i, 4]
        sprite.mirror = (cell_data[i, 5] == 1)
      end
      sprite.z = self.z + 300 + i
      sprite.ox = 96
      sprite.oy = 96
      sprite.zoom_x = cell_data[i, 3] / 100.0 * self.zoom_x
      sprite.zoom_y = cell_data[i, 3] / 100.0 * self.zoom_y
      sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
      sprite.blend_type = cell_data[i, 7]
    end
  end
end
#==============================================================================
# ■ Spriteset_Battle
#------------------------------------------------------------------------------
#  处理战斗画面的精灵的类。本类在 Scene_Battle 类的内部使用。
#==============================================================================
class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ★ 定义实例变量
  #--------------------------------------------------------------------------
  attr_accessor :battle_camera
  #--------------------------------------------------------------------------
  # ☆ 初始化对象
  #--------------------------------------------------------------------------
  alias initialize_freya_camera initialize
  def initialize
    create_camera
    initialize_freya_camera
  end
  #--------------------------------------------------------------------------
  # ★ 创建镜头
  #--------------------------------------------------------------------------
  def create_camera
    @battle_camera = Battle_Camera.new
  end
  #--------------------------------------------------------------------------
  # ☆ 更新画面
  #--------------------------------------------------------------------------
  alias update_freya_camera update
  def update
    update_freya_camera
    update_camera
  end
  #--------------------------------------------------------------------------
  # ● 刷新镜头
  #--------------------------------------------------------------------------
  def update_camera
    @battle_camera.update
    update_battleback_position
    update_enemy_position
  end
  #--------------------------------------------------------------------------
  # ● 刷新背景坐标
  #--------------------------------------------------------------------------
  def update_battleback_position
    zom = Freya::Take_Zoom + Freya::Back_Zoom
    zoom = @back1_sprite.zoom_x = @back2_sprite.zoom_x = @battle_camera.zoom * zom
    zoom = @back1_sprite.zoom_y = @back2_sprite.zoom_y = @battle_camera.zoom * zom
    x = @back1_sprite.ox
    y = @back1_sprite.oy
    bbx = (x - (@battle_camera.x - @battle_camera.center_width))
    bby = (y - (@battle_camera.y - @battle_camera.center_height))
    @back1_sprite.x = @back2_sprite.x = bbx
    @back1_sprite.y = @back2_sprite.y = bby
  end
  #--------------------------------------------------------------------------
  # ● 刷新敌人坐标
  #--------------------------------------------------------------------------
  def update_enemy_position
    for sprite in @enemy_sprites
      next if sprite.nil? || sprite.battler.nil?
      sprite.zoom_x = @battle_camera.zoom
      sprite.zoom_y = @battle_camera.zoom
      sprite.x = @battle_camera.battler_x(sprite.battler)
      sprite.y = @battle_camera.battler_y(sprite.battler)
      unless sprite.hp_gauge.nil?
        sprite.hp_gauge.x = sprite.x - sprite.hp_gauge.width / 2
        sprite.hp_gauge.y = sprite.y
      end
    end
  end
end
#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
#  战斗画面
#==============================================================================
class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ★ 获取镜头
  #--------------------------------------------------------------------------
  def camera
    return @spriteset.battle_camera
  end
  #--------------------------------------------------------------------------
  # ☆ 使用技能/物品
  #--------------------------------------------------------------------------
  def use_item
    camera.look(@subject,Freya::Take_Zoom)
    wait(Freya::Camera_Frame_Speed)
    item = @subject.current_action.item
    @log_window.display_use_item(@subject, item)
    @subject.use_item(item)
    refresh_status
    targets = @subject.current_action.make_targets.compact
    camera.look(targets,Freya::Take_Zoom)
    wait(Freya::Camera_Frame_Speed)
    show_animation(targets, item.animation_id)
    targets.each {|target| item.repeats.times { invoke_item(target, item) } }
    camera.center
  end
  #--------------------------------------------------------------------------
  # ☆ 应用技能/物品效果
  #--------------------------------------------------------------------------
  alias apply_item_effects_freya_camera apply_item_effects
  def apply_item_effects(target, item)
    camera.look(target, Freya::Take_Zoom)
    wait(Freya::Camera_Frame_Speed)
    apply_item_effects_freya_camera(target, item)
  end
  #--------------------------------------------------------------------------
  # ☆ 发动反击
  #--------------------------------------------------------------------------
  alias invoke_counter_attack_freya_camera invoke_counter_attack
  def invoke_counter_attack(target, item)
    camera.look(target, Freya::Take_Zoom)
    wait(Freya::Camera_Frame_Speed)
    invoke_counter_attack_freya_camera(target, item)
  end
  #--------------------------------------------------------------------------
  # ☆ 发动反射魔法攻击
  #--------------------------------------------------------------------------
  alias invoke_magic_reflection_freya_camera invoke_magic_reflection
  def invoke_magic_reflection(target, item)
    camera.look(target, Freya::Take_Zoom)
    wait(Freya::Camera_Frame_Speed)
    invoke_magic_reflection_freya_camera(target, item)
  end
  #--------------------------------------------------------------------------
  # ☆ 显示普通动画
  #--------------------------------------------------------------------------
  def show_normal_animation(targets, animation_id, mirror = false)
    animation = $data_animations[animation_id]
    if animation
      camera.center if animation.to_screen?
      targets.each do |target|
        camera.look(target, Freya::Take_Zoom) unless animation.to_screen?
        target.animation_id = animation_id
        target.animation_mirror = mirror
        abs_wait_short unless animation.to_screen?
      end
      abs_wait_short if animation.to_screen?
    end
  end
end
[/pre]



@taroxd  
@VIPArcher @熊喵酱

点评

话说芙蕾娅自己发布的脚本合集了就有修复这倆脚本之间bug的补丁来着,2333333333333  发表于 2014-9-5 13:57
還有其實這兩個腳本衝突應該挺大的 兩個都有在縮放戰鬥圖像  发表于 2014-9-4 13:30
沒有出錯提醒嗎? 試試看把兩個腳本的上下順序改變會怎麼樣?  发表于 2014-9-4 13:27
梦石
0
星屑
50
在线时间
100 小时
注册时间
2014-6-23
回帖
71
 楼主| 发表于 2014-9-4 14:45:54 | 显示全部楼层
顺序调整过也没有效果,如果脚本冲突,那有没有可以一个脚本中同时实现 敌人呼吸和战斗镜头的链接,地球村和图书馆都没有淘到,已解决里似乎大家也不太关心呐

点评

芙蕾娅合集跟别的脚本有冲突,所以只能拆着用.  发表于 2014-9-5 14:00
回复

使用道具 举报

梦石
0
星屑
68
在线时间
585 小时
注册时间
2013-5-25
回帖
1484
发表于 2014-9-4 15:32:16 | 显示全部楼层
顺序没有关系,把脚本 "战斗镜头" 的第245和246行的"="改成" *= " (不带引号

点评

按照我说的相当于只改246行不改245行不会有问题了啦,你确认你是试过了?  发表于 2014-9-4 16:50
你要整合也没问题啦  发表于 2014-9-4 16:48
我是说怪物图,而且镜头会变得好大,这两个脚本可以整合在一起吗?  发表于 2014-9-4 16:44
第245行改成老样子的"="不是"*=",呼吸脚本那边不会还原zoom_x,只改动246行  发表于 2014-9-4 16:43
恩,共存了效果,可是...更改后出现了新问题_战斗镜头在第一次逼近后直接飞出,然后,战斗图就空了.剩余的战斗只能显示余下的血槽.  发表于 2014-9-4 16:39

评分

参与人数 1星屑 +100 梦石 +1 收起 理由
VIPArcher + 100 + 1 中秋快乐

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
100 小时
注册时间
2014-6-23
回帖
71
 楼主| 发表于 2014-9-4 17:04:24 | 显示全部楼层
克莉丝 发表于 2014-9-4 15:32
顺序没有关系,把脚本 "战斗镜头" 的第245和246行的"="改成" *= " (不带引号

恩,试过了...还删掉了一个冲突脚本...
可是还有一个问题...
单独使用正常的的战斗镜头时出现的怪物图是....
11.jpg
但是现在的情况是...
22.jpg
已经不会飞出去了,可是这怪物比例略鬼畜...
该如何修改呢...

点评

因为是无渐进图直接当前地图做背景的战斗画面,所以每次战斗都这样,看着也挺闹心,我不动脚本,瞎动了几条 坐标值(果然是无法解决)  发表于 2014-9-5 02:15
该怎么说呢!还是呼吸 和 镜头锁定的脚本,基本功能都已经实现了,可是在进入画面的时候,怪物图会跳一下,后恢复正常,就是猛的拉长一节,又猛的缩回去.  发表于 2014-9-5 02:12
还想请你帮忙看下另外一个问题。http://rm.66rpg.com/forum.php?mod=viewthread&tid=370773&page=1&extra=#pid2544326  发表于 2014-9-4 17:30
完美解决了我问题,请收下我的膝盖。  发表于 2014-9-4 17:21
直接删除246行.然后没然后了  发表于 2014-9-4 17:15

评分

参与人数 1星屑 +66 收起 理由
克莉丝 + 66 你的膝盖

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
100 小时
注册时间
2014-6-23
回帖
71
 楼主| 发表于 2014-9-5 02:19:10 | 显示全部楼层
本帖最后由 Sence 于 2014-9-7 14:51 编辑
Sence 发表于 2014-9-4 17:04
恩,试过了...还删掉了一个冲突脚本...
可是还有一个问题...
单独使用正常的的战斗镜头时出现的怪物图是. ...


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

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

点评

@taroxd 问题已解决,麻烦归类。  发表于 2014-9-7 14:50
已解决...谢谢.  发表于 2014-9-5 09:32
怪物呼吸 66行 改成 self.zoom_x = 1.0  发表于 2014-9-5 09:25
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部