はじめまして、ヒョラーと申します。初心者です。
表題の件について、自力解決が難しそうなので質問にいたりました。
使用ソフトはVXace
スクリプトの知識は初心者、
公式サイトのチュートリアルとヘルプ掲載のスクリプト入門をやって、なんとなく理解したレベルです。
-----------------------------------------------------------------------------------
質問内容に関係するスクリプト:RPG探検隊様制作のサイドビューバトラー
https://rpgex.sakura.ne.jp/home/storage/file57.php
↓サイドビューバトラーの使い方に関する参考記事↓
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12146226932
------------------------------------------------------------------------------------
以下、バグの発生工程です。画像も添付いたします。
発生パターンは2種あります。
前準備:復活後の様子を観察するため、バトルイベントに毎ターン、敵が死んだら復活するように設定しておく。
復活させる敵は画像の緑の円で囲んだ奴に設定。比較の為、もう1匹に不死身を設定しておく。
①サイドビューバトラー・SideViewアクションの中に
カメラワークのズームイン・アウト演出のあるアクションを記述。(アクション登録)
<パターンA>
A1:戦闘テスト開始後、①で作ったズームのあるスキルをバトルで使用し、敵を倒す
A2:死亡後復活した敵グラフィックのサイズが、生前に比べて小さくなっている(画像参照)
A3:もう一度ズームのある技で敵を攻撃した時、
ズームがかかったのか、隣にいる正常なグラフィックと同じサイズになる(画像参照)
<パターンB>
・通常攻撃など、ズームなしの技で敵を撃破する
・正常なサイズで復活
・その後、ズーム有技で攻撃し、
ズームがかかるシーンで復活した奴だけ他の奴らに比べて大きく見える(画像B1参照)
AもBも、一度死亡させて復活した後は何度この工程を繰り返しても同じバグが再現

-----------------------------------------------------------------------------------
~考察~
パターンAは演出に使われてるズーム値が敵グラフィックのスケール値に入ってしまっているのでは?
パターンBは演出に使われているズーム値が反映されておらず、元の値のまま固定されているのでは?
⇒死んで復活した時に、そのスケール値をリセット・再び適用する処理が動作していない、
またはスクリプト内に記述が無いのかもしれない
------------------------------------------------------------------------------------
~解決案の仮定~
・サイドビューバトラー内のカメラのズーム処理の中の、
「拡大縮小更新」処理の中に敵バトラーが復活したら拡大率を初期化する処理を加筆する
------------------------------------------------------------------------------------
ここまで思い当って、該当しそうな部分を抜き出し、
新しいセクションを作り、自分でバグ修正スクリプトを加筆してみましたが何も変わりませんでした。
サイドビューバトラーの記述は完全には理解できず、
カメラに関する記述の中で「zoom.x」「zoom.y」がズーム値に関係していそうだったので
そのあたりを色々と弄ってみました。
仮定した解決案が間違ってるのか、スクリプトの書き方がおかしいのか、その両方なのか…
分からず、困っております。
分かる方いらっしゃいましたら、ご教示いただけますと助かります!
書いたスクリプトも添付いたします。(コメントは自分用メモとして書いてるので言葉が荒くなってます)
#==============================================================================
#カメラズームするスキルで敵を倒して、倒した敵が復活した時、
#敵の拡縮が可笑しくなってるのを直したい
#フレーム更新の中に新しく作った定義を呼ぶ・・・うまくいかん、保留
#==============================================================================
#--------------------------------------------------------------------------
#Game_Battlerクラスの復活処理をサイドビューの初期化処理に入れてみた
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#Game_Enemyクラスの中に、ズームのアクセサ?を呼ぶ
#--------------------------------------------------------------------------
class Game_Enemy
attr_accessor :zoom_x
attr_accessor :zoom_y
attr_accessor :real_zoom_x
attr_accessor :real_zoom_y
end
#=begin
class SideView
#--------------------------------------------------------------------------
# ☆ フレーム更新 :再定義。★を追記
#--------------------------------------------------------------------------
def update
# アクション開始
start_action
# 強制アクション開始
start_force_action if @force_action != ""
# アニメパターン更新
update_pattern
# 移動更新
update_move
# 回転更新
update_angle if @angle_time != 0
# 拡大縮小更新
update_zoom if @zoom_time != 0
# 透明度更新
update_opacity if @opacity_data != []
#↓の奴を追加 :拡大縮小更新する時に呼ぶ
#zoom_reset_enemydead
end
#--------------------------------------------------------------------------
# ★ 敵死亡時の拡大縮小初期化;敵復活時に拡大縮小初期化する処理を新しい関数
# 復活処理は reviveの奴をもらってきた
#--------------------------------------------------------------------------
def zoom_reset_enemydead
if @hp == 0 && battler.enemy? == true
@hp = 1
@battler.zoom_x = @battler.zoom_y = 1
@zoom_time = 0
N03.bitmap.width = 1
N03.bitmap.height = 1
#@battler.real_zoom_x = 1
#@battler.real_zoom_y = 1
end
end
end
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
#☆ 拡大縮小更新;敵死亡時に拡大縮小初期化する処理を上に新しく追記
alias sv00_update_zoom update_zoom
def update_zoom
sv00_update_zoom
#追記部分:敵が生きてたら拡縮率と1秒当たりのズーム率を初期化
if @battler.alive
@battler.zoom_x = 0.5
@battler.zoom_y = 0.5
# @zoom_time = 0
@zooming_x = 0
@zooming_y = 0
#↓元の処理のコピー:そののち、バトラーの拡縮率初期値にズーム率を更新処理
@battler.zoom_x += @zooming_x
@battler.zoom_y += @zooming_y
@zoom_time -= 1
return if @zoom_time != 0
return zoom_reset if @zoom_data[4] == 0
zooming(@zoom_data) if @zoom_data[4] == 2
end
#↓元の処理
@zoom_x += @zooming_x
@zoom_y += @zooming_y
@zoom_time -= 1
return if @zoom_time != 0
return zoom_reset if @zoom_data[4] == 0
zooming(@zoom_data) if @zoom_data[4] == 2
end
end
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ここまで長文を読んでいただき、ありがとうございました。
表題の件について、自力解決が難しそうなので質問にいたりました。
使用ソフトはVXace
スクリプトの知識は初心者、
公式サイトのチュートリアルとヘルプ掲載のスクリプト入門をやって、なんとなく理解したレベルです。
-----------------------------------------------------------------------------------
質問内容に関係するスクリプト:RPG探検隊様制作のサイドビューバトラー
https://rpgex.sakura.ne.jp/home/storage/file57.php
↓サイドビューバトラーの使い方に関する参考記事↓
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12146226932
------------------------------------------------------------------------------------
以下、バグの発生工程です。画像も添付いたします。
発生パターンは2種あります。
前準備:復活後の様子を観察するため、バトルイベントに毎ターン、敵が死んだら復活するように設定しておく。
復活させる敵は画像の緑の円で囲んだ奴に設定。比較の為、もう1匹に不死身を設定しておく。
①サイドビューバトラー・SideViewアクションの中に
カメラワークのズームイン・アウト演出のあるアクションを記述。(アクション登録)
<パターンA>
A1:戦闘テスト開始後、①で作ったズームのあるスキルをバトルで使用し、敵を倒す
A2:死亡後復活した敵グラフィックのサイズが、生前に比べて小さくなっている(画像参照)
A3:もう一度ズームのある技で敵を攻撃した時、
ズームがかかったのか、隣にいる正常なグラフィックと同じサイズになる(画像参照)
<パターンB>
・通常攻撃など、ズームなしの技で敵を撃破する
・正常なサイズで復活
・その後、ズーム有技で攻撃し、
ズームがかかるシーンで復活した奴だけ他の奴らに比べて大きく見える(画像B1参照)
AもBも、一度死亡させて復活した後は何度この工程を繰り返しても同じバグが再現

-----------------------------------------------------------------------------------
~考察~
パターンAは演出に使われてるズーム値が敵グラフィックのスケール値に入ってしまっているのでは?
パターンBは演出に使われているズーム値が反映されておらず、元の値のまま固定されているのでは?
⇒死んで復活した時に、そのスケール値をリセット・再び適用する処理が動作していない、
またはスクリプト内に記述が無いのかもしれない
------------------------------------------------------------------------------------
~解決案の仮定~
・サイドビューバトラー内のカメラのズーム処理の中の、
「拡大縮小更新」処理の中に敵バトラーが復活したら拡大率を初期化する処理を加筆する
------------------------------------------------------------------------------------
ここまで思い当って、該当しそうな部分を抜き出し、
新しいセクションを作り、自分でバグ修正スクリプトを加筆してみましたが何も変わりませんでした。
サイドビューバトラーの記述は完全には理解できず、
カメラに関する記述の中で「zoom.x」「zoom.y」がズーム値に関係していそうだったので
そのあたりを色々と弄ってみました。
仮定した解決案が間違ってるのか、スクリプトの書き方がおかしいのか、その両方なのか…
分からず、困っております。
分かる方いらっしゃいましたら、ご教示いただけますと助かります!
書いたスクリプトも添付いたします。(コメントは自分用メモとして書いてるので言葉が荒くなってます)
#==============================================================================
#カメラズームするスキルで敵を倒して、倒した敵が復活した時、
#敵の拡縮が可笑しくなってるのを直したい
#フレーム更新の中に新しく作った定義を呼ぶ・・・うまくいかん、保留
#==============================================================================
#--------------------------------------------------------------------------
#Game_Battlerクラスの復活処理をサイドビューの初期化処理に入れてみた
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#Game_Enemyクラスの中に、ズームのアクセサ?を呼ぶ
#--------------------------------------------------------------------------
class Game_Enemy
attr_accessor :zoom_x
attr_accessor :zoom_y
attr_accessor :real_zoom_x
attr_accessor :real_zoom_y
end
#=begin
class SideView
#--------------------------------------------------------------------------
# ☆ フレーム更新 :再定義。★を追記
#--------------------------------------------------------------------------
def update
# アクション開始
start_action
# 強制アクション開始
start_force_action if @force_action != ""
# アニメパターン更新
update_pattern
# 移動更新
update_move
# 回転更新
update_angle if @angle_time != 0
# 拡大縮小更新
update_zoom if @zoom_time != 0
# 透明度更新
update_opacity if @opacity_data != []
#↓の奴を追加 :拡大縮小更新する時に呼ぶ
#zoom_reset_enemydead
end
#--------------------------------------------------------------------------
# ★ 敵死亡時の拡大縮小初期化;敵復活時に拡大縮小初期化する処理を新しい関数
# 復活処理は reviveの奴をもらってきた
#--------------------------------------------------------------------------
def zoom_reset_enemydead
if @hp == 0 && battler.enemy? == true
@hp = 1
@battler.zoom_x = @battler.zoom_y = 1
@zoom_time = 0
N03.bitmap.width = 1
N03.bitmap.height = 1
#@battler.real_zoom_x = 1
#@battler.real_zoom_y = 1
end
end
end
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
#☆ 拡大縮小更新;敵死亡時に拡大縮小初期化する処理を上に新しく追記
alias sv00_update_zoom update_zoom
def update_zoom
sv00_update_zoom
#追記部分:敵が生きてたら拡縮率と1秒当たりのズーム率を初期化
if @battler.alive
@battler.zoom_x = 0.5
@battler.zoom_y = 0.5
# @zoom_time = 0
@zooming_x = 0
@zooming_y = 0
#↓元の処理のコピー:そののち、バトラーの拡縮率初期値にズーム率を更新処理
@battler.zoom_x += @zooming_x
@battler.zoom_y += @zooming_y
@zoom_time -= 1
return if @zoom_time != 0
return zoom_reset if @zoom_data[4] == 0
zooming(@zoom_data) if @zoom_data[4] == 2
end
#↓元の処理
@zoom_x += @zooming_x
@zoom_y += @zooming_y
@zoom_time -= 1
return if @zoom_time != 0
return zoom_reset if @zoom_data[4] == 0
zooming(@zoom_data) if @zoom_data[4] == 2
end
end
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ここまで長文を読んでいただき、ありがとうございました。