バトル中に使う自作QTEの最適化について
Posted: 2021年8月17日(火) 13:03
一人ではどうしても解決することができず、皆様のアドバイスをもらおうと質問いたします。
現在私が作ろうとしているのは矢印系のQTEで、
①敵がスキルを使うと矢印QTEを呼び出すと同時に、一定フレームごとにダメージを受ける
②矢印QTEはトリガーなしのコモンイベント
③「一定フレームごとにダメージを受ける」処理は並列処理で行う(“砂川赳”様のNRP_BattleParallelCommonスクリプトを使っております。)
④結果によって成功・失敗のコモンイベントに連携、③はスイッチを条件にイベントの中断処理
このような段階で処理しております。
問題はこのQTEを開始すると1‐3秒の間フレームがガタ落ちし、その後も頻繫に50フレームくらいに低下して戻っることを繰り返しています。
前に作った連打QTEの場合、並列処理を3‐4個を同時に行ったせいで一部の環境においてフレームの低下があったのを反省してできるだけ並列処理の数を減らしたんですが、1個しか使ってないのにどうしてフレームがこんなに不安定なのかがわかりません。
イメージのせいかなと思ってバトルイベントが始まる際にImageManager.loadPictureで必要なイメージをキャッシュしてみましたが効果はありませんでした。
なら②か③の構図に根本的に問題がある模様ですが、一人でいろいろいじってみても到底分かることができませんでした……。
何卒よろしくお願いいたします。
②の処理は以下となります。
現在私が作ろうとしているのは矢印系のQTEで、
①敵がスキルを使うと矢印QTEを呼び出すと同時に、一定フレームごとにダメージを受ける
②矢印QTEはトリガーなしのコモンイベント
③「一定フレームごとにダメージを受ける」処理は並列処理で行う(“砂川赳”様のNRP_BattleParallelCommonスクリプトを使っております。)
④結果によって成功・失敗のコモンイベントに連携、③はスイッチを条件にイベントの中断処理
このような段階で処理しております。
問題はこのQTEを開始すると1‐3秒の間フレームがガタ落ちし、その後も頻繫に50フレームくらいに低下して戻っることを繰り返しています。
前に作った連打QTEの場合、並列処理を3‐4個を同時に行ったせいで一部の環境においてフレームの低下があったのを反省してできるだけ並列処理の数を減らしたんですが、1個しか使ってないのにどうしてフレームがこんなに不安定なのかがわかりません。
イメージのせいかなと思ってバトルイベントが始まる際にImageManager.loadPictureで必要なイメージをキャッシュしてみましたが効果はありませんでした。
なら②か③の構図に根本的に問題がある模様ですが、一人でいろいろいじってみても到底分かることができませんでした……。
何卒よろしくお願いいたします。
②の処理は以下となります。
コード: 全て選択
◆注釈:6個の矢印をランダムに設定
◆ラベル:矢印設定
◆条件分岐:スクリプト:$gameVariables.value(975).length === 6
◆ラベルジャンプ:矢印出力
◆
:それ以外のとき
◆スクリプト:var ArrowQTE = [];
: :var ArrowList = new Array('up', 'down', 'left', 'right');
: :function randomItem(a) {
: :return a[Math.floor(Math.random() * a.length)];
: :};
: :for (var i = 0; i < 6; i++) {
: :$gameVariables.setValue(974, randomItem(ArrowList));
: :console.log($gameVariables.value(974));
: :ArrowQTE[i] = $gameVariables.value(974);
: :}
: :$gameVariables.setValue(975, ArrowQTE);
◆
:分岐終了
◆注釈:ランダムに選ばれた矢印を絵にして画面上に出力
◆ラベル:矢印出力
◆ループ
◆条件分岐:Arrow QTE 出力番号 = 6
◆スクリプト:console.log('401switch')
◆スイッチの操作:#0401 Arrow QTE ON = ON
◆ラベルジャンプ:入力待ち
◆
:それ以外のとき
◆スクリプト:if ($gameVariables.value(975)[$gameVariables.value(976)] === 'left') {
: : $gameScreen.showPicture(21+$gameVariables.value(976),"qte_left",1,(340+(120*$gameVariables.value(976))),360,100,100,255,0) }
: :if ($gameVariables.value(975)[$gameVariables.value(976)] === 'right') {
: : $gameScreen.showPicture(21+$gameVariables.value(976),"qte_right",1,(340+(120*$gameVariables.value(976))),360,100,100,255,0) }
: :if ($gameVariables.value(975)[$gameVariables.value(976)] === 'up') {
: : $gameScreen.showPicture(21+$gameVariables.value(976),"qte_up",1,(340+(120*$gameVariables.value(976))),360,100,100,255,0) }
: :if ($gameVariables.value(975)[$gameVariables.value(976)] === 'down') {
: : $gameScreen.showPicture(21+$gameVariables.value(976),"qte_down",1,(340+(120*$gameVariables.value(976))),360,100,100,255,0) }
◆変数の操作:#0976 Arrow QTE 出力番号 += 1
◆
:分岐終了
◆
:以上繰り返し
◆注釈:プレイヤーの矢印キー入力を受け、判定
◆ラベル:入力待ち
◆条件分岐:Arrow QTE ONがON
◆ラベル:QTE
◆注釈:脱出成功
◆条件分岐:Arrow QTE 現在成功回数 = Arrow QTE 必要成功回数
◆イベント処理の中断
◆
:それ以外のとき
◆注釈:6個全部正しく入力した場合
◆条件分岐:Arrow QTE 入力番号 = 6
◆変数の操作:#0979 Arrow QTE 現在成功回数 += 1
◆注釈:脱出に成功した時のちらつき防止用
◆条件分岐:Arrow QTE 現在成功回数 = Arrow QTE 必要成功回数
◆ラベルジャンプ:QTE
◆
:それ以外のとき
◆SEの演奏:TKpageturn1 (100, 100, 0)
◆変数の操作:#0975 Arrow QTE リスト = 0
◆変数の操作:#0976 Arrow QTE 出力番号 = 0
◆変数の操作:#0977 Arrow QTE 入力番号 = 0
◆ラベルジャンプ:矢印設定
◆
:分岐終了
◆
:それ以外のとき
◆スクリプト:console.log('loopstart')
◆条件分岐:スクリプト:Input.isTriggered('left')
◆条件分岐:スクリプト:$gameVariables.value(975)[$gameVariables.value(977)] === 'left'
◆SEの演奏:Decision2 (80, 100, 0)
◆スクリプト:$gameScreen.showPicture(21+$gameVariables.value(977),"qte_left_done",1,(340+(120*$gameVariables.value(977))),360,100,100,255,0)
◆変数の操作:#0977 Arrow QTE 入力番号 += 1
◆ラベルジャンプ:QTE
◆
:それ以外のとき
◆注釈:入力をミスした時の処理
◆SEの演奏:Damage3 (80, 100, 0)
◆変数の操作:#0975 Arrow QTE リスト = 0
◆変数の操作:#0976 Arrow QTE 出力番号 = 0
◆変数の操作:#0977 Arrow QTE 入力番号 = 0
◆変数の操作:#0980 Arrow QTE 現在失敗回数 += 1
◆ラベルジャンプ:矢印設定
◆
:分岐終了
◆
:分岐終了
◆条件分岐:スクリプト:Input.isTriggered('right')
◆条件分岐:スクリプト:$gameVariables.value(975)[$gameVariables.value(977)] === 'right'
◆SEの演奏:Decision2 (80, 100, 0)
◆スクリプト:$gameScreen.showPicture(21+$gameVariables.value(977),"qte_right_done",1,(340+(120*$gameVariables.value(977))),360,100,100,255,0)
◆変数の操作:#0977 Arrow QTE 入力番号 += 1
◆ラベルジャンプ:QTE
◆
:それ以外のとき
◆SEの演奏:Damage3 (80, 100, 0)
◆変数の操作:#0975 Arrow QTE リスト = 0
◆変数の操作:#0976 Arrow QTE 出力番号 = 0
◆変数の操作:#0977 Arrow QTE 入力番号 = 0
◆変数の操作:#0980 Arrow QTE 現在失敗回数 += 1
◆ラベルジャンプ:矢印設定
◆
:分岐終了
◆
:分岐終了
◆条件分岐:スクリプト:Input.isTriggered('up')
◆条件分岐:スクリプト:$gameVariables.value(975)[$gameVariables.value(977)] === 'up'
◆SEの演奏:Decision2 (80, 100, 0)
◆スクリプト:$gameScreen.showPicture(21+$gameVariables.value(977),"qte_up_done",1,(340+(120*$gameVariables.value(977))),360,100,100,255,0)
◆変数の操作:#0977 Arrow QTE 入力番号 += 1
◆ラベルジャンプ:QTE
◆
:それ以外のとき
◆SEの演奏:Damage3 (80, 100, 0)
◆変数の操作:#0975 Arrow QTE リスト = 0
◆変数の操作:#0976 Arrow QTE 出力番号 = 0
◆変数の操作:#0977 Arrow QTE 入力番号 = 0
◆変数の操作:#0980 Arrow QTE 現在失敗回数 += 1
◆ラベルジャンプ:矢印設定
◆
:分岐終了
◆
:分岐終了
◆条件分岐:スクリプト:Input.isTriggered('down')
◆条件分岐:スクリプト:$gameVariables.value(975)[$gameVariables.value(977)] === 'down'
◆SEの演奏:Decision2 (80, 100, 0)
◆スクリプト:$gameScreen.showPicture(21+$gameVariables.value(977),"qte_down_done",1,(340+(120*$gameVariables.value(977))),360,100,100,255,0)
◆変数の操作:#0977 Arrow QTE 入力番号 += 1
◆ラベルジャンプ:QTE
◆
:それ以外のとき
◆SEの演奏:Damage3 (80, 100, 0)
◆変数の操作:#0975 Arrow QTE リスト = 0
◆変数の操作:#0976 Arrow QTE 出力番号 = 0
◆変数の操作:#0977 Arrow QTE 入力番号 = 0
◆変数の操作:#0980 Arrow QTE 現在失敗回数 += 1
◆ラベルジャンプ:矢印設定
◆
:分岐終了
◆
:分岐終了
◆注釈:フリーズ防止用
◆ラベルジャンプ:QTE
◆
:分岐終了
◆
:分岐終了
◆
:分岐終了