文章内の特定位置で効果音を演奏させるプラグインを製作できないでしょうか?

メルサイア
記事: 127
登録日時: 2016年2月22日(月) 10:35
お住まい: 大阪府
連絡を取る:

Re: 文章内の特定位置で効果音を演奏させるプラグインを製作できないでしょうか?

投稿記事by メルサイア » 2016年7月28日(木) 12:41

mankindさん

わざわざ補足説明をありがとうございます。
正規表現 regExp = /^\x1bV\[\d+\]$/i; の '/i'がキーなのでしょうか。これで小文字も認識しているとは、驚きました。

すごく綺麗なソースコードだったので、自分の勉強の為も兼ねて、大変恐縮ですが、コメントを付けてみました。
もしよろしければ、お時間あるときにでも、ご確認いただけると幸いです。
https://www.dropbox.com/s/05tsivc5mtdpo ... Ex.js?dl=1

アバター
マンカインド
記事: 123
登録日時: 2016年6月01日(水) 23:58
お住まい: 電子の海
連絡を取る:

Re: 文章内の特定位置で効果音を演奏させるプラグインを製作できないでしょうか?

投稿記事by マンカインド » 2016年7月29日(金) 11:42

こんにちわ。

プラグインの解析までされるとは…とても勉強熱心で良いことだと思います。

CheckParam関数の引数paramについてですが、
制御文字\v[n]が渡された場合はそのままreturnしています。

ですが、ファイル内のコメントにあったように
引数typeが"num"の時だけ、制御文字\v[n]を返すようにしたほうが良いですね。
(引数typeが"bool"の時はon以外はfalseとなるため)

色々改変していただいて構いませんので、
どうぞご自由にお使いください。
--------------------------------------------------------------------------------------------------------------
[Twitter] https://twitter.com/mankind_games/
[GitHub] https://github.com/mankindGames/
[Blog] http://mankind-games.blogspot.jp/

--ゲーム作るよりシステム作って満足しちゃう人--
メルサイア
記事: 127
登録日時: 2016年2月22日(月) 10:35
お住まい: 大阪府
連絡を取る:

Re: 文章内の特定位置で効果音を演奏させるプラグインを製作できないでしょうか?

投稿記事by メルサイア » 2016年7月29日(金) 12:05

makindさん

ご丁寧にありがとうございます。
正規表現は相当勉強されたはず…その苦労…痛み入ります。

>引数typeが"num"の時だけ、制御文字\v[n]を返すようにしたほうが良いですね。
なるほど、たしかにそうですね。コメントを書いておきながら、気づきませんでした。。
変更したものを添付しておきます。
https://www.dropbox.com/s/05tsivc5mtdpo ... Ex.js?dl=1

ツクールMVのスクリプトはMITライセンスですし、私は「創作物ははみんなのもの」という考えにいますので、
著作権は放棄しています。
コメントになにか間違いなどあればお気軽にご指摘ください。
メルサイア
記事: 127
登録日時: 2016年2月22日(月) 10:35
お住まい: 大阪府
連絡を取る:

Re: 文章内の特定位置で効果音を演奏させるプラグインを製作できないでしょうか?

投稿記事by メルサイア » 2016年7月29日(金) 12:21

あ、あれ、、でも、せっかく"bool"でも\V[n]が使えるようになってたのに、
これをしたら使えないように、・・・しまったぁぁーーーー(=_=;)。。

(うまく使えば、エディタの変数の値変更で、\V[n]を値ではなく、それ以外でスクリプトで"ON"や"On"と"on"と代入すれば、
ゲーム中に動的にパラメータのON/OFFを切り替えられる機能を、みすみす消してしまった…orz)
少し頭を使って、復活させました。

あと、パラメータのtypeが"bool"の時、"true"や"True"や1(数字)や"1"(文字列)もtrueになるように、
type="bool"の時の条件分岐の処理を変更しました。

"bool"の時も、制御文字による値の動的な変更を可能にするには、
値に"\V[n]"が入っていたら、そのまま残しておかないといけないのは、"num"と同じなのですが、
変数値をbool型として判定するのは、例外処理がちょっと大変なので、いろいろ工夫しました。
大きな変更は、新しいメソッドisParamTrueを作って、例外処理をそこにまとめました。
もしtypeが"bool"のパラメータを作った時は、値を参照するとき、こいつを呼び出すだけで、"num"の時と同じような効果を得られるようにしました。

以上の修正をして、もう少しコメント&更新履歴を書いたものを、ここにおいておきます。
https://www.dropbox.com/s/0oyd59v5d0wws ... Ex.js?dl=1
まだテストしていないので大変恐縮ですが、
これで、bool型のパラメータを作った時も、\V[n]の制御文字が使えるようになったはずです。
(ただ、このプラグインでは、typeが"bool"のパラメータは存在しませんので、テストする方法は、他のパラメータを作らないと無理ですが…そこは、今後の拡張性のためということで…)

なにか間違ってないでしょうか…
よろしければご確認いただけると嬉しいです。(ケアレスミスが怖い><)

※07/29: 12:00~00:16まで、 何度か編集して、追記しました。やっぱりいろいろミスに自分で気づいて、度々直してます。。
アバター
マンカインド
記事: 123
登録日時: 2016年6月01日(水) 23:58
お住まい: 電子の海
連絡を取る:

Re: 文章内の特定位置で効果音を演奏させるプラグインを製作できないでしょうか?

投稿記事by マンカインド » 2016年7月30日(土) 22:00

こんばんわ。修正お疲れ様です。

パラメーター
 Default_Wait_Period
 Default_Wait_Line
の設定を有効にするかどうか判定するパラメーター
 Default_Wait_Switch
を用意(trueでウェイトフレームの変更を有効にする)し確認してみました。

まず、
if(param == null)
の部分ですが、プラグインパラメーターの項目に何も入力しなかった場合、
空文字である""としてparamに代入されます。
そのため、nullとは同一にならず常にfalseとなります。
なので、空文字と比較すれば想定した動作をします。
if(param == "")

if(param === true)
if(param === false)
if(param === 1)
の部分ですが、プラグインパラメーターの値はString型として変数に格納されているため
上記の条件はtrueになりません。それぞれ"true" "false" "1" という文字列と比較すれば
trueとなります。

それ以外の文字列での比較条件は問題なく、
大文字に変換したパラメーターが文字列の "ON","TRUE","1" のいずれかであればtrueとなり、
それ以外の文字列ではfalseとなりました。

また、「変数の操作」コマンドなどで普通にtrueを代入した場合でも
文字列として扱われるようです。
--------------------------------------------------------------------------------------------------------------
[Twitter] https://twitter.com/mankind_games/
[GitHub] https://github.com/mankindGames/
[Blog] http://mankind-games.blogspot.jp/

--ゲーム作るよりシステム作って満足しちゃう人--
メルサイア
記事: 127
登録日時: 2016年2月22日(月) 10:35
お住まい: 大阪府
連絡を取る:

Re: 文章内の特定位置で効果音を演奏させるプラグインを製作できないでしょうか?

投稿記事by メルサイア » 2016年7月30日(土) 23:04

確認ありがとうございました。
非常に高い精度で検証くださり、助かりました。

今回は、javascriptの勉強も兼ねて、スクリプトで取りうる全ての型に例外処理を入れることを徹底してみました。

基本的に、パラメータは文字列として扱われるとのこと、了解しました。
プラグインパラメータ入力画面だけで値を代入するのであれば、文字列だけの判定で大丈夫なようですね。
mankindさんのご指摘で、私が例外処理を入れ忘れていたのは、
>if(param == "")
でした。
これがないと、かなり余分な判定をすることになってしまいますね。前の方に加えておきます。
ありがとうございます。

また、エディタの「変数の操作」コマンドで、オペランドを「スクリプト」にして、
trueをいれても、文字列として入るとのこと、了解しました。
"true"(String型)とtrue(Boolean型)は厳密には違うはずなのですが、ツクールMV側の変換でしょうか。
知りませんでした。。。

>if(param == null)、if(param === true)、if(param === false)、if(param === 1)
は、エディタの「変数の操作」コマンドのオペランドを「代入」や、「スクリプト」、それ以外のプラグインなどの処理で、
変数にundefinedやnull、Boolean型(tureやfalse)、Number型(数値)が入っている
場合を想定して、例外処理を入れました。
流石にそこまでしなくていいと言われそうですが、
私はよく、変数番号の代入ミスやゼロ割などで、nullやundefinedやNaNやInfinityが入ってエラーになることがあるため、
念のため入れさせていただきました。
特にNaNやInfinityはやっかいで、一度入れると消えないので、デバッグでも発見するのは至難の業です…。
その後、まだまだ足りてない判定が見つかったので、追記します。
(そんなミス、熟練者なら誰もしないと思われるかもですが…初心者だとよくするのです。。。)

また明日、修正したものを上げたいと思います。
確認、本当にありがとうございました。

“MV:プラグイン素材のリクエスト” へ戻る