¡Bienvenido a Universo Maker!
¿Es esta la primera vez que visitas el foro? Si es así te recomendamos que te registres para tener completo acceso a todas las áreas y secciones del foro, así también podrás participar activamente en la comunidad. Si ya tienes una cuenta, conéctate cuanto antes.
Iniciar Sesión Registrarme

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo Mensaje [Página 1 de 1.]

#1Editar Zoom batalla (El angulo pega un "salto") Empty Editar Zoom batalla (El angulo pega un "salto") el Miér Dic 24, 2014 6:53 pm

Ledai

Ledai
Me he dado cuenta gracias a Wecoc de que al usar este script de Zoom en batalla tiene lugar un "salto" que desmejora el resultado del script

El tema es que al terminar de seleccionar al enemigo o al personaje que quieres que sea atacado o cuarado; el angulo de cámara pega un salto absurdo antes de regresar a ese enemigo, y la verdad es que no tiene sentido que haga eso... así que me gustaría que una de dos, o no lo hiciera o que lo hiciera más lento, para que por lo menos no se note tan: FLASS... PUM!!

Dejo el Script:
Código:
# La 'vue' du joueur n'est plus fixe pendant les combats.
# Krazplay
#==============================================================================
# □ カスタマイズポイント
#==============================================================================
module XRXS_BP8
  #
  # カメラ移動スピード基準値 (基本的に小さいほうが速い)
  #
  SPEED = 8
  #
  # XGAサイズを設定
  #
  GA = Rect.new(-192, -144, 1024, 768)
end
#------------------------------------------------------------------------------
# ▽ 可動カメラの動き設定
#------------------------------------------------------------------------------
class Scene_Battle
  #--------------------------------------------------------------------------
  # ● パーティコマンドフェーズ開始
  #--------------------------------------------------------------------------
  alias xrxs_bp8_start_phase2 start_phase2
  def start_phase2
    # カメラ:センタリング
    $xcam.centering
    # 呼び戻す
    xrxs_bp8_start_phase2
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (アクターコマンドフェーズ : エネミー選択)
  #--------------------------------------------------------------------------
  
  # Wecoc edit 1
  alias xrxs_bp8_update_phase3_actor_select update_phase3_actor_select
  def update_phase3_actor_select
    actor = $game_party.actors[@actor_arrow.index]
    $xcam.watch(actor)
    xrxs_bp8_update_phase3_actor_select
  end
  
  alias xrxs_bp8_update_phase3_enemy_select update_phase3_enemy_select
  def update_phase3_enemy_select
    enemy = $game_troop.enemies[@enemy_arrow.index]
    $xcam.watch(enemy)
    xrxs_bp8_update_phase3_enemy_select
  end
  #--------------------------------------------------------------------------
  # ● エネミー選択終了
  #--------------------------------------------------------------------------
  
  # Wecoc edit 2
  alias xrxs_bp8_end_actor_select end_actor_select
  def end_actor_select
    $xcam.centering
    xrxs_bp8_end_actor_select
  end

  alias xrxs_bp8_end_enemy_select end_enemy_select
  def end_enemy_select
    $xcam.centering
    xrxs_bp8_end_enemy_select
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  #--------------------------------------------------------------------------
  alias xrxs_bp8_update_phase4_step2 update_phase4_step2
  def update_phase4_step2
    # 戻す
    xrxs_bp8_update_phase4_step2
    # ステップ 3 に移行する予定の場合
    if @phase4_step == 3
      # アクティブなバトラーがバトルフィールドに居る場合
      if @active_battler.in_battlefield?
        # カメラ:注目
        $xcam.watch(@active_battler)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
  #--------------------------------------------------------------------------
  alias xrxs_bp8_update_phase4_step3 update_phase4_step3
  def update_phase4_step3
    # 戻す
    xrxs_bp8_update_phase4_step3
    # カメラターゲットとなりうるターゲットの X 平均値を計算
    x_average  = 0
    number    = 0
    cam_target = nil
    for target in @target_battlers
      if target.in_battlefield?
        x_average += target.x
        number    += 1
        cam_target = target
      end
    end
    # カメラターゲットが見つかった場合
    if number > 0
      # もし対象アニメが「位置:画面」の場合
      animation = $data_animations[@animation2_id]
      if animation != nil and animation.position == 3
        # カメラ:センタリング
        $xcam.centering
        # カメラ:ズームアウト
        $xcam.zoomout
      elsif number == 1
        # カメラ:注目
        $xcam.watch(cam_target)
      else
        # カメラ:指定 X 位置を注目
        $xcam.watch_at(x_average / number)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● アフターバトルフェーズ開始
  #--------------------------------------------------------------------------
  alias xrxs_bp8_start_phase5 start_phase5
  def start_phase5
    # カメラ:センタリング
    $xcam.centering
    # 呼び戻す
    xrxs_bp8_start_phase5
  end
end
#------------------------------------------------------------------------------
# カスタマイズポイントここまで
#==============================================================================

#------------------------------------------------------------------------------
#
#
#
#    ▽ 可動カメラ システム ▽
#
#
#
#==============================================================================
# □ XCam
#------------------------------------------------------------------------------
#  可動カメラを扱うクラスです。
#==============================================================================
class XCam
  #--------------------------------------------------------------------------
  # ○ 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader  
  attr_reader  :y
  attr_reader  :z
  attr_accessor :x_destination
  attr_accessor :y_destination
  attr_accessor :z_destination
  attr_accessor :watch_battler
  attr_accessor :freeze_count
  #--------------------------------------------------------------------------
  # ○ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    # カメラ初期位置決定
    @x = 320
    @y = 240
    @z = 295
    # カメラ:センタリング
    self.centering
    # 初期化
    @freeze_count = 0
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新
  #--------------------------------------------------------------------------
  def update
    @moved = false
    # カメラ位置の更新
    if @freeze_count > 0
      # フリーズカウントを減らす
      @freeze_count -= 1
    else
      # スピードの取得
      speed = XRXS_BP8::SPEED
      # カメラ: Z 座標 (優先)
      z_dest = @z_destination
      if @z != z_dest
        @z = slide(@z, z_dest, 1, 74, 296)
        @moved = true
      end
      # カメラ: X 座標
      x_dest = @watch_battler == nil ? @x_destination : @watch_battler.x
      if @x != x_dest
        maximum = 192 * (296 - @z) / 111 + 320
        minimum = 640 - maximum
        @x = slide(@x, x_dest, 8, minimum, maximum)
        @moved = true
      end
      # カメラ: Y 座標
      y_dest = @watch_battler == nil ? @y_destination : 88 + @watch_battler.y/2
      if @y != y_dest
        maximum = 164 * (296 - @z) / 111 + 240
        minimum = 480 - maximum
        @y = slide(@y, y_dest, 4, minimum, maximum)
        @moved = true
      end
    end
  end
  #--------------------------------------------------------------------------
  # ○ スライド (現在地・目的地から行くべき現在地を返す)
  #--------------------------------------------------------------------------
  def slide(from, to, move_min, to_min, to_max)
    # 移動距離を計算
    distance = (to - from).abs
    # 結果を判別
    if distance < move_min
      result = to
    else
      sign  = from > to ? -1 : 1
      result = from + sign * [distance / XRXS_BP8::SPEED, move_min].max
    end
    # 範囲によって返却
    return [[result, to_min].max, to_max].min
  end
  #--------------------------------------------------------------------------
  # ○ 動いたかどうか?
  #--------------------------------------------------------------------------
  def moved?
    return @moved
  end
  #--------------------------------------------------------------------------
  # ○ センタリング
  #--------------------------------------------------------------------------
  def centering
    @watch_battler = nil
    @x_destination = 320
    @y_destination = 240
    @z_destination = 185
  end
  #--------------------------------------------------------------------------
  # ○ ズームアウト
  #--------------------------------------------------------------------------
  def zoomout
    @z_destination = 222
  end
  #--------------------------------------------------------------------------
  # ○ バトラーを注目
  #--------------------------------------------------------------------------
  def watch(battler)
    @watch_battler = battler
    @z_destination = 176
  end
  #--------------------------------------------------------------------------
  # ○ 指定 X 位置を注目
  #--------------------------------------------------------------------------
  def watch_at(x)
    @watch_battler = nil
    @x_destination =  x
    @y_destination = 240
    @z_destination = 185
  end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
  #--------------------------------------------------------------------------
  # ○ 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader                          # バトルフィールド 横 位置(+が右 )
  attr_reader  :y                        # バトルフィールド 高さ 位置(+が下 )
  attr_reader  :z                        # バトルフィールド奥行き位置(+が手前)
  attr_accessor :zoom                    # 現在のズーム倍率
  #--------------------------------------------------------------------------
  # ○ バトルフィールド上に居るか?
  #--------------------------------------------------------------------------
  def in_battlefield?
    return false
  end
end
#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ○ バトルフィールド上に居るか? [オーバーライド]
  #--------------------------------------------------------------------------
  def in_battlefield?
    return true
  end
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias xrxs_bp8_initialize initialize
  def initialize(*args)
    # 初期化
    @z    = 0
    @zoom = 1.00
    # 呼び戻す
    xrxs_bp8_initialize(*args)
  end
  #--------------------------------------------------------------------------
  # ● バトル画面 X 座標の取得
  #--------------------------------------------------------------------------
  alias x screen_x
  def screen_x
    return self.x if $xcam == nil
    return 320 + (self.x - 320) * self.zoom + (320 - $xcam.x)
  end
  #--------------------------------------------------------------------------
  # ● バトル画面 Y 座標の取得
  #--------------------------------------------------------------------------
  alias y screen_y
  def screen_y
    return self.y if $xcam == nil
    return 240 + (self.y - 240) * self.zoom + (240 - $xcam.y)
  end
end

#==============================================================================
# ■ Game_Actor # Wecoc Edit 3
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ○ バトルフィールド上に居るか? [オーバーライド]
  #--------------------------------------------------------------------------
  def in_battlefield?
    return true
  end
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias xrxs_bp8_initialize initialize
  def initialize(*args)
    # 初期化
    @z    = 0
    @zoom = 1.00
    # 呼び戻す
    xrxs_bp8_initialize(*args)
  end
  #--------------------------------------------------------------------------
  # ● バトル画面 X 座標の取得
  #--------------------------------------------------------------------------
  alias x screen_x
  def screen_x
    return self.x if $xcam == nil
    return 320 + (self.x - 320) * self.zoom + (320 - $xcam.x)
  end
  #--------------------------------------------------------------------------
  # ● バトル画面 Y 座標の取得
  #--------------------------------------------------------------------------
  alias y screen_y
  def screen_y
    return self.y if $xcam == nil
    return 240 + (self.y - 240) * self.zoom + (240 - $xcam.y)
  end
end

#==============================================================================
# ■ Spriteset_Battle
#==============================================================================
class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (可動カメラ)
  #--------------------------------------------------------------------------
  def update_xcam
    # カメラ位置が動いた場合
    if $xcam.moved?
      # カメラ位置からズーム率を計算
      zoom = 185.00 / $xcam.z
      # 背景の設定更新
      @battleback_sprite.zoom_x = zoom
      @battleback_sprite.zoom_y = zoom
      @battleback_sprite.x      = -($xcam.x - 320) * zoom - 512 * (zoom - 1)
      @battleback_sprite.y      = -($xcam.y - 240) * zoom - 384 * (zoom - 1)
    end
  end
end
#==============================================================================
# --- バトラースプライト・可動カメラ適用 ---
#==============================================================================
module XRXS_Cam_Deal
  def update
    # 呼び戻す
    super
    # バトラーがバトルフィールドにいない場合は終了
    return if @battler == nil or not @battler.in_battlefield?
    # カメラ Z 座標の取得
    cam_z = $xcam == nil ? 185 : $xcam.z
    #
    # ズーム率の変更
    # ( スプライト座標の再設定は元のメソッドに任せる )
    #
    zoom = 1.00 * 185 / (cam_z - @battler.z)
    self.zoom_x  = zoom
    self.zoom_y  = zoom
    @battler.zoom = zoom
  end
end
class Sprite_Battler < RPG::Sprite
  include XRXS_Cam_Deal
end
#==============================================================================
# --- ダメージフォロー モジュール ---
#==============================================================================
module XRXS_DamageFollow
  def update
    # 呼び戻す
    super
    # カメラが存在しない場合
    return if $xcam == nil
    # バトラーが nil またはバトルフィールドにいない場合
    return if @battler == nil or not @battler.in_battlefield?
    # 直前カメラ位置から、移動量を算出
    x_moved = @last_cam_x == nil ? 0 : $xcam.x - @last_cam_x
    y_moved = @last_cam_y == nil ? 0 : $xcam.y - @last_cam_y
    # ダメージスプライト配列の作成
    damage_sprites  = [@_damage_sprite]
    damage_sprites += @damage_sprites if @damage_sprites != nil
    # カメラをフォロー
    for sprite in damage_sprites
      next if sprite == nil
      next if sprite.disposed?
      sprite.x -= x_moved
      sprite.y -= y_moved
    end
    # 直前カメラ位置の保持
    @last_cam_x = $xcam.x
    @last_cam_y = $xcam.y
  end
end
class Sprite_Battler < RPG::Sprite
  include XRXS_DamageFollow
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  alias xrxs_bp8_main main
  def main
    # 可動カメラの生成
    $xcam = XCam.new
    # 戻す
    xrxs_bp8_main
    # 可動カメラの解放
    $xcam = nil
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias xrxs_bp8_update update
  def update
    # 可動カメラのフレーム更新
    $xcam.update
    # 呼び戻す
    xrxs_bp8_update
  end
end



#------------------------------------------------------------------------------
#
#
#
#    ▽ Full-View システム ▽
#
#
#
#==============================================================================
# ■ Spriteset_Battle
#==============================================================================
class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias xrxs_bp8_initialize initialize
  def initialize
    # 呼び戻す
    xrxs_bp8_initialize
    # グラフィックスアレイを取得
    ga = XRXS_BP8::GA
    # ビューポート 0 を作成
    @viewport0 = Viewport.new(ga.x, ga.y, ga.width, ga.height)
    @viewport0.z  = 0
    # ビューポート 1 の設定を変更
    @viewport1.z += 1
    @viewport1.rect.height = 480
    # バトルバックスプライトを再作成 (ビューポート 0 を使用)
    @battleback_sprite.dispose
    @battleback_sprite = Sprite.new(@viewport0)
    @battleback_name = ""
    # バトルバックのフレーム更新
    update_battleback
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  alias xrxs_bp8_dispose dispose
  def dispose
    # 呼び戻す
    xrxs_bp8_dispose
    # ビューポートを解放
    @viewport0.dispose
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias xrxs_bp8_update update
  def update
    # フレーム更新 (バトルバック)
    update_battleback
    # フレーム更新 (可動カメラ)
    update_xcam if defined? update_xcam
    # 呼び戻す
    xrxs_bp8_update
    # 画面のシェイク位置を設定
    @viewport0.ox = $game_screen.shake if @viewport0 != nil
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (バトルバック)
  #--------------------------------------------------------------------------
  def update_battleback
    # バトルバックのファイル名が現在のものと違う場合
    if @battleback_name != $game_temp.battleback_name
      @battleback_name = $game_temp.battleback_name
      if @battleback_sprite.bitmap != nil
        @battleback_sprite.bitmap.dispose
      end
      # グラフィックスアレイを取得
      ga = XRXS_BP8::GA
      # バトルバックの取得と拡大
      bg  = RPG::Cache.battleback(@battleback_name)
      xga  = Bitmap.new(ga.width, ga.height)
      xga.stretch_blt(xga.rect, bg, bg.rect)
      # XGAをバトルバックに設定
      @battleback_sprite.bitmap = xga
    end
  end
end
#==============================================================================
# ---「戦闘中の"画面"アニメの位置修正」モジュール ---
#==============================================================================
module XRXS_FullScreen_AnimationOffset
  def animation_set_sprites(sprites, cell_data, position)
    super
    for i in 0..15
      sprite = sprites[i]
      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

Gracias a quien me ayude... que probablemente sé quien será XDD?

Ledai

Ledai
Solucionado

Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.