Project1

标题: 有没有非RTAB战斗系统的敌人近大远小和视角追踪功能 [打印本页]

作者: stella    时间: 2008-4-2 22:39
标题: 有没有非RTAB战斗系统的敌人近大远小和视角追踪功能
类似下面这个RTAB战斗效果中敌人的近大远小和视角追踪功能

RTAB战斗系统原生版 Ver1.16
http://rpg.blue/web/htm/news49.htm [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: asperta    时间: 2008-4-2 23:50
http://rpg.blue/web/htm/news271.htm
作者: stella    时间: 2008-4-2 23:52

或者说,如何把近大远小和视角追踪功能从上面的RTAB范例中独立出来,作为非RTAB游戏的功能??
作者: asperta    时间: 2008-4-2 23:54
直接把脚本内容插入到main前面即可!
作者: stella    时间: 2008-4-2 23:57
。。。那个没有对选中敌人的视角追踪效果吧?而且,我只想在战斗中有这种效果
作者: asperta    时间: 2008-4-2 23:59
http://rpg.blue/web/htm/news875.htm
作者: stella    时间: 2008-4-3 00:06
这是两种效果吧,我要的是角色不放缩,只有攻击敌人时敌人的图片放大,随着敌人的选择,战斗画面会左右平移。和范例中的一模一样,只不过是回合制的
作者: asperta    时间: 2008-4-3 00:15
http://rpg.blue/web/htm/news831.htm
作者: asperta    时间: 2008-4-3 00:16
终于弄出来了,你想要的完美的视角追踪功能!!!!!!
  1. # ▼▲▼ XRXS_BP 8. バトルバック・Full-View+可動カメラ ver.2 ▼▲▼ built 102523
  2. # by 桜雅 在土

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

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



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




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