ページ 12

【解決済み】並列処理を利用した擬似タイマーについて

Posted: 2018年4月29日(日) 20:30
by Formidi
初めまして、ツクールMVで音楽ゲームを製作しようとしている者です。

https://tm.lucky-duet.com/viewtopic.php?t=1457
↑こちらなどを参考にして、
現在、曲が再生すると同時に並列処理で『変数Aを1加算する』と1つのコマンドだけを入れて
擬似的なタイマー(コモンイベント)を製作し、
例えば1秒後にノーツを流したい場合、条件分岐で『変数A=60』のときに
マップイベント(並列)で『ノーツを判定枠まで流す』というように置いたのですが、認識されませんでした。
(認識される場合、SEが鳴る様にしたが再生されなかった)

また『変数A≧60』『変数A≦60』も同様にして試してみたところ、
変数A≧60』の方は認識されず『変数A≦60』は何故か認識しました。(無論、曲開始から0フレーム後に流れます)

条件が『=』で認識されない場合、フレーム抜けが発生してその結果認識出来なかったのかと思いましたが
『≧』でもやはり流れることは無かったので、どのようにすれば認識してくれるだろうと悩んでいる所です。
(変数Aは上記の擬似タイマーとマップイベント以外では使用しておりません。)

毎フレーム加算させる擬似タイマーを使用すると、このような仕様になってしまうのでしょうか?
スクリプトは殆ど弄った事がないので自らjsを書き換えるといった手段も出来ません…
皆様で何か改善策などがございましたら、お知恵をお借りしたく存じます。

Re: 並列処理を利用した擬似タイマーについて

Posted: 2018年4月29日(日) 20:55
by ベルファーレ長田(゜∀゜)
どうも。
両イベントに記述している内容に問題はないと思われます。
実際に「変数A=60の時に音楽を鳴らす」処理を組んで動作確認してみましたが、
問題なく音楽が鳴ることを確認しました。

> また『変数A≧60』『変数A≦60』も同様にして試してみたところ、
> 『変数A≧60』の方は認識されず『変数A≦60』は何故か認識しました。(無論、曲開始から0フレーム後に流れます)

このことからコモンイベントの方が起動していないような気がします。
スイッチ0057:「!!Start」がONになっているかをご確認ください。
コモンイベント側に効果音でも鳴らすイベントでも追加すれば、動いてるかどうかはすぐ確認できると思います。

あとは変数Aが他の並列処理で初期化されちゃってるとかかな…?

Re: 並列処理を利用した擬似タイマーについて

Posted: 2018年4月29日(日) 21:34
by Formidi
ベルファーレ長田(゜∀゜)様、返信ありがとうございます。

言い逸れて申し訳ございません…
確認用として『変数A』は、ゲーム上で常にリアルタイムで閲覧できるようになっております
(表示には、トリアコンタン様の「動的文字列ピクチャ生成プラグイン」を使用してします)
F9で変数の値を見ても『変数A』は正常に動いておりました。

>あとは変数Aが他の並列処理で初期化されちゃってるとかかな…?
まずノーツの判定を『X座標』で判別するようにしておりまして、
ノーツを流すのに擬似タイマーと近いような感じで
毎フレーム数ピクセル動かす⇒判定を得るためにX座標を取得($gameScreen.picture(変数).x();)⇒ループ
という処理を入れているのですが
並列で毎フレーム何かを処理させるイベントを重ねると認識されない事などがあるのでしょうか?

Re: 並列処理を利用した擬似タイマーについて

Posted: 2018年4月29日(日) 21:49
by まっつUP
Formidi様

実行内容に注釈がたくさん入っている方のイベントは
トリガーが並列処理になっているでしょうか。
また、関わる全ての並列処理が毎フレーム実行されているか確認しましたか?

Re: 並列処理を利用した擬似タイマーについて

Posted: 2018年4月29日(日) 22:12
by Formidi
まっつUP様、ご返信ありがとうございます。

ひとまずゲーム画面とF9の画面を添付しました。

>実行内容に注釈がたくさん入っている方のイベントは
>トリガーが並列処理になっているでしょうか。
マップイベントはしっかりと並列処理になっておりました。
(『◆コモンイベント:Notes』に、ノーツ(ピクチャ)を流す命令があるのですが
 『変数A≦○○』のときにしっかりと流れたので間違いは無いはずです
 Notesの中身はお申し付けいただければ添付いたします)

>また、関わる全ての並列処理が毎フレーム実行されているか確認しましたか?
こちらも問題ございませんでした
毎フレームノーツを移動させる処理は、スクリプト『$gameVariables._data[X座標] += 10;』を使用しています。
やはりノーツが正常に流れてきたので、このスクリプト自体も異常は無いかと思います

Re: 並列処理を利用した擬似タイマーについて

Posted: 2018年4月29日(日) 22:22
by まっつUP
変数7番の値の1086 だけ
右インデントがずれているように見えますがなぜでしょうか。

Re: 並列処理を利用した擬似タイマーについて

Posted: 2018年4月29日(日) 22:34
by Formidi
>まっつUP様

これはgamefont.cssの中身をデフォルトから別のフォントに変更している為です。
この画像ではロゴたいぷゴシックを使用しております。

Re: 並列処理を利用した擬似タイマーについて

Posted: 2018年4月29日(日) 22:51
by ビービー
こんばんは。

原因はわかりませんが変数A≦60のみしか認識されないということはイベントが一度しか起動していないのではないかと思います。

注釈1の上に文章の表示や違うSEの演奏などを入れてみて毎フレーム呼び出されているか確認してみてはどうでしょうか?

Re: 並列処理を利用した擬似タイマーについて

Posted: 2018年4月29日(日) 22:59
by まっつUP
うーん、なかなか難しいですね。
思いつくことの中では、変数の操作について疑問があります。

・最初の画像のコモンイベント「BGMcount」の実行内容のスクリプトコマンドは
通常のイベントコマンドの「変数の操作」とあまり差がないように見えますが
なぜこの処理内容にしているのでしょうか。
・$gameScreen.picture(変数).x();で特定のIDのピクチャのx座標を得たいようですが
ピクチャがないときは値を得ることができないなど細かい制御が必要になるのが気になります。
・$gameVariables._data[X座標] += 10;
上述のものと同様通常のイベントコマンドの「変数の操作」とあまり差がないように見えますが
なぜこの処理内容にしているのでしょうか。

また、念のため分岐を通ったかどうかの確認はテスト段階では
文章の表示で明確に行った方がよいと思います。
(seを発したかどうかの確認だと連続の演奏等によって打ち消される可能性があるため。)

Re: 並列処理を利用した擬似タイマーについて

Posted: 2018年4月29日(日) 23:15
by Formidi
>ビービー様、返信ありがとうございます。

仰る通り数種類の効果音を挟んでみましたところ、確かに一度きりしか動いていないことが判明致しました。
また言い逸れてしまって恐縮ですが、イベントの最下部に楽曲の再生時間分のウェイトを置いていて
これが原因で認識されないようでした… 消去してみたら無事流れるようりなりました

見落としに気付かせて下さり有難うございます…非常に助かりました
確かにこれならば、『変数A≦60』の場合でも辻褄が通るので納得です
また別の件で質問を投稿するかも知れませんので、その際はよろしくお願いいたします。