【解決済み】プラグインコマンドでのウェイトについて。

アバター
コットン豆腐
記事: 8
登録日時: 2017年4月07日(金) 17:32
連絡を取る:

【解決済み】プラグインコマンドでのウェイトについて。

投稿記事by コットン豆腐 » 2017年4月12日(水) 08:02

はじめまして。
演出で必要になり、よく使う処理でもあったのでプラグインコマンドを
作ろうとしているのですが、どうにも上手くいってくれないので質問させて頂きます。

作りたいのは「キーの入力を検知したらスキップできるウェイトコマンド」です。
for文で「this.wait(1)」を送り続けて「if(Input.isTriggered('ok')){break;}」のように
キー入力を受け取ったらbreakしよう、と考えたのですが、動かず。
コンソールウィンドウにログを出してみればスクリプト上でウェイトもしなければ
キー入力も受け付けていなかったようです。

this.waitに長い時間を直接入力するとゲーム側にはその分ウェイト命令が送られて
進行が止まるものの、肝心のfor文は止まらずにループし続けていたので
やろうとしている方法が仕様の段階で間違っていることはわかったのですが……。

何か方法は無いでしょうか?
一応、上手くいかなかったコードも記載しておきます。

コード: 全て選択

var w = args[0];
for (var i = 0 ; i <= w; i++) {
   if (Input.isTriggered('ok') ){
      console.log("break!");
      break;
   }
   this.wait(1);
   console.log(i);
}


また、問題の解決とは直接関わりないのですが
「いずれかのキーを入力された時」を判定したい時の方法がわからずに

コード: 全て選択

if(   Input.isTriggered('ok')
   || Input.isTriggered('cancel')
   || Input.isTriggered('shift')
   || Input.isTriggered('up')
   || Input.isTriggered('down')
   || Input.isTriggered('left')
   || Input.isTriggered('right')
   || TouchInput.isTriggered()
   || TouchInput.isCancelled()
){break;}

と、とても力技なコードを書いてしまっているので
そちらもよろしければ省略方法をご教授頂ければ幸いです……。

ご助言よろしくお願いいたします。
最後に編集したユーザー コットン豆腐 on 2017年4月12日(水) 15:28 [ 編集 2 回目 ]

            
水面下でゲーム作ってます。
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: プラグインコマンドでのウェイトについて。

投稿記事by 奏ねこま » 2017年4月12日(水) 08:30

まず、思い違いから訂正させて頂くと、this.wait(1);というのは、その場で1フレーム待つ関数ではありません。
ウェイトを管理している箇所で1フレーム待ってもらうための予約をする関数です。
なので、プラグインコマンド内でどんなにループさせても、予約を繰り返しているだけになります。
キー入力でウェイトをスキップする処理を作りたい場合は、「ウェイトを管理している箇所」に手を入れるしかありません。

キー入力を判定する方法については、Input.isTriggeredで対応するなら力技しかないのではないかと。
Input.keyMapperにキー名のリストがあるので、それを使えばループは組めると思いますが。
あとはInput._onKeyDownまたはInput._onKeyUpに手を入れれば、違った方法も取れるかもしれません。
アバター
コットン豆腐
記事: 8
登録日時: 2017年4月07日(金) 17:32
連絡を取る:

Re: プラグインコマンドでのウェイトについて。

投稿記事by コットン豆腐 » 2017年4月12日(水) 08:37

奏ねこま 様
まず、思い違いから訂正させて頂くと、this.wait(1);というのは、その場で1フレーム待つ関数ではありません。
なるほど……!! 理解しました、ありがとうございます。勉強になります!
もっと深い処理まで遡って尽力してみることにします。
スクリプトへの直接記述が予約を送るだけの処理なのであれば、
エディタ側を使ってコモンイベントで作れば狙った動作自体はできそうですね……。

キー入力についても把握いたしました。 コードを覗かれた時に見苦しくなるだけで特に困っては居ないので該当の処理がないのであればこのまま行こうと思います!

ご教授ありがとうございました!
最後に編集したユーザー コットン豆腐 on 2017年4月12日(水) 14:15 [ 編集 3 回目 ]
            
水面下でゲーム作ってます。
アバター
コットン豆腐
記事: 8
登録日時: 2017年4月07日(金) 17:32
連絡を取る:

【解決】Re: プラグインコマンドでのウェイトについて。

投稿記事by コットン豆腐 » 2017年4月12日(水) 14:06

追って報告いたします。
助言の通りさらに深い処理を辿り、_updateWaitCountまわりを弄ったら
無事想定の動作ができました! ありがとうございました!

簡単なスクリプトではありますが、同じことをやりたい方の為に素材化して投稿いたしました。
トピックをご覧になって、必要な方がいればご利用ください。

viewtopic.php?f=5&t=3563
            
水面下でゲーム作ってます。

“MV:質問” へ戻る