HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
0910
ねんねこemesでプログラムを停止させずにゆっくりと文字表示7解決


ねんねこ

リンク

2021/9/10(Fri) 17:32:50|NO.93831

タイトルの通り、emesでプログラムを停止させずにゆっくりと文字表示させる方法が知りたいの
です。



この記事に返信する


zrs90(5さい)

リンク

2021/9/10(Fri) 22:12:20|NO.93834

...サンプル内のdemo.hspを、動かしてみたことはありますか?
HSPデモンストレーションです。
音楽が流れながら、emesで解説が
表示されてます。クリックせず放っておくと
場面が勝手に進みます。...ということは
プログラムの流れは、止まってないと思います。
間違っていたら、申し訳ないです。

ねんねこさんが、何をしたいか、私には分かりませんが
ゲームか何か作るのでしたら、このソースを読んでみると
良いかと。...ちょっと長くて大変ですが、頑張ってやってみて下さい。



GENKI

リンク

2021/9/10(Fri) 22:55:07|NO.93835

emes命令は設定された全ての文字を表示し終わるまで次の行は実行されません。
処理を停止させないためには、emesを使わずに実装する必要があります。


; ; ゆっくり文字列を表示するサンプル ; font msgothic,30,1 a="Hello, this is HSP. \nLet's start writing slowly." frmwait = 6 ; 表示スピード(frmwaitフレームおきに文字を増やす) c = 0 ; 表示する文字数 *main redraw 1 : await 30 : redraw 0 : color 255,255,255 : boxf : color : pos 0, 0 ; frmwait フレームおきに表示する文字数を増やす。 if (frmcnt \ frmwait) = 0 { c++ } ; 2バイト文字を含む場合は、この関数だけではうまく行かないのでそれは別途注意。 mes strmid(a, 0, c) ; 処理が止まっていないことを確認 mes "フレーム数カウント:" + frmcnt ; フレーム数カウント frmcnt++ goto *main
簡単に作ってみるとこんな感じです。考え方はこんな感じです。
なお、日本語文字列を使用する場合は、もうひと工夫が必要になります。



zrs90(5さい)

リンク

2021/9/11(Sat) 00:24:10|NO.93836

...ヘルプにも、記述がなかったのと
demo.hspで、emesで表示しながら音楽が鳴っていた
放置して置くと、勝手に次の場面へ進む
クリックすると次の場面へすぐ進むので
プログラムの流れは、止まってないと
勝手に解釈していました。

ご指摘ありがとうございます。
それと、間違った返答をしてしまい
申し訳ありませんでした。



ねんねこ

リンク

2021/9/11(Sat) 07:27:00|NO.93839

>>93835
ありがとうございます。参考にさせていただきます。



ねんねこ

リンク

2021/9/11(Sat) 07:36:47|NO.93840

>>93835
それに音を付けると、すごい速度で音が流れるんですけど...



沢渡

リンク

2021/9/11(Sat) 13:34:44|NO.93843

「音を鳴らす」とはどのようにしているのでしょう?
毎ループごとに音を鳴らしていたのでは秒間33回鳴ることになります。
文字の表示数が増えた時だけ鳴らすのなら「c++」の直後にmmplay等を実行すれば
秒間5.5回になりますが。



GENKI

リンク

2021/9/11(Sat) 13:35:03|NO.93844

> それに音を付けると、すごい速度で音が流れるんですけど...

どの命令で、どのタイミングで音を再生しているかわからないので何とも言えません。

demo.hsp では BGM は dmmplay 命令で再生しているようですね。
音楽の再生命令は、再生時に1回だけ実行すると、すぐに処理が次の行に移行します。
あとは曲を止めるか曲が終わるまで音楽が再生されたままになります。


> プログラムの流れは、止まってないと
> 勝手に解釈していました。

そういえば demo.hsp って処理が止まっているようには見えないようにうまく作ってありますね。
あれはあれで正解な気がします。処理が止まっていないように見せることのほうが重要というケースもあるので。

> クリックすると次の場面へすぐ進むので

そう言われて確認してみたんですが、文字列表示中はクリックしても次の場面に移行しませんね。私もあれは処理がemesで止められてるとは気づきませんでした。
全ての文字が表示されるまでの時間が短いので、処理が止まっていると感じないようになっているんだと思います。
上手い実装ですね。



ONION software Copyright 1997-2023(c) All rights reserved.