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で止められてるとは気づきませんでした。
全ての文字が表示されるまでの時間が短いので、処理が止まっていると感じないようになっているんだと思います。
上手い実装ですね。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.93831への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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