【解決済み】スキルウインドウのページ数を記憶させたい
Posted: 2022年2月17日(木) 02:22
以前に、下記URLのトピックにて「スキルウインドウの表示変更」についてご教示いただきました、かにんと申します。
viewtopic.php?f=43&t=11517
有識者様からご教示いただき、拙作に合わせた改変をさせていただき、制作にあたっておりましたが、当時想定していなかった問題がが発生してしまいました。
VXAceではアクターが最期に選択したスキルを記憶し、次にスキルウインドウを開いた際に記憶したスキルを指すようになっています。
しかし、「スキルウインドウのページ番号」はデフォルトにはないメソッドであるため、記憶されません。
スクリプトによって、
スキルウインドウ1ページ目
1個目のスキル
2個目のスキル
・
・
・
8個目のスキル
2ページ目
9個目のスキル
10個目のスキル
・
・
・
16個目のスキル
3ページ目
17個目のスキル
18個目のスキル
・
・
・
24個目のスキル
このように、スキルの数だけページが増え、左右キーでページを切り替えてスキルを選択する仕組みになっています。
そこで、例えば該当アクターが12個目のスキルを使用したとします。
12個目のスキルは2ページ目に表示されます。
しかし、コマンド再選択時、ページ数は記憶されていないため、スキルウインドウは1ページ目の内容を描画します。
当然1ページ目に12個目のスキルはないため、カーソルはウインドウ外を指すという状態です。
この挙動が発生してしまうのは、間に別のスキルタイプを選択した時です。
スキルタイプ1の12個目のスキルを選択して使用→次ターンにスキルタイプ2を選択してからコマンド選択に戻る→スキルタイプ1を再選択する・・・不具合発生
スキルタイプ1の12個目のスキルを選択して使用→次ターンにアイテムを選択してからコマンド選択に戻る→スキルタイプ1を再選択する・・・正常
スキルタイプ1の12個目のスキルを選択して使用→次ターンに直行でスキルタイプ1を再選択・・・正常
スキルタイプ別に最終使用スキルを記憶するスクリプトを配布されている方がいらっしゃったので、それを試してもみたのですが、結局表示されるページが1ページ目で変わらないため、挙動を直すことはできませんでした。
そこで、最後に使用したスキルの他に、最後に使用したスキルが表示されているページ数も記憶し、この挙動を改善しようと試みました。
スキルを記憶している仕組みを自分なりに分析し、同じ要領でページを記憶させようとしたのですが、どうしても上手くいきませんでした。
改善策を御教示いただける方がいらっしゃいましたら、ご助力いただけますと幸いです。
尚、上記URLにてご教授いただいたスクリプトを拙作様に改造している箇所がございますので、今現在のコードを貼り付けさせていただきます。cursor_down、cursor_upに手を加えています。改変箇所を元通りにしても同様の挙動でしたので、恐らくここが原因ではないとは思うのですが、もしも悪さをしているようでしたら改変していただけると幸いです。
viewtopic.php?f=43&t=11517
有識者様からご教示いただき、拙作に合わせた改変をさせていただき、制作にあたっておりましたが、当時想定していなかった問題がが発生してしまいました。
VXAceではアクターが最期に選択したスキルを記憶し、次にスキルウインドウを開いた際に記憶したスキルを指すようになっています。
しかし、「スキルウインドウのページ番号」はデフォルトにはないメソッドであるため、記憶されません。
スクリプトによって、
スキルウインドウ1ページ目
1個目のスキル
2個目のスキル
・
・
・
8個目のスキル
2ページ目
9個目のスキル
10個目のスキル
・
・
・
16個目のスキル
3ページ目
17個目のスキル
18個目のスキル
・
・
・
24個目のスキル
このように、スキルの数だけページが増え、左右キーでページを切り替えてスキルを選択する仕組みになっています。
そこで、例えば該当アクターが12個目のスキルを使用したとします。
12個目のスキルは2ページ目に表示されます。
しかし、コマンド再選択時、ページ数は記憶されていないため、スキルウインドウは1ページ目の内容を描画します。
当然1ページ目に12個目のスキルはないため、カーソルはウインドウ外を指すという状態です。
この挙動が発生してしまうのは、間に別のスキルタイプを選択した時です。
スキルタイプ1の12個目のスキルを選択して使用→次ターンにスキルタイプ2を選択してからコマンド選択に戻る→スキルタイプ1を再選択する・・・不具合発生
スキルタイプ1の12個目のスキルを選択して使用→次ターンにアイテムを選択してからコマンド選択に戻る→スキルタイプ1を再選択する・・・正常
スキルタイプ1の12個目のスキルを選択して使用→次ターンに直行でスキルタイプ1を再選択・・・正常
スキルタイプ別に最終使用スキルを記憶するスクリプトを配布されている方がいらっしゃったので、それを試してもみたのですが、結局表示されるページが1ページ目で変わらないため、挙動を直すことはできませんでした。
そこで、最後に使用したスキルの他に、最後に使用したスキルが表示されているページ数も記憶し、この挙動を改善しようと試みました。
スキルを記憶している仕組みを自分なりに分析し、同じ要領でページを記憶させようとしたのですが、どうしても上手くいきませんでした。
改善策を御教示いただける方がいらっしゃいましたら、ご助力いただけますと幸いです。
尚、上記URLにてご教授いただいたスクリプトを拙作様に改造している箇所がございますので、今現在のコードを貼り付けさせていただきます。cursor_down、cursor_upに手を加えています。改変箇所を元通りにしても同様の挙動でしたので、恐らくここが原因ではないとは思うのですが、もしも悪さをしているようでしたら改変していただけると幸いです。
コード: 全て選択
class Window_BattleSkill < Window_SkillList
# --------------------------------------------------------------------------
# ○ オブジェクト初期化
# info_viewport : 情報表示用ビューポート
#--------------------------------------------------------------------------
alias :_old_initialze :initialize
def initialize(help_window, info_viewport)
_old_initialze(help_window, info_viewport)
self.arrows_visible = false
end
#--------------------------------------------------------------------------
# ○ カーソル位置が画面内になるようにスクロール
#--------------------------------------------------------------------------
def ensure_cursor_visible
end
#--------------------------------------------------------------------------
# ○ カーソル位置が画面内になるようにスクロール
#--------------------------------------------------------------------------
def col_max
return 1
end
def page_row_max
return 8
end
#--------------------------------------------------------------------------
# ● ページの最大数を取得
#--------------------------------------------------------------------------
def page_max
page_max = item_max / (col_max * page_row_max)
page_max += 1 if (col_max * page_row_max * page_max) < item_max
page_max
end
#--------------------------------------------------------------------------
# ● 現在ページを取得
#--------------------------------------------------------------------------
def page
index / (col_max * page_row_max)
end
#--------------------------------------------------------------------------
# ○ カーソルを下に移動
#--------------------------------------------------------------------------
def cursor_down(wrap = false)
if index + 1 == item_max
select(page * 8)
elsif index == 7
select(0)
elsif index == 15
select(8)
elsif index == 23
select(16)
elsif index == 31
select(24)
elsif index == 39
select(32)
elsif index == 47
select(40)
elsif index == 55
select(48)
elsif index == 63
select(56)
elsif index == 71
select(64)
elsif index == 79
select(72)
else
super unless (page == page_max - 1) ? (index == item_max - 1) : (col_max * (page_row_max - 1)) <= (index % (col_max * page_row_max))
end
end
#--------------------------------------------------------------------------
# ○ カーソルを上に移動
#--------------------------------------------------------------------------
def cursor_up(wrap = false)
last_page = (item_max - 1) / (col_max * page_row_max)
if page == last_page && index % (col_max * page_row_max) / col_max == 0
select(item_max - 1)
elsif index == 0
select(7)
elsif index == 8
select(15)
elsif index == 16
select(23)
elsif index == 24
select(31)
elsif index == 32
select(39)
elsif index == 40
select(47)
elsif index == 48
select(55)
elsif index == 56
select(63)
elsif index == 64
select(71)
elsif index == 72
select(79)
else
super unless index % (col_max * page_row_max) / col_max == 0
end
end
#--------------------------------------------------------------------------
# ○ カーソルを右に移動
#--------------------------------------------------------------------------
def cursor_right(wrap = false)
index % col_max == (col_max - 1) || index == (item_max - 1) ? cursor_pagedown : super
end
#--------------------------------------------------------------------------
# ○ カーソルを左に移動
#--------------------------------------------------------------------------
def cursor_left(wrap = false)
index % col_max == 0 ? cursor_pageup : super
end
#--------------------------------------------------------------------------
# ○ カーソルを 1 ページ後ろに移動
#--------------------------------------------------------------------------
def cursor_pagedown
unless top_row + page_row_max < row_max
self.top_row = 0
select(index % (col_max * page_row_max))
else
super
end
end
#--------------------------------------------------------------------------
# ○ カーソルを 1 ページ前に移動
#--------------------------------------------------------------------------
def cursor_pageup
unless top_row > 0
last_page = (item_max - 1) / (col_max * page_row_max)
self.top_row = page_row_max * last_page
select([last_page * col_max * page_row_max + index, item_max-1].min)
else
super
end
end
end