ページ 11

イベントの条件分岐と、if文の違いについて

Posted: 2016年10月12日(水) 12:57
by WTR
質問させてください。

---------------------------------
記述①

◇条件分岐(条件1)
処理1
◇それ以外のとき
処理2
◇分岐終了

◇条件分岐(条件1)
処理1’
◇それ以外のとき
処理2’
◇分岐終了

---------------------------------
記述②

if (条件1) {
処理1;
}
else {
処理2;
}

if (条件1) {
処理1’;
}
else {
処理2’;
}

---------------------------------

上記2つの記述で処理に違いが出るものでしょうか。
質問しているのは違う気がするからなのですが。。

イベントの条件分岐で記述した場合、処理1と処理1’が順に実行されますが
スクリプト欄に記述すると処理1’しか実行されないような気がします。

条件1が成立していれば処理1と処理1’が連続で実行されるが
処理1の直後に条件1が解除されたら処理2’が割り込む、ようにしたいのです。
イベントの条件分岐を作れば実現できるのですが
一部パラメータ化したくてスクリプト欄に記述したところ
嵌ってしまいました。
どう書くべきなのか、アドバイスを頂けないでしょうか。

よろしくお願いします!

※スクリプト記述の行数制限をとっぱらうプラグインを使用させて頂いています。

Re: イベントの条件分岐と、if文の違いについて

Posted: 2016年10月12日(水) 13:23
by 奏ねこま
おっしゃられている現象を再現した実際のイベントを貼って頂けますか?
できればプラグインなしの状態で、新規イベントにて
必要最小限の記述にして頂けると助かります。

Re: イベントの条件分岐と、if文の違いについて

Posted: 2016年10月12日(水) 15:48
by WTR
すみません、新規プロジェクトで試してから聞いてみるべきでした。
カオスなイベントになってきているので、そこだけ切り出してみる作業を横着してしまいました。。
夜中になると思いますが、まずさらの状態に戻してもう一度試してみます。

が、一見して、そんなはずはない、ってことでしょうかね。。

Re: イベントの条件分岐と、if文の違いについて

Posted: 2016年10月12日(水) 22:35
by WTR
んんー
新規プロジェクトでも、狙った動きにならないようです。

並列処理でピクチャの拡大率を変化させています。
スイッチ1,2をONにすると、

条件分岐を書いたほうは、150% -> 200% -> 250% -> 150% -> ...
と処理が繰り返されます。

スクリプト記述したほうはいきなり250%になって止まります。
並列処理の条件は満たし続けているけど、止まったまま。

同じ内容を記述してるつもりなんですが、なにか違いがあるのでしょうか。。

Re: イベントの条件分岐と、if文の違いについて

Posted: 2016年10月12日(水) 23:15
by まっつUP
WTR様
お世話になります。

this.wait(60)が働いているか確認しましたか?

Re: イベントの条件分岐と、if文の違いについて

Posted: 2016年10月12日(水) 23:51
by WTR
まっつUP様

ありがとうございます。
言われてみれば効いてないかもしれません。。

処理は上から実行されているけど、waitが効いていなくて一瞬で最後まで走ってしまってるということですかね。
なんとなく現象がわかってきました。

で、理由がよくわからないのですが

if ($gameSwitches.value(2)) {
$gameScreen.movePicture(2,0,200,100,150,150,255,0,60);
}else $gameScreen.movePicture(2,0,200,100,100,100,255,0,60);
------------------------------------------------------------------------------------ここでスクリプト区切る
this.wait(60);
------------------------------------------------------------------------------------ここでスクリプト区切る
if ($gameSwitches.value(2)) {
$gameScreen.movePicture(2,0,200,100,200,200,255,0,60);
}else $gameScreen.movePicture(2,0,200,100,100,100,255,0,60);
------------------------------------------------------------------------------------ここでスクリプト区切る
this.wait(60);
------------------------------------------------------------------------------------ここでスクリプト区切る

のようにスクリプトを区切ったら条件分岐と同じになりました!
一回で書くとダメでした。

とりあえず解決したっぽいのですが、これはなんでなんでしょうか。。

Re: イベントの条件分岐と、if文の違いについて

Posted: 2016年10月13日(木) 00:19
by 奏ねこま
this.wait(60);というのは、そこで60フレーム止まってくれるものではなくて
「60フレーム待つ、という設定をする」だけの命令です。
設定だけして、その場では待ってくれません。
その設定が効くのは、イベントコマンドが完了した後です。
今回の場合(一度に全部書いたケースの場合)、スクリプトがすべて実行されたあとに60フレーム待つことになると思います。

Re: イベントの条件分岐と、if文の違いについて

Posted: 2016年10月13日(木) 00:41
by WTR
奏ねこま(@こま) 様

解説ありがとうございます。
ようやく納得がいきました。

しかし解決したかと思ったのもつかの間

本来やりたかった、座標とかピクチャ番号とかウェイト値をローカル変数化して
そこだけ書き換えて使いまわすというのが
イベントコマンドを分ける必要があるとなると使えないですね。。
もはや条件分岐をちまちまイベントで作成しても変わらないかなぁ。

とはいえ大変勉強になりました。
お二方とも、ありがとうございました!

Re: イベントの条件分岐と、if文の違いについて

Posted: 2016年10月13日(木) 00:58
by 奏ねこま
例えば、ですが。

this.AAA = this.AAA || {};
this.AAA.picture_id = 2;
this.AAA.picture_x = 200;
this.AAA.picture_y = 100;
this.AAA.wait_count = 60;

こんな感じで、thisに任意の変数を追加することで、似たようなことはできます。
変数名が他と被らないように注意する必要がありますが。

参考になれば。