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

Project1

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

[已经解决] 如何使“战斗镜头”和“敌人动态化”脚本兼容

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
108 小时
注册时间
2010-8-16
帖子
57
跳转到指定楼层
1
发表于 2015-8-18 15:16:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
请问如何使“战斗动态镜头”和“敌人动态化”两个脚本相兼容?
不过如果做起来很复杂的话就不劳烦您了(实在不行就只能舍弃一个了)

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

评分

参与人数 1+1 收起 理由
13176593952 + 1

查看全部评分

Lv2.观梦者

梦石
0
星屑
904
在线时间
246 小时
注册时间
2015-1-24
帖子
112
2
发表于 2015-8-22 22:16:16 | 只看该作者
新建脚本,添加
#==============================================================================
# ■ Spriteset_Battle
#------------------------------------------------------------------------------
#  处理战斗画面的精灵的类。本类在 Scene_Battle 类的内部使用。
#==============================================================================
class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ☆ 刷新敌人坐标
  #--------------------------------------------------------------------------
  def update_enemy_position
    for sprite in @enemy_sprites
      next if sprite.nil? || sprite.battler.nil?
      sprite.zoom_x = @battle_camera.zoom + sprite.zx
      sprite.zoom_y = @battle_camera.zoom + sprite.zy
      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

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 认可答案

查看全部评分

原创恐怖解谜  岛语
   原创悬疑解谜 雪疑
      原创悬疑风格伪R剧 《抉择CHoice》   【黑历史】

             一只来自北方的泥亾工作室,欢迎骚扰
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-1 22:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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