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


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0724
よしひと音ゲー進化させた4解決


よしひと

リンク

2022/7/24(Sun) 12:29:06|NO.96844

お久しぶりです。
去年作った音ゲーをさらに進化させたので公開します。
(もはや見た目が変わりすぎてバージョンアップとは言えない。)
もし良ければ遊んでみてください。

変更点
・UIをもっとリッチな見た目にした(そのせいで全体的に重い)
・曲名検索やソートもできるようにした(曲少ないからあんま意味ない)
・よくよく二次創作ガイドラインを見たら
「あれ?この曲使っちゃだめじゃね」って思ったので一部の曲を削除
・代わりに新曲を2曲追加
・レーンが3Dになりました
・処理落ちしても音と音符がズレなくなりました

前バージョン
https://hsp.tv/play/pforum.php?mode=all&num=94684
(前バージョンと同じアカウントでログインできます)

ダウンロード
http://puoro.ml/sapphire.html

ソースコード
https://github.com/PiPiTO7273/sapphire-v2



この記事に返信する


大富豪

リンク

2022/7/27(Wed) 22:45:17|NO.96865

初心者です。

音楽とのシンクロってどうやってるんですか?!
(再生位置)

例えば、
音源の5小節目の頭が、
バー?の位置(キーを押すタイミング)がバッチリ合っていないとダメですよね。
(音源の音符の位置とプログラム処理)

音源のロードが少しでも遅れたら
バーの動作のタイミングとズレると思うのですが。

oggファイルですと正確な音源の位置を割り出せる?ようですけど・・・
企業秘密ですかね;



名無し

リンク

2022/7/28(Thu) 07:28:56|NO.96866

凄いですね…

プレイ動画観させてもらったんですが、完成度高すぎて謎の笑い(?)が込み上げてきました。

かのbmsなどの既存のPC音ゲー並に人気出て欲しい。



よしひと

リンク

2022/7/28(Thu) 08:03:51|NO.96867

>音楽とのシンクロってどうやってるんですか?!

小節やBPMなどの概念で考えるのがそもそも面倒なので、
何小節何拍目に音符を置くというのではなく譜面作成の時点でミリ秒単位に変換しています。
実際にはソフランの実装でもっと複雑ですが、大まかな流れは

音符の位置y = 判定ライン - 音符を判定するタイミング + プレー開始からの経過時間

プレー開始からの経過時間は音源の再生時間でもあるので、
dmmstatやBASS.dllであればBASS_ChannelGetPositionで取得できます。
SapphireではDXライブラリのGetNowCountでプレー開始のタイミングでの値と現在の値の差分を取って経過時間を算出しています。

↓質素ですが、Sapphireとだいたい同じ仕組みです。↓

dim humen ddim hispeed dim time dim drawpos sdim judge dim key:dim bfkey dim near humen=2000,3000,4000,5000,6000,7000 hispeed=0.4 //ミリ秒単位そのままだと速すぎなので dim humen_judge,length(humen) repeat getkey key,32 redraw 0 color:boxf near=-1 foreach humen drawpos=480-int(double(humen(cnt))*hispeed)+int(double(time)*hispeed)-20 color 255,255,255:boxf 100,drawpos,150,drawpos+20 if key==1&bfkey==0 { if near==-1 :near=0 if (abs(time-humen(near)) > abs(time-humen(cnt)))&humen_judge(cnt)==0 :near=cnt } loop if near!-1 { if abs(time-humen(near)) < 50 { humen_judge(near)=1 judge="OK! ±"+abs(time-humen(near))+"ms" } } pos 170,400:mes judge redraw 1 await 1000/60 time+1000/60 bfkey=key loop



大富豪

リンク

2022/7/29(Fri) 08:11:45|NO.96876

>よしひと 様
 ご返答ありがとうございます。

初心者なので仕組みがサッパリ分かりませんが@@;
勉強したいと思います。

音源起動直後の無音から音が出るタイミングを検出して
その瞬間をプログラム動作開始+テンポの一致も合わせる必要がある(?)、
ハズだとは思いますが、

バー?が動き出す前(キーが入力される前)に、
音符のタイミングとシンクロしているかチェックもしないとズレますよね。
(※音源の再生位置ではなくあくまでも音符とのシンクロ)

音源の取り扱い(時間の管理)ってかなり難しい印象があります・・・。
プレイ動画も拝見しましたがハイレベル過ぎてビックリです;

ありがとうございました、
勉強させて頂きます。



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