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

Project1

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

敌人的视角缩放脚本使用后某些特技的动画坐标上升了

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
35 小时
注册时间
2008-6-23
帖子
275
跳转到指定楼层
1
发表于 2008-6-24 16:43:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
用了该脚本后,一部分特技动画的位置是正常的,但是另一些特技动画比平时的位置要高出一些,如何调整回以前的样子?


敌人视角缩放和追踪脚本:

  1. module XRXS_BP8
  2.   #
  3.   # カメラ移動スピード基準値 (基本的に小さいほうが速い)
  4.   #
  5.   SPEED = 8
  6.   #
  7.   # XGAサイズを設定
  8.   #
  9.   GA = Rect.new(-192, -144, 1024, 768)
  10. end
  11. #------------------------------------------------------------------------------
  12. # ▽ 可動カメラの動き設定
  13. #------------------------------------------------------------------------------
  14. class Scene_Battle
  15.   #--------------------------------------------------------------------------
  16.   # ● パーティコマンドフェーズ開始
  17.   #--------------------------------------------------------------------------
  18.   alias xrxs_bp8_start_phase2 start_phase2
  19.   def start_phase2
  20.     # カメラ:センタリング
  21.     $xcam.centering
  22.     # 呼び戻す
  23.     xrxs_bp8_start_phase2
  24.   end
  25.   #--------------------------------------------------------------------------
  26.   # ● フレーム更新 (アクターコマンドフェーズ : エネミー選択)
  27.   #--------------------------------------------------------------------------
  28.   alias xrxs_bp8_update_phase3_enemy_select update_phase3_enemy_select
  29.   def update_phase3_enemy_select
  30.     # 現在選択中のエネミーを取得
  31.     enemy = $game_troop.enemies[@enemy_arrow.index]
  32.     # カメラ:注目
  33.     #$xcam.watch_at(enemy.x)
  34.     $xcam.watch(enemy)
  35.     # 戻す
  36.     xrxs_bp8_update_phase3_enemy_select
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● エネミー選択終了
  40.   #--------------------------------------------------------------------------
  41.   alias xrxs_bp8_end_enemy_select end_enemy_select
  42.   def end_enemy_select
  43.     # カメラ:センタリング
  44.     $xcam.centering
  45.     # 呼び戻す
  46.     xrxs_bp8_end_enemy_select
  47.   end
  48.   #--------------------------------------------------------------------------
  49.   # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  50.   #--------------------------------------------------------------------------
  51.   alias xrxs_bp8_update_phase4_step2 update_phase4_step2
  52.   def update_phase4_step2
  53.     # 戻す
  54.     xrxs_bp8_update_phase4_step2
  55.     # ステップ 3 に移行する予定の場合
  56.     if @phase4_step == 3
  57.       # アクティブなバトラーがバトルフィールドに居る場合
  58.       if @active_battler.in_battlefield?
  59.         # カメラ:注目
  60.         $xcam.watch(@active_battler)
  61.       end
  62.     end
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
  66.   #--------------------------------------------------------------------------
  67.   alias xrxs_bp8_update_phase4_step3 update_phase4_step3
  68.   def update_phase4_step3
  69.     # 戻す
  70.     xrxs_bp8_update_phase4_step3
  71.     # カメラターゲットとなりうるターゲットの X 平均値を計算
  72.     x_average  = 0
  73.     number     = 0
  74.     cam_target = nil
  75.     for target in @target_battlers
  76.       if target.in_battlefield?
  77.         x_average += target.x
  78.         number    += 1
  79.         cam_target = target
  80.       end
  81.     end
  82.     # カメラターゲットが見つかった場合
  83.     if number > 0
  84.       # もし対象アニメが「位置:画面」の場合
  85.       animation = $data_animations[@animation2_id]
  86.       if animation != nil and animation.position == 3
  87.         # カメラ:センタリング
  88.         $xcam.centering
  89.         # カメラ:ズームアウト
  90.         $xcam.zoomout
  91.       elsif number == 1
  92.         # カメラ:注目
  93.         $xcam.watch(cam_target)
  94.       else
  95.         # カメラ:指定 X 位置を注目
  96.         $xcam.watch_at(x_average / number)
  97.       end
  98.     end
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● アフターバトルフェーズ開始
  102.   #--------------------------------------------------------------------------
  103.   alias xrxs_bp8_start_phase5 start_phase5
  104.   def start_phase5
  105.     # カメラ:センタリング
  106.     $xcam.centering
  107.     # 呼び戻す
  108.     xrxs_bp8_start_phase5
  109.   end
  110. end
  111. #------------------------------------------------------------------------------
  112. # カスタマイズポイントここまで
  113. #==============================================================================

  114. #------------------------------------------------------------------------------
  115. #
  116. #
  117. #
  118. #    ▽ 可動カメラ システム ▽
  119. #
  120. #
  121. #
  122. #==============================================================================
  123. # □ XCam
  124. #------------------------------------------------------------------------------
  125. #   可動カメラを扱うクラスです。
  126. #==============================================================================
  127. class XCam
  128.   #--------------------------------------------------------------------------
  129.   # ○ 公開インスタンス変数
  130.   #--------------------------------------------------------------------------
  131.   attr_reader   :x
  132.   attr_reader   :y
  133.   attr_reader   :z
  134.   attr_accessor :x_destination
  135.   attr_accessor :y_destination
  136.   attr_accessor :z_destination
  137.   attr_accessor :watch_battler
  138.   attr_accessor :freeze_count
  139.   #--------------------------------------------------------------------------
  140.   # ○ オブジェクト初期化
  141.   #--------------------------------------------------------------------------
  142.   def initialize
  143.     # カメラ初期位置決定
  144.     @x = 320
  145.     @y = 240
  146.     @z = 295
  147.     # カメラ:センタリング
  148.     self.centering
  149.     # 初期化
  150.     @freeze_count = 0
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ○ フレーム更新
  154.   #--------------------------------------------------------------------------
  155.   def update
  156.     @moved = false
  157.     # カメラ位置の更新
  158.     if @freeze_count > 0
  159.       # フリーズカウントを減らす
  160.       @freeze_count -= 1
  161.     else
  162.       # スピードの取得
  163.       speed = XRXS_BP8::SPEED
  164.       # カメラ: Z 座標 (優先)
  165.       z_dest = @z_destination
  166.       if @z != z_dest
  167.         @z = slide(@z, z_dest, 1, 74, 296)
  168.         @moved = true
  169.       end
  170.       # カメラ: X 座標
  171.       x_dest = @watch_battler == nil ? @x_destination : @watch_battler.x
  172.       if @x != x_dest
  173.         maximum = 192 * (296 - @z) / 111 + 320
  174.         minimum = 640 - maximum
  175.         @x = slide(@x, x_dest, 8, minimum, maximum)
  176.         @moved = true
  177.       end
  178.       # カメラ: Y 座標
  179.       y_dest = @watch_battler == nil ? @y_destination : 88 + @watch_battler.y/2
  180.       if @y != y_dest
  181.         maximum = 164 * (296 - @z) / 111 + 240
  182.         minimum = 480 - maximum
  183.         @y = slide(@y, y_dest, 4, minimum, maximum)
  184.         @moved = true
  185.       end
  186.     end
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ○ スライド (現在地・目的地から行くべき現在地を返す)
  190.   #--------------------------------------------------------------------------
  191.   def slide(from, to, move_min, to_min, to_max)
  192.     # 移動距離を計算
  193.     distance = (to - from).abs
  194.     # 結果を判別
  195.     if distance < move_min
  196.       result = to
  197.     else
  198.       sign   = from > to ? -1 : 1
  199.       result = from + sign * [distance / XRXS_BP8::SPEED, move_min].max
  200.     end
  201.     # 範囲によって返却
  202.     return [[result, to_min].max, to_max].min
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ○ 動いたかどうか?
  206.   #--------------------------------------------------------------------------
  207.   def moved?
  208.     return @moved
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ○ センタリング
  212.   #--------------------------------------------------------------------------
  213.   def centering
  214.     @watch_battler = nil
  215.     @x_destination = 320
  216.     @y_destination = 240
  217.     @z_destination = 185
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # ○ ズームアウト
  221.   #--------------------------------------------------------------------------
  222.   def zoomout
  223.     @z_destination = 222
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # ○ バトラーを注目
  227.   #--------------------------------------------------------------------------
  228.   def watch(battler)
  229.     @watch_battler = battler
  230.     @z_destination = 168
  231.   end
  232.   #--------------------------------------------------------------------------
  233.   # ○ 指定 X 位置を注目
  234.   #--------------------------------------------------------------------------
  235.   def watch_at(x)
  236.     @watch_battler = nil
  237.     @x_destination =   x
  238.     @y_destination = 240
  239.     @z_destination = 185
  240.   end
  241. end
  242. #==============================================================================
  243. # ■ Game_Battler
  244. #==============================================================================
  245. class Game_Battler
  246.   #--------------------------------------------------------------------------
  247.   # ○ 公開インスタンス変数
  248.   #--------------------------------------------------------------------------
  249.   attr_reader   :x                        # バトルフィールド 横 位置(+が右 )
  250.   attr_reader   :y                        # バトルフィールド 高さ 位置(+が下 )
  251.   attr_reader   :z                        # バトルフィールド奥行き位置(+が手前)
  252.   attr_accessor :zoom                     # 現在のズーム倍率
  253.   #--------------------------------------------------------------------------
  254.   # ○ バトルフィールド上に居るか?
  255.   #--------------------------------------------------------------------------
  256.   def in_battlefield?
  257.     return false
  258.   end
  259. end
  260. #==============================================================================
  261. # ■ Game_Enemy
  262. #==============================================================================
  263. class Game_Enemy < Game_Battler
  264.   #--------------------------------------------------------------------------
  265.   # ○ バトルフィールド上に居るか? [オーバーライド]
  266.   #--------------------------------------------------------------------------
  267.   def in_battlefield?
  268.     return true
  269.   end
  270.   #--------------------------------------------------------------------------
  271.   # ● オブジェクト初期化
  272.   #--------------------------------------------------------------------------
  273.   alias xrxs_bp8_initialize initialize
  274.   def initialize(troop_id, member_index)
  275.     # 初期化
  276.     @z    = 0
  277.     @zoom = 1.00
  278.     # 呼び戻す
  279.     xrxs_bp8_initialize(troop_id, member_index)
  280.   end
  281.   #--------------------------------------------------------------------------
  282.   # ● バトル画面 X 座標の取得
  283.   #--------------------------------------------------------------------------
  284.   alias x screen_x
  285.   def screen_x
  286.     return self.x if $xcam == nil
  287.     return 320 + (self.x - 320) * self.zoom + (320 - $xcam.x)
  288.   end
  289.   #--------------------------------------------------------------------------
  290.   # ● バトル画面 Y 座標の取得
  291.   #--------------------------------------------------------------------------
  292.   alias y screen_y
  293.   def screen_y
  294.     return self.y if $xcam == nil
  295.     return 240 + (self.y - 240) * self.zoom + (240 - $xcam.y)
  296.   end
  297. end
  298. #==============================================================================
  299. # ■ Spriteset_Battle
  300. #==============================================================================
  301. class Spriteset_Battle
  302.   #--------------------------------------------------------------------------
  303.   # ○ フレーム更新 (可動カメラ)
  304.   #--------------------------------------------------------------------------
  305.   def update_xcam
  306.     # カメラ位置が動いた場合
  307.     if $xcam.moved?
  308.       # カメラ位置からズーム率を計算
  309.       zoom = 185.00 / $xcam.z
  310.       # 背景の設定更新
  311.       @battleback_sprite.zoom_x = zoom
  312.       @battleback_sprite.zoom_y = zoom
  313.       @battleback_sprite.x      = -($xcam.x - 320) * zoom - 512 * (zoom - 1)
  314.       @battleback_sprite.y      = -($xcam.y - 240) * zoom - 384 * (zoom - 1)
  315.     end
  316.   end
  317. end
  318. #==============================================================================
  319. # --- バトラースプライト・可動カメラ適用 ---
  320. #==============================================================================
  321. module XRXS_Cam_Deal
  322.   def update
  323.     # 呼び戻す
  324.     super
  325.     # バトラーがバトルフィールドにいない場合は終了
  326.     return if @battler == nil or not @battler.in_battlefield?
  327.     # カメラ Z 座標の取得
  328.     cam_z = $xcam == nil ? 185 : $xcam.z
  329.     #
  330.     # ズーム率の変更
  331.     # ( スプライト座標の再設定は元のメソッドに任せる )
  332.     #
  333.     zoom = 1.00 * 185 / (cam_z - @battler.z)
  334.     self.zoom_x   = zoom
  335.     self.zoom_y   = zoom
  336.     @battler.zoom = zoom
  337.   end
  338. end
  339. class Sprite_Battler < RPG::Sprite
  340.   include XRXS_Cam_Deal
  341. end
  342. #==============================================================================
  343. # --- ダメージフォロー モジュール ---
  344. #==============================================================================
  345. module XRXS_DamageFollow
  346.   def update
  347.     # 呼び戻す
  348.     super
  349.     # カメラが存在しない場合
  350.     return if $xcam == nil
  351.     # バトラーが nil またはバトルフィールドにいない場合
  352.     return if @battler == nil or not @battler.in_battlefield?
  353.     # 直前カメラ位置から、移動量を算出
  354.     x_moved = @last_cam_x == nil ? 0 : $xcam.x - @last_cam_x
  355.     y_moved = @last_cam_y == nil ? 0 : $xcam.y - @last_cam_y
  356.     # ダメージスプライト配列の作成
  357.     damage_sprites  = [@_damage_sprite]
  358.     damage_sprites += @damage_sprites if @damage_sprites != nil
  359.     # カメラをフォロー
  360.     for sprite in damage_sprites
  361.       next if sprite == nil
  362.       next if sprite.disposed?
  363.       sprite.x -= x_moved
  364.       sprite.y -= y_moved
  365.     end
  366.     # 直前カメラ位置の保持
  367.     @last_cam_x = $xcam.x
  368.     @last_cam_y = $xcam.y
  369.   end
  370. end
  371. class Sprite_Battler < RPG::Sprite
  372.   include XRXS_DamageFollow
  373. end
  374. #==============================================================================
  375. # ■ Scene_Battle
  376. #==============================================================================
  377. class Scene_Battle
  378.   #--------------------------------------------------------------------------
  379.   # ● メイン処理
  380.   #--------------------------------------------------------------------------
  381.   alias xrxs_bp8_main main
  382.   def main
  383.     # 可動カメラの生成
  384.     $xcam = XCam.new
  385.     # 戻す
  386.     xrxs_bp8_main
  387.     # 可動カメラの解放
  388.     $xcam = nil
  389.   end
  390.   #--------------------------------------------------------------------------
  391.   # ● フレーム更新
  392.   #--------------------------------------------------------------------------
  393.   alias xrxs_bp8_update update
  394.   def update
  395.     # 可動カメラのフレーム更新
  396.     $xcam.update
  397.     # 呼び戻す
  398.     xrxs_bp8_update
  399.   end
  400. end



  401. #------------------------------------------------------------------------------
  402. #
  403. #
  404. #
  405. #    ▽ Full-View システム ▽
  406. #
  407. #
  408. #
  409. #==============================================================================
  410. # ■ Spriteset_Battle
  411. #==============================================================================
  412. class Spriteset_Battle
  413.   #--------------------------------------------------------------------------
  414.   # ● オブジェクト初期化
  415.   #--------------------------------------------------------------------------
  416.   alias xrxs_bp8_initialize initialize
  417.   def initialize
  418.     # 呼び戻す
  419.     xrxs_bp8_initialize
  420.     # グラフィックスアレイを取得
  421.     ga = XRXS_BP8::GA
  422.     # ビューポート 0 を作成
  423.     @viewport0 = Viewport.new(ga.x, ga.y, ga.width, ga.height)
  424.     @viewport0.z  = 0
  425.     # ビューポート 1 の設定を変更
  426.     @viewport1.z += 1
  427.     @viewport1.rect.height = 480
  428.     # バトルバックスプライトを再作成 (ビューポート 0 を使用)
  429.     @battleback_sprite.dispose
  430.     @battleback_sprite = Sprite.new(@viewport0)
  431.     @battleback_name = ""
  432.     # バトルバックのフレーム更新
  433.     update_battleback
  434.   end
  435.   #--------------------------------------------------------------------------
  436.   # ● 解放
  437.   #--------------------------------------------------------------------------
  438.   alias xrxs_bp8_dispose dispose
  439.   def dispose
  440.     # 呼び戻す
  441.     xrxs_bp8_dispose
  442.     # ビューポートを解放
  443.     @viewport0.dispose
  444.   end
  445.   #--------------------------------------------------------------------------
  446.   # ● フレーム更新
  447.   #--------------------------------------------------------------------------
  448.   alias xrxs_bp8_update update
  449.   def update
  450.     # フレーム更新 (バトルバック)
  451.     update_battleback
  452.     # フレーム更新 (可動カメラ)
  453.     update_xcam if defined? update_xcam
  454.     # 呼び戻す
  455.     xrxs_bp8_update
  456.     # 画面のシェイク位置を設定
  457.     @viewport0.ox = $game_screen.shake if @viewport0 != nil
  458.   end
  459.   #--------------------------------------------------------------------------
  460.   # ○ フレーム更新 (バトルバック)
  461.   #--------------------------------------------------------------------------
  462.   def update_battleback
  463.     # バトルバックのファイル名が現在のものと違う場合
  464.     if @battleback_name != $game_temp.battleback_name
  465.       @battleback_name = $game_temp.battleback_name
  466.       if @battleback_sprite.bitmap != nil
  467.         @battleback_sprite.bitmap.dispose
  468.       end
  469.       # グラフィックスアレイを取得
  470.       ga = XRXS_BP8::GA
  471.       # バトルバックの取得と拡大
  472.       bg   = RPG::Cache.battleback(@battleback_name)
  473.       xga  = Bitmap.new(ga.width, ga.height)
  474.       xga.stretch_blt(xga.rect, bg, bg.rect)
  475.       # XGAをバトルバックに設定
  476.       @battleback_sprite.bitmap = xga
  477.     end
  478.   end
  479. end
  480. #==============================================================================
  481. # ---「戦闘中の"画面"アニメの位置修正」モジュール ---
  482. #==============================================================================
  483. module XRXS_FullScreen_AnimationOffset
  484.   def animation_set_sprites(sprites, cell_data, position)
  485.     super
  486.     for i in 0..15
  487.       sprite = sprites[i]
  488.       pattern = cell_data[i, 0]
  489.       if sprite == nil or pattern == nil or pattern == -1
  490.         next
  491.       end
  492.       if position == 3
  493.         if self.viewport != nil
  494.           sprite.y = 160 # この一行だけ変更
  495.         end
  496.       end
  497.     end
  498.   end
  499. end
  500. class Sprite_Battler < RPG::Sprite
  501.   include XRXS_FullScreen_AnimationOffset
  502. end
复制代码




版务信息:本贴由楼主自主结贴~
HзO

Lv1.梦旅人

梦石
0
星屑
50
在线时间
35 小时
注册时间
2008-6-23
帖子
275
2
 楼主| 发表于 2008-6-25 23:23:43 | 只看该作者
顶~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
142
在线时间
264 小时
注册时间
2006-11-22
帖子
1057
3
发表于 2008-6-25 23:30:07 | 只看该作者
刪去:
module XRXS_FullScreen_AnimationOffset
  def animation_set_sprites(sprites, cell_data, position)
    super
    for i in 0..15
      sprite = sprites
      pattern = cell_data[i, 0]
      if sprite == nil or pattern == nil or pattern == -1
        next
      end
      if position == 3
        if self.viewport != nil
          sprite.y = 160 # この一行だけ変更
        end
      end
    end
  end
end
class Sprite_Battler < RPG::Sprite
  include XRXS_FullScreen_AnimationOffset
end

系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
35 小时
注册时间
2008-6-23
帖子
275
4
 楼主| 发表于 2008-6-25 23:37:45 | 只看该作者
删去以后特技动画的位置又偏下了

成这样了...
HзO
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
35 小时
注册时间
2008-6-23
帖子
275
5
 楼主| 发表于 2008-6-26 16:40:13 | 只看该作者
晕!我好像没认可啊~~~{/ll}
HзO
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
35 小时
注册时间
2008-6-23
帖子
275
6
 楼主| 发表于 2008-6-26 23:27:27 | 只看该作者
怎么自动认可了?{/jy}
HзO
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-8-8 01:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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