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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0429
TATSUYArepeat文で +17未解決


TATSUYA

リンク

2017/4/29(Sat) 16:58:28|NO.79364

リズムゲームを制作していて
かなり初歩的なことなのですが、

mci "play music"
repeat

saisei += 1
if saisei == 100 { y += 1 }

if y == 400 { stop }

loop

というような文で、
実行するたびに流れている曲の部分と
saiseiの値がズレます
(サビに入る部分をとろうとしたら、一回目が100で、二回目が159のような)。

mci "status music position"の文も使いましたが、
そのときは、
yの値がズレました。

どのように対策すればよろしいでしょうか?

それとも、HSPの仕様なのでしょうか?

よろしくお願いします。



この記事に返信する


優師¿(plugin)

リンク

2017/4/29(Sat) 18:09:49|NO.79365

実行しましたが、
まず!!
repeat と loop の間に await を必ず入れてください!!



KA

リンク

2017/4/29(Sat) 18:12:22|NO.79366

そりゃあ、CPUの速度や負荷のかかり方で大きく
変わります。

AWAIT入れて調整するか、タイマーを使う方法を考
えましょう。



優師¿☯(plugin)

リンク

2017/4/29(Sat) 18:18:31|NO.79367

質問です。

> saisei は曲の再生から何秒経ったかを意味するんですか?

> y はどういう意味ですか? saisei の値が 100 になると y が増えますが...

アドバイスです。

>過去のスレッドなどもうちょい調べてください。



Yuuki

リンク

2017/4/29(Sat) 20:58:01|NO.79369



mci "play music" repeat saisei += 1 if saisei == 100 { y += 1 } if y == 400 { stop } await 1 loop



TATSUYA

リンク

2017/4/30(Sun) 10:04:35|NO.79383

awaitを入れてみましたが、
やはりずれてしまいます。

YはY軸です。



MillkeySoftw

リンク

2017/4/30(Sun) 10:57:33|NO.79385

そもそも、if saisei == 100 がおかしいんだけどね。
saisei の元となる値は、mci 側の position でしょ?

mci はシステムのスレッドで動いているから、HSPと同期しているわけではないよ。
なので、PC 全体が重くなれば、ぴったり取得できないわけ。

ぴったり取得できた場合とできなかった場合で、y の最終値がズレを起こすのは当然の結果だと思うよ。



Yuuki

リンク

2017/4/30(Sun) 16:20:47|NO.79400



#include "user32.as" #module #deffunc exittimer onexit KillTimer hwnd, 1 return #global mci "play music" oncmd gosub *OnTimer, 0x0113 SetTimer hwnd, 1, 10, 0 stop *OnTimer saisei += 1 title str(saisei) if saisei == 100 { y += 1 } if y == 400 { stop } return



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