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

Project1

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

怎样做出漂流幻境战斗攻击时时画面移动的效果?

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
4 小时
注册时间
2008-8-24
帖子
49
跳转到指定楼层
1
发表于 2009-3-26 02:01:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
怎样做出漂流幻境战斗攻击时画面跟随角色移动的效果?
此贴于 2009-3-25 18:16:37 被版主redant提醒,请楼主看到后对本贴做出回应。
版务信息:本贴由楼主自主结贴~
头像被屏蔽

Lv1.梦旅人 (禁止发言)

UltraDevil

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-3-9
帖子
262
2
发表于 2009-3-26 02:02:54 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

蚂蚁卡卡

梦石
0
星屑
116
在线时间
66 小时
注册时间
2007-12-16
帖子
3081
3
发表于 2009-3-26 02:15:44 | 只看该作者
没玩过LZ 所说的游戏 请截图说明
《隋唐乱》完整解密版点击进入
米兰,让我怎么说离开……

曾经我也是一个有志青年,直到我膝盖中了一箭……

《隋唐乱》博客地址
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
256 小时
注册时间
2008-8-1
帖子
532
4
发表于 2009-3-26 02:25:47 | 只看该作者
下面的可以实现战斗时背景移动,不只到适不适合你,也可能会有冲突,
  1. # ————————————————————————————————————
  2. # 本脚本来自www.66rpg.com,转载请保留此信息
  3. # ————————————————————————————————————

  4. # ▼▲▼ XRXS_BP 8. バトルバック?Full-View+可動カメラ ver..05d ▼▲▼
  5. # by 桜雅 在土

  6. #==============================================================================
  7. # ■ Game_Battler
  8. #==============================================================================
  9. class Game_Battler
  10. #--------------------------------------------------------------------------
  11. # ● 追加?公開インスタンス変数
  12. #--------------------------------------------------------------------------
  13. attr_accessor :x_pos # バトルフィールド 横 位置(+が右 )
  14. attr_accessor :y_pos # バトルフィールド 高さ 位置(+が上 )
  15. attr_accessor :z_pos # バトルフィールド奥行き位置(+が手前)
  16. attr_accessor :zoom # 現在のズーム倍率
  17. end
  18. #==============================================================================
  19. # ■ Game_Actor
  20. #==============================================================================
  21. class Game_Actor < Game_Battler
  22. #--------------------------------------------------------------------------
  23. # ● 追加?公開インスタンス変数
  24. #--------------------------------------------------------------------------
  25. attr_reader :actor_in_battlefield # アクターもフィールドに
  26. #--------------------------------------------------------------------------
  27. # ● セットアップ
  28. #--------------------------------------------------------------------------
  29. alias xrxs_bp8_setup setup
  30. def setup(actor_id)
  31.    xrxs_bp8_setup(actor_id)
  32.    # 機能"アクターもフィールドに"
  33.    # trueを優先する
  34.    @actor_in_battlefield = false if @actor_in_battlefield != true
  35. end
  36. end
  37. #==============================================================================
  38. # ■ Game_Enemy
  39. #==============================================================================
  40. class Game_Enemy < Game_Battler
  41. #--------------------------------------------------------------------------
  42. # ● 追加?公開インスタンス変数
  43. #--------------------------------------------------------------------------
  44. attr_reader :actor_in_battlefield # アクターもフィールドに
  45. #--------------------------------------------------------------------------
  46. # ● オブジェクト初期化
  47. #--------------------------------------------------------------------------
  48. alias xrxs_bp8_initialize initialize
  49. def initialize(troop_id, member_index)
  50.    @actor_in_battlefield = false
  51.    @x_pos = $data_troops[troop_id].members[member_index].x - 320
  52.    @y_pos = -($data_troops[troop_id].members[member_index].y - 304)
  53.    @field_x_offset = -192
  54.    @field_y_offset = -144
  55.    @z_pos = 0
  56.    @zoom = 1.00
  57.    xrxs_bp8_initialize(troop_id, member_index)
  58. end
  59. #--------------------------------------------------------------------------
  60. # ● バトル画面 X 座標の取得
  61. #--------------------------------------------------------------------------
  62. def screen_x
  63.    $xcam_x = 0 if $xcam_x == nil
  64.    return 320 - @field_x_offset + (@x_pos.to_i - $xcam_x) * @zoom
  65. end
  66. #--------------------------------------------------------------------------
  67. # ● バトル画面 Y 座標の取得
  68. #--------------------------------------------------------------------------
  69. def screen_y
  70.    $xcam_y = 0 if $xcam_y == nil
  71.    return 240 - @field_y_offset + (-@y_pos.to_i + 64 + $xcam_y) * @zoom
  72. end
  73. end
  74. #==============================================================================
  75. # ■ Sprite_Battler
  76. #==============================================================================
  77. class Sprite_Battler < RPG::Sprite
  78. #--------------------------------------------------------------------------
  79. # ● フレーム更新
  80. #--------------------------------------------------------------------------
  81. alias xrxs_bp8_update update
  82. def update
  83.    # 初期化
  84.    @z_offset = 0
  85.    # 戻す
  86.    xrxs_bp8_update
  87.    # バトラーが nil の場合戻る
  88.    return if @battler == nil
  89.    # 敵のみにカメラが影響。
  90.    # 見方もバトルフィールドにいる場合ここの if を外す。
  91.    if (@battler.is_a?(Game_Actor) and @battler.actor_in_battlefield) or @battler.is_a?(Game_Enemy)
  92.      # ズーム率
  93.      zoom = 1.00 * 185 / (($xcam_z != nil ? $xcam_z : 185) - @z_offset)
  94.      self.zoom_x = zoom
  95.      self.zoom_y = zoom
  96.      @battler.zoom = zoom
  97.      # スプライトの座標を設定
  98.      self.x = @battler.screen_x
  99.      self.y = @battler.screen_y
  100.      self.z = @battler.screen_z
  101.    end
  102. end
  103. end
  104. #==============================================================================
  105. # ■ Spriteset_Battle
  106. #==============================================================================
  107. class Spriteset_Battle
  108. #--------------------------------------------------------------------------
  109. # ● オブジェクト初期化
  110. #--------------------------------------------------------------------------
  111. alias xrxs_bp8_initialize initialize
  112. def initialize
  113.    # 初期化
  114.    @now_bg_x = -1
  115.    @now_bg_y = -1
  116.    @now_bg_z = -1
  117.    # 通常時の実行
  118.    xrxs_bp8_initialize
  119.    # ビューポートを作成
  120.    @viewport1 = Viewport.new(-192, -144, 1024, 768)
  121.    # バトルバックスプライトを作成
  122.    @battleback_sprite = Sprite.new(@viewport1)
  123.    @battleback_name = ""
  124.    # エネミースプライトを作成
  125.    @enemy_sprites = []
  126.    for enemy in $game_troop.enemies.reverse
  127.      @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
  128.    end
  129.    # 天候を作成
  130.    @weather = RPG::Weather.new(@viewport1)
  131.    # フレーム更新
  132.    update
  133. end
  134. #--------------------------------------------------------------------------
  135. # ● フレーム更新
  136. #--------------------------------------------------------------------------
  137. alias xrxs_bp8_update update
  138. def update
  139.    # バトルバックのファイル名が現在のものと違う場合
  140.    if @battleback_name != $game_temp.battleback_name
  141.      @battleback_name = $game_temp.battleback_name
  142.      if @battleback_sprite.bitmap != nil
  143.        @battleback_sprite.bitmap.dispose
  144.      end
  145.      bg_bitmap = RPG::Cache.battleback(@battleback_name)
  146.      bg_bitmap_stretch = Bitmap.new(1024, 768)
  147.      bg_bitmap_stretch.stretch_blt(Rect.new(0, 0, 1024, 768), bg_bitmap, bg_bitmap.rect)
  148.      @battleback_sprite.bitmap = bg_bitmap_stretch
  149.    end
  150.    # カメラ位置が動いた場合
  151.    if @now_bg_x != $xcam_x or @now_bg_y != $xcam_y or @now_bg_z != $xcam_z
  152.      # ズーム率
  153.      zoom = 1.00 * 185 / $xcam_z
  154.      @battleback_sprite.zoom_x = zoom
  155.      @battleback_sprite.zoom_y = zoom
  156.      # カメラzによる位置の修正
  157.      maximum = 192 * (296 - $xcam_z) / 111
  158.      $xcam_x = [[$xcam_x, -maximum].max, maximum].min
  159.      # 背景位置更新
  160.      @battleback_sprite.x = -$xcam_x * zoom - 512 * (zoom - 1)
  161.      @battleback_sprite.y = $xcam_y * zoom - 384 * (zoom - 1)
  162.      # 値更新
  163.      @now_bg_x = $xcam_x
  164.      @now_bg_y = $xcam_y
  165.      @now_bg_z = $xcam_z
  166.    end
  167.    # 戻す
  168.    xrxs_bp8_update
  169. end
  170. end
  171. #==============================================================================
  172. # ■ Scene_Battle
  173. #==============================================================================
  174. class Scene_Battle
  175. #--------------------------------------------------------------------------
  176. # ● メイン処理
  177. #--------------------------------------------------------------------------
  178. alias xrxs_bp8_main main
  179. def main
  180.    # カメラ初期位置決定
  181.    $xcam_x = 0
  182.    $xcam_y = 0
  183.    $xcam_z = 295
  184.    # カメラの最初の目的値
  185.    @xcam_x_destination = 0
  186.    @xcam_y_destination = 0
  187.    @xcam_z_destination = 185
  188.    # 今、注目バトラーは無し。
  189.    @xcam_watch_battler = nil
  190.    # 初期化
  191.    @wait_count_xcam = 0
  192.    # 戻す
  193.    xrxs_bp8_main
  194. end
  195. #--------------------------------------------------------------------------
  196. # ● フレーム更新
  197. #--------------------------------------------------------------------------
  198. alias xrxs_bp8_update update
  199. def update
  200.    # カメラ位置の更新。
  201.    if @wait_count_xcam > 0
  202.    # ウェイトカウントを減らす
  203.    @wait_count_xcam -= 1
  204.    else
  205.      # カメラ: Z 座標
  206.      if $xcam_z != @xcam_z_destination
  207.        if $xcam_z < @xcam_z_destination
  208.          distance = [(@xcam_z_destination - $xcam_z)/8, 1].max
  209.        else
  210.          distance = [(@xcam_z_destination - $xcam_z)/8, -1].min
  211.        end
  212.        $xcam_z = [[$xcam_z + distance, 74].max, 296].min
  213.      end
  214.      # カメラ: X 座標
  215.      if @xcam_watch_battler != nil
  216.        if $xcam_x != @xcam_watch_battler.x_pos
  217.          if ($xcam_x - @xcam_watch_battler.x_pos).abs < 8
  218.            distance = @xcam_watch_battler.x_pos - $xcam_x
  219.          elsif $xcam_x < @xcam_watch_battler.x_pos
  220.            distance = [(@xcam_watch_battler.x_pos - $xcam_x)/8, 8].max
  221.          else
  222.            distance = [(@xcam_watch_battler.x_pos - $xcam_x)/8, -8].min
  223.          end
  224.        maximum = 192 * (296 - $xcam_z) / 111
  225.        $xcam_x = [[$xcam_x + distance, -maximum].max, maximum].min
  226.        end
  227.      elsif $xcam_x != @xcam_x_destination
  228.        if ($xcam_x - @xcam_x_destination).abs < 8
  229.          distance = @xcam_x_destination - $xcam_x
  230.        elsif $xcam_x < @xcam_x_destination
  231.          distance = [(@xcam_x_destination - $xcam_x)/8, 8].max
  232.        else
  233.          distance = [(@xcam_x_destination - $xcam_x)/8, -8].min
  234.        end
  235.        maximum = 192 * (296 - $xcam_z) / 111
  236.        $xcam_x = [[$xcam_x + distance, -maximum].max, maximum].min
  237.      end
  238.      # カメラ: Y 座標
  239.      if @xcam_watch_battler != nil
  240.      y = @xcam_watch_battler.y_pos/2
  241.        if $xcam_y != y
  242.          if ($xcam_y - y).abs < 8
  243.            distance = y - $xcam_y
  244.          elsif $xcam_y < y
  245.            distance = [(y - $xcam_y)/8, 8].max
  246.          else
  247.            distance = [(y - $xcam_y)/8, -8].min
  248.          end
  249.        maximum = 144 * (296 - $xcam_z) / 111
  250.        $xcam_y = [[$xcam_y + distance, -maximum].max, maximum].min
  251.        end
  252.      elsif $xcam_y != @xcam_y_destination
  253.        if $xcam_y < @xcam_y_destination
  254.          distance = [(@xcam_y_destination - $xcam_y)/8, 1].max
  255.        else
  256.          distance = [(@xcam_y_destination - $xcam_y)/8, -1].min
  257.        end
  258.        maximum = 164 * (296 - $xcam_z) / 111
  259.        $xcam_y = [[$xcam_y + distance, -maximum].max, maximum].min
  260.      end
  261.    end
  262.    # 通常実行
  263.    xrxs_bp8_update
  264. end
  265. #--------------------------------------------------------------------------
  266. # ● パーティコマンドフェーズ開始
  267. #--------------------------------------------------------------------------
  268. alias xrxs_bp8_start_phase2 start_phase2
  269. def start_phase2
  270.    # カメラ:センタリング
  271.    @xcam_watch_battler = nil
  272.    @xcam_x_destination = 0
  273.    @xcam_z_destination = 185
  274.    # 戻す
  275.    xrxs_bp8_start_phase2
  276. end
  277. #--------------------------------------------------------------------------
  278. # ● フレーム更新 (アクターコマンドフェーズ)
  279. #--------------------------------------------------------------------------
  280. alias xrxs_bp8_update_phase3 update_phase3
  281. def update_phase3
  282.    # カメラをキャラ位置へ
  283.    if @active_battler != nil and @active_battler.actor_in_battlefield
  284.      @xcam_x_destination = @active_battler.x_pos
  285.      @xcam_z_destination = 175
  286.    end
  287.    xrxs_bp8_update_phase3
  288. end
  289. #--------------------------------------------------------------------------
  290. # ● フレーム更新 (アクターコマンドフェーズ : エネミー選択)
  291. #--------------------------------------------------------------------------
  292. alias xrxs_bp8_update_phase3_enemy_select update_phase3_enemy_select
  293. def update_phase3_enemy_select
  294.    # カメラ:敵ターゲットをズームアップ
  295.    @xcam_x_destination = $game_troop.enemies[@enemy_arrow.index].x_pos * $game_troop.enemies[@enemy_arrow.index].zoom
  296.    @xcam_z_destination = 175
  297.    # 戻す
  298.    xrxs_bp8_update_phase3_enemy_select
  299. end
  300. #--------------------------------------------------------------------------
  301. # ● エネミー選択終了
  302. #--------------------------------------------------------------------------
  303. alias xrxs_bp8_end_enemy_select end_enemy_select
  304. def end_enemy_select
  305.    # カメラ:中心へ
  306.    @xcam_x_destination = 0
  307.    @xcam_z_destination = 185
  308.    # 戻す
  309.    xrxs_bp8_end_enemy_select
  310. end
  311. #--------------------------------------------------------------------------
  312. # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  313. #--------------------------------------------------------------------------
  314. alias xrxs_bp8_update_phase4_step2 update_phase4_step2
  315.    def update_phase4_step2
  316.    # 戻す
  317.    xrxs_bp8_update_phase4_step2
  318.    # ステップ 3 に移行する場合
  319.    if @phase4_step == 3
  320.      if @active_battler.is_a?(Game_Enemy) or @active_battler.actor_in_battlefield
  321.        # カメラ:行動バトラーへのズームアップを予約
  322.        @xcam_x_destination = @active_battler.x_pos * @active_battler.zoom if @active_battler.x_pos != nil
  323.        @xcam_z_destination = 175
  324.      end
  325.      # 最低 20 フレーム待つ
  326.      @wait_count = 20
  327.    end
  328. end
  329. #--------------------------------------------------------------------------
  330. # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
  331. #--------------------------------------------------------------------------
  332. alias xrxs_bp8_update_phase4_step3 update_phase4_step3
  333. def update_phase4_step3
  334.    # 戻す
  335.    xrxs_bp8_update_phase4_step3
  336.    if @target_battlers.size > 0 and
  337.      (@target_battlers[0].is_a?(Game_Enemy) or @target_battlers[0].actor_in_battlefield)
  338.      # カメラ:ターゲットへのズームアップを予約
  339.      @xcam_x_destination = @target_battlers[0].x_pos * @target_battlers[0].zoom if @target_battlers[0] != nil
  340.      @xcam_z_destination = 185
  341.      # もし対象アニメが「位置:画面」のものの場合
  342.      if @animation2_id > 0 and $data_animations[@animation2_id].position == 3
  343.        # カメラをセンタリング
  344.        @xcam_x_destination = 0
  345.        # ズームアウトまでやっちゃう?w?
  346.        @xcam_z_destination = 222
  347.      end
  348.    end
  349.    # 最低 20 フレーム待つ
  350.    @wait_count = 20
  351. end
  352. #--------------------------------------------------------------------------
  353. # ● アフターバトルフェーズ開始
  354. #--------------------------------------------------------------------------
  355. alias xrxs_bp8_start_phase5 start_phase5
  356. def start_phase5
  357.    @xcam_z_destination = 185
  358.    xrxs_bp8_start_phase5
  359. end
  360. end
  361. #==============================================================================
  362. # ◇ RPG::再定義「戦闘中の"画面"アニメの位置修正」
  363. #==============================================================================
  364. module RPG
  365. class Sprite < ::Sprite
  366.    def animation_set_sprites(sprites, cell_data, position)
  367.      for i in 0..15
  368.      sprite = sprites[i]
  369.      pattern = cell_data[i, 0]
  370.      if sprite == nil or pattern == nil or pattern == -1
  371.        sprite.visible = false if sprite != nil
  372.        next
  373.      end
  374.      sprite.visible = true
  375.      sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  376.      if position == 3
  377.        if self.viewport != nil
  378.          if $scene.is_a?(Scene_Battle)
  379.            sprite.x = self.viewport.rect.width / 2
  380.            sprite.y = 304
  381.          else
  382.            sprite.x = self.viewport.rect.width / 2
  383.            sprite.y = self.viewport.rect.height - 160
  384.          end
  385.        else
  386.          sprite.x = 320
  387.          sprite.y = 240
  388.        end
  389.      else
  390.        sprite.x = self.x - self.ox + self.src_rect.width / 2
  391.        sprite.y = self.y - self.oy + self.src_rect.height / 2
  392.        sprite.y -= self.src_rect.height / 4 if position == 0
  393.        sprite.y += self.src_rect.height / 4 if position == 2
  394.      end
  395.      sprite.x += cell_data[i, 1]
  396.      sprite.y += cell_data[i, 2]
  397.      sprite.z = 2000
  398.      sprite.ox = 96
  399.      sprite.oy = 96
  400.      sprite.zoom_x = cell_data[i, 3] / 100.0
  401.      sprite.zoom_y = cell_data[i, 3] / 100.0
  402.      sprite.angle = cell_data[i, 4]
  403.      sprite.mirror = (cell_data[i, 5] == 1)
  404.      sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  405.      sprite.blend_type = cell_data[i, 7]
  406.      end
  407.    end
  408. end
  409. end
复制代码

系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
《神雕侠侣后传》预告系统:完全鼠标操作。战斗:全动画CP制战斗。系统:100%,已完成。素材:人物60%,地图20%剧情:20%。CG动画:100%。http://rpg.blue/forumTopicR ... 2%2D23+21%3A42%3A05
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
350
在线时间
0 小时
注册时间
2009-6-12
帖子
3
5
发表于 2009-3-26 06:06:38 | 只看该作者
{/pz}{/pz}
版主对此帖的评论:『发广告的人,还无意义回复』,积分『-50』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-16 17:04

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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