一括表示

記事No: 21195
タイトルタイマーが上手く動かない
投稿日: 2020/11/16 22:17
投稿者Tark [rerrrrrdi278(海外)]

[やりたいこと]
マップイベントで「タイマー開始フラグ」がオンしてから五分後、オフになるようにしたい。
そして、タイマーが起動している間プレイヤーが自由に行動できるようにしたい。

[やってみたこと]
まず、マップイベントで
[タイマー用時間]=300+0
[タイマー用開始フラグ]=1+0
コモンイベント[タイマー起動]
を挿入。

次にコモンイベント[タイマー起動]を並列実行、条件を『[タイマー用・開始フラグが1と同じ』に設定。

本文を
■回数付きループ [ 300 ]回
|■変数操作: V13[タイマー用拘束時間] -= 1 + 0
|■ウェイト:1 フレーム
|■
◇ループここまで◇◇
■条件分岐(変数): 【1】 V13[タイマー用拘束時間] が 0 と同じ
-◇分岐: 【1】 [ V13[タイマー用拘束時間] が 0 と同じ ]の場合↓
|■文章:タイマー終了
|■変数操作: V12[タイマー用・開始フラグ] = 0 + 0
|■イベント処理中断
|■
◇分岐終了◇
文章:テスト終了
■変数操作: V12[タイマー用・開始フラグ] = 0 + 0
|■イベント処理中断
とした。

WoditorEvCOMMAND_START
[179][1,0]<0>(300)()
[121][4,0]<1>(2000013,1,0,512)()
[180][1,0]<1>(1)()
[0][0,0]<1>()()
[498][0,0]<0>()()
[111][4,0]<0>(1,2000013,0,2)()
[401][1,0]<0>(1)()
[101][0,1]<1>()("タイマー終了")
[121][4,0]<1>(2000012,0,0,0)()
[172][0,0]<1>()()
[0][0,0]<1>()()
[499][0,0]<0>()()
[121][4,0]<0>(2000013,0,0,0)()
[101][0,1]<0>()("テスト終了")
[121][4,0]<0>(2000012,0,0,0)()
[172][0,0]<0>()()
WoditorEvCOMMAND_END


[やってみた結果、どううまくいかないか]
起動後、プレイヤーが一切の操作を受け付けなくなる。
その間F9で確認するとタイマー用拘束時間が減っているのは確認できたが、何故か-500近くになるまで動けない。
また、テスト終了が二回連続で表示される。
(並列実行(常時)だと行動できないのは変わらず、テスト終了が何度も表示されてしまう)
あと、このやり方だと五分と経たず終わっているのだけど、実際に五分経過させるにはどうしたらいいかも教えて欲しい。
(一分で120ループという計算でもできるのかもしれないけれど、後々30分とかで以上の使用を想定しているためその場合ループが凄い回数回すことになることで後々問題を起こすのではないかと気になっています)


記事No: 21196
タイトルRe: タイマーが上手く動かない
投稿日: 2020/11/17 22:42
投稿者YADO [LerLWW459(海外)]

> [やりたいこと]
> マップイベントで「タイマー開始フラグ」がオンしてから五分後、オフになるようにしたい。
> そして、タイマーが起動している間プレイヤーが自由に行動できるようにしたい。
>
> [やってみたこと]
> まず、マップイベントで
> [タイマー用時間]=300+0
> [タイマー用開始フラグ]=1+0
> コモンイベント[タイマー起動]
> を挿入。
>
> 次にコモンイベント[タイマー起動]を並列実行、条件を『[タイマー用・開始フラグが1と同じ』に設定。
>
> 本文を
> ■回数付きループ [ 300 ]回
> |■変数操作: V13[タイマー用拘束時間] -= 1 + 0
> |■ウェイト:1 フレーム
> |■
> ◇ループここまで◇◇
> ■条件分岐(変数): 【1】 V13[タイマー用拘束時間] が 0 と同じ
> -◇分岐: 【1】 [ V13[タイマー用拘束時間] が 0 と同じ ]の場合↓
> |■文章:タイマー終了
> |■変数操作: V12[タイマー用・開始フラグ] = 0 + 0
> |■イベント処理中断
> |■
> ◇分岐終了◇
> 文章:テスト終了
> ■変数操作: V12[タイマー用・開始フラグ] = 0 + 0
> |■イベント処理中断
> とした。
>
> WoditorEvCOMMAND_START
> [179][1,0]<0>(300)()
> [121][4,0]<1>(2000013,1,0,512)()
> [180][1,0]<1>(1)()
> [0][0,0]<1>()()
> [498][0,0]<0>()()
> [111][4,0]<0>(1,2000013,0,2)()
> [401][1,0]<0>(1)()
> [101][0,1]<1>()("タイマー終了")
> [121][4,0]<1>(2000012,0,0,0)()
> [172][0,0]<1>()()
> [0][0,0]<1>()()
> [499][0,0]<0>()()
> [121][4,0]<0>(2000013,0,0,0)()
> [101][0,1]<0>()("テスト終了")
> [121][4,0]<0>(2000012,0,0,0)()
> [172][0,0]<0>()()
> WoditorEvCOMMAND_END
>
>
> [やってみた結果、どううまくいかないか]
> 起動後、プレイヤーが一切の操作を受け付けなくなる。
> その間F9で確認するとタイマー用拘束時間が減っているのは確認できたが、何故か-500近くになるまで動けない。
> また、テスト終了が二回連続で表示される。
> (並列実行(常時)だと行動できないのは変わらず、テスト終了が何度も表示されてしまう)
> あと、このやり方だと五分と経たず終わっているのだけど、実際に五分経過させるにはどうしたらいいかも教えて欲しい。
> (一分で120ループという計算でもできるのかもしれないけれど、後々30分とかで以上の使用を想定しているためその場合ループが凄い回数回すことになることで後々問題を起こすのではないかと気になっています)

マップイベントからコモンイベントを呼び出すと、並列実行との二重実行になるので、
■変数操作: V13[タイマー用拘束時間] -= 1 + 0
などの処理も1フレームで2回実行されます。

またマップイベントの起動条件が並列実行以外の場合は、
マップイベントから呼び出したコモンイベントの処理が終了するまでは、
主人公の移動ができなくなります。


質問文の設定では、回数付きループの回数が「300」になっており、この場合は「5秒」になります。

もしも5分間にする場合は、ループ回数を「18000」にするか、ループ内のウェイトの設定を「60」にする必要があります。


以下はコモンイベントの設定例です。

★起動条件「並列実行」/V12[タイマー用・開始フラグ]が1
■ループ開始
|■ウェイト:60 フレーム
|■変数操作: V13[タイマー用拘束時間] -= 1 + 0
|■条件分岐(変数): 【1】 V13[タイマー用拘束時間] が 0 以下
|-◇分岐: 【1】 [ V13[タイマー用拘束時間] が 0 以下 ]の場合↓
| |■ループ中断
| |■
|◇分岐終了◇
|■
◇ループここまで◇◇
■文章:タイマー終了
■変数操作: V12[タイマー用・開始フラグ] = 0 + 0


WoditorEvCOMMAND_START
[170][0,0]<0>()()
[180][1,0]<1>(60)()
[121][4,0]<1>(2000013,1,0,512)()
[111][4,0]<1>(1,2000013,0,3)()
[401][1,0]<1>(1)()
[171][0,0]<2>()()
[0][0,0]<2>()()
[499][0,0]<1>()()
[0][0,0]<1>()()
[498][0,0]<0>()()
[101][0,1]<0>()("タイマー終了")
[121][4,0]<0>(2000012,0,0,0)()
WoditorEvCOMMAND_END


マップイベントは、変数の設定はそのままで良いですが、
コモンイベントを呼び出す設定は削除してください。


記事No: 21197
タイトルRe: タイマーが上手く動かない
投稿日: 2020/11/18 15:40
投稿者Tark [rerrrrrdi278(海外)]

いつもありがとうございます。


>マップイベントからコモンイベントを呼び出すと、並列実行との二重実行になるので、
>■変数操作: V13[タイマー用拘束時間] -= 1 + 0
>などの処理も1フレームで2回実行されます。
そうか、だからやたら処理が早かったわけですね。
しかも直接呼んだ状態でもあるからタイマーカウントが終わるまで次の処理に移行できず身動きが取れなくなる、と。
当初もう少し大きい数値で試していたのですがカウントが終わるまでが明らかに早くてなんでだろう?と疑問でしたが、そういう挙動だったのか…

>もしも5分間にする場合は、ループ回数を「18000」にするか、ループ内のウェイトの設定を「60」にする必要があります。
そうか、ウェイトを60おけば実質1秒待つことになるからそうすればよかったのか!
言われてみればそりゃそうだとなるところですが、これには思いつきませんでした。


ひとまず教えていただいたことをベースに、起動用のコモンフラグを別途用意しそれを介して開始フラグをオンにすることで無事想定どおり動かすことができるようになりました。
本当にありがとうございます。





> > [やりたいこと]
> > マップイベントで「タイマー開始フラグ」がオンしてから五分後、オフになるようにしたい。
> > そして、タイマーが起動している間プレイヤーが自由に行動できるようにしたい。
> >
> > [やってみたこと]
> > まず、マップイベントで
> > [タイマー用時間]=300+0
> > [タイマー用開始フラグ]=1+0
> > コモンイベント[タイマー起動]
> > を挿入。
> >
> > 次にコモンイベント[タイマー起動]を並列実行、条件を『[タイマー用・開始フラグが1と同じ』に設定。
> >
> > 本文を
> > ■回数付きループ [ 300 ]回
> > |■変数操作: V13[タイマー用拘束時間] -= 1 + 0
> > |■ウェイト:1 フレーム
> > |■
> > ◇ループここまで◇◇
> > ■条件分岐(変数): 【1】 V13[タイマー用拘束時間] が 0 と同じ
> > -◇分岐: 【1】 [ V13[タイマー用拘束時間] が 0 と同じ ]の場合↓
> > |■文章:タイマー終了
> > |■変数操作: V12[タイマー用・開始フラグ] = 0 + 0
> > |■イベント処理中断
> > |■
> > ◇分岐終了◇
> > 文章:テスト終了
> > ■変数操作: V12[タイマー用・開始フラグ] = 0 + 0
> > |■イベント処理中断
> > とした。
> >
> > WoditorEvCOMMAND_START
> > [179][1,0]<0>(300)()
> > [121][4,0]<1>(2000013,1,0,512)()
> > [180][1,0]<1>(1)()
> > [0][0,0]<1>()()
> > [498][0,0]<0>()()
> > [111][4,0]<0>(1,2000013,0,2)()
> > [401][1,0]<0>(1)()
> > [101][0,1]<1>()("タイマー終了")
> > [121][4,0]<1>(2000012,0,0,0)()
> > [172][0,0]<1>()()
> > [0][0,0]<1>()()
> > [499][0,0]<0>()()
> > [121][4,0]<0>(2000013,0,0,0)()
> > [101][0,1]<0>()("テスト終了")
> > [121][4,0]<0>(2000012,0,0,0)()
> > [172][0,0]<0>()()
> > WoditorEvCOMMAND_END
> >
> >
> > [やってみた結果、どううまくいかないか]
> > 起動後、プレイヤーが一切の操作を受け付けなくなる。
> > その間F9で確認するとタイマー用拘束時間が減っているのは確認できたが、何故か-500近くになるまで動けない。
> > また、テスト終了が二回連続で表示される。
> > (並列実行(常時)だと行動できないのは変わらず、テスト終了が何度も表示されてしまう)
> > あと、このやり方だと五分と経たず終わっているのだけど、実際に五分経過させるにはどうしたらいいかも教えて欲しい。
> > (一分で120ループという計算でもできるのかもしれないけれど、後々30分とかで以上の使用を想定しているためその場合ループが凄い回数回すことになることで後々問題を起こすのではないかと気になっています)
>
> マップイベントからコモンイベントを呼び出すと、並列実行との二重実行になるので、
> ■変数操作: V13[タイマー用拘束時間] -= 1 + 0
> などの処理も1フレームで2回実行されます。
>
> またマップイベントの起動条件が並列実行以外の場合は、
> マップイベントから呼び出したコモンイベントの処理が終了するまでは、
> 主人公の移動ができなくなります。
>
>
> 質問文の設定では、回数付きループの回数が「300」になっており、この場合は「5秒」になります。
>
> もしも5分間にする場合は、ループ回数を「18000」にするか、ループ内のウェイトの設定を「60」にする必要があります。
>
>
> 以下はコモンイベントの設定例です。
>
> ★起動条件「並列実行」/V12[タイマー用・開始フラグ]が1
> ■ループ開始
> |■ウェイト:60 フレーム
> |■変数操作: V13[タイマー用拘束時間] -= 1 + 0
> |■条件分岐(変数): 【1】 V13[タイマー用拘束時間] が 0 以下
> |-◇分岐: 【1】 [ V13[タイマー用拘束時間] が 0 以下 ]の場合↓
> | |■ループ中断
> | |■
> |◇分岐終了◇
> |■
> ◇ループここまで◇◇
> ■文章:タイマー終了
> ■変数操作: V12[タイマー用・開始フラグ] = 0 + 0
> ■
>
> WoditorEvCOMMAND_START
> [170][0,0]<0>()()
> [180][1,0]<1>(60)()
> [121][4,0]<1>(2000013,1,0,512)()
> [111][4,0]<1>(1,2000013,0,3)()
> [401][1,0]<1>(1)()
> [171][0,0]<2>()()
> [0][0,0]<2>()()
> [499][0,0]<1>()()
> [0][0,0]<1>()()
> [498][0,0]<0>()()
> [101][0,1]<0>()("タイマー終了")
> [121][4,0]<0>(2000012,0,0,0)()
> WoditorEvCOMMAND_END
>
>
> マップイベントは、変数の設定はそのままで良いですが、
> コモンイベントを呼び出す設定は削除してください。