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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0417
WOLFHSP 音ゲー9解決


WOLF

リンク

2013/4/17(Wed) 22:42:24|NO.53562

音ゲーを作りたいのですが、
音の鳴らし方と、上から落ちてくる譜面(?)の作り方がわかりません、、、
目指しているのはiPodでできる「The Real DJ」見たいのです。
一応ここまでは作りました。

gakuhu="0123454321234543212345432123454321" ;0は無表示,1〜5はz〜bボタンを押す tenpo=80 ;テンポの速さ dim key,6 font "",30 repeat color 0,0,0 :boxf color 255,255,255 hantei=cnt\9 if hantei=0 :use=0 if hantei=4 :gcnt+1 gaku=int(strmid (gakuhu,gcnt,1)) getkey key(1),90 getkey key(2),88 getkey key(3),67 getkey key(4),86 getkey key(5),66 line 100,0,100,640 line 200,0,200,640 line 300,0,300,640 line 400,0,400,640 line 500,0,500,640 line 0,400,500,400 color 255,255,0 if hantei=4 :boxf (gaku*100)-100,390,gaku*100,410 pos (gaku*100)-60,350 if gaku=1 :mes "" if gaku=2 :mes "" if gaku=3 :mes "" if gaku=4 :mes "" if gaku=5 :mes "" color 255,0,255 pos 41,423 mes "Z" color 255,0,255 pos 141,423 mes "X" color 255,0,255 pos 241,423 mes "C" color 255,0,255 pos 341,423 mes "V" color 255,0,255 pos 441,423 mes "B" if (key(gaku)=1)&(use=0)&(gaku!0) { if (hantei=3)|(hsntei=4)|(hantei=5) :ms="perfect" :use=1 if (hantei=1)|(hantei=2)|(hantei=6)|(hantei=7) :ms="good" :use=1 if (hantei=0)|(hantei=8) :ms="miss" :use=1 } pos 500,0 color 255,255,255 mes ms redraw 1 await 60000/tenpo/9 redraw 0 loop
回答待ってます。よろしくお願いします



この記事に返信する


YSR

リンク

2013/4/20(Sat) 23:33:23|NO.53607

とりあえずノーツを落とすところから始めようぜ



暇人

リンク

2013/4/21(Sun) 04:03:12|NO.53608

>音の鳴らし方と

dmm系命令を使うのが楽かな
sample\hgimg3\ogg_sndtest.hsp

>上から落ちてくる譜面(?)の作り方がわかりません、、、
譜面データを先読みする感じでやれば良い

NO.53562のをあまり変えずにやってみると

> if hantei=0 :use=0
> if hantei=4 :gcnt+1
> gaku=int(strmid (gakuhu,gcnt,1))
を↓に

if hantei=0 :use=0:gaku=int(strmid (gakuhu,gcnt,1)):gcnt+1


> if hantei=4 :boxf (gaku*100)-100,390,gaku*100,410
を↓に

if hantei=4 { boxf (gaku*100)-100,390,gaku*100,410 } else { if hantei<4 :boxf (gaku*100)-100,(cnt\9)*(390/4),gaku*100,(cnt\9)*(390/4)+20 }
変更



WOLF

リンク

2013/4/28(Sun) 22:35:32|NO.53680

上から落ちてくるやつをもっとスムーズにしたいですけど、どうしたらいいですか?

gakuhu="0123454321234543212345432123454321" ;0は無表示,1〜5はz〜bボタンを押す tenpo=80 ;テンポの速さ dim key,6 font "",30 repeat color 0,0,0 :boxf color 255,255,255 hantei=cnt\9 if hantei=0 :use=0:gaku=int(strmid (gakuhu,gcnt,1)):gcnt+1 getkey key(1),90 getkey key(2),88 getkey key(3),67 getkey key(4),86 getkey key(5),66 line 100,0,100,640 line 200,0,200,640 line 300,0,300,640 line 400,0,400,640 line 500,0,500,640 line 0,400,500,400 color 255,255,0 if hantei=4 { boxf (gaku*100)-100,390,gaku*100,410 } else { if hantei<4 :boxf (gaku*100)-100,(cnt\9)*(390/4),gaku*100,(cnt\9)*(390/4)+20 } pos (gaku*100)-60,350 if gaku=1 :mes "" if gaku=2 :mes "" if gaku=3 :mes "" if gaku=4 :mes "" if gaku=5 :mes "" color 255,0,255 pos 41,423 mes "Z" color 255,0,255 pos 141,423 mes "X" color 255,0,255 pos 241,423 mes "C" color 255,0,255 pos 341,423 mes "V" color 255,0,255 pos 441,423 mes "B" if (key(gaku)=1)&(use=0)&(gaku!0) { if (hantei=3)|(hsntei=4)|(hantei=5) :ms="perfect" :use=1 if (hantei=1)|(hantei=2)|(hantei=6)|(hantei=7) :ms="good" :use=1 if (hantei=0)|(hantei=8) :ms="miss" :use=1 } pos 500,0 color 255,255,255 mes ms redraw 1 await 60000/tenpo/9 redraw 0 loop
です。お願いします!



暇人

リンク

2013/4/29(Mon) 03:30:33|NO.53684

フレームレートとテンポを分離すれば良い
具体的にはawait 16ぐらいでフレームレートを
60程度に固定してテンポに左右されなくする

時間をms単位で計って時間に合わせてバーを移動させる

await 16だから毎フレーム16ms単位の移動量にすれば楽だが誤差が溜まって行く
曲を流してそれに合わせてバーを流す場合は、曲とずれる可能性がある

後質問とは関係ないが
> if (hantei=3)|(hsntei=4)|(hantei=5) :ms="perfect" :use=1
hsntei=4だけhanteiじゃないよ



暇人

リンク

2013/5/1(Wed) 17:11:03|NO.53739

FPSとテンポを分離したサンプル
バーの速度を一拍で画面の縦サイズ分移動するように変更

#include "d3m.hsp" //タイマーだけ利用(timeGetTimeを使用してるだけだから精度は良くない) dim key,6 KEY_CODE = 0,'Z','X','C','V','B' KEY_POSX = 41 KEY_POSY = 423 BAR_SIZEX = 100 BAR_SIZEY = 20 PERFECT_LINE = 400 PERFECT_RANGE = 40 //PERFECT_LINEから上下にずれてもperfectになるサイズ //背景バッファ初期化 buffer 1 color 0,0,0 :boxf:color 255,255,255 repeat 5 line BAR_SIZEX+cnt*BAR_SIZEX,0,BAR_SIZEX+cnt*BAR_SIZEX,640 loop line 0,PERFECT_LINE,500,PERFECT_LINE gsel 0 gakuhu = "0123454321234543212345432123454321" ;0は無表示,1〜5はz〜bボタンを押す tenpo = 80 ;テンポの速さ onebeat = 60000/tenpo //一拍の時間(ms) perfect_tim = (1.0*PERFECT_LINE/480.0)*onebeat //バー発生からPERFECT_LINEまでの時間 movms = (480.0/onebeat) //1msの移動量(1画面の縦サイズを一拍の時間で割る) font "",30 start_tim = d3timer() //開始時間 repeat redraw 0 gmode 0 pos 0,0 celput 1//背景画面コピー if (onebeat*gcnt) <= (d3timer()-start_tim) {//一拍ずつの経過時間を越えた use=0 gaku=int(strmid (gakuhu,gcnt,1)) bar_start_tim=onebeat*gcnt //バー発生時間 gcnt+1 } etim=d3timer()-start_tim //開始からの経過時間 bar_tim=etim-bar_start_tim //バー発生からの経過時間(これにmovmsを掛けてバー座標にする) repeat 6-1,1 getkey key(cnt),KEY_CODE(cnt) color 255,255*key(cnt),255 pos KEY_POSX+BAR_SIZEX*(cnt-1),KEY_POSY mes strf("%c",KEY_CODE(cnt)) loop if gaku { if use=0 { color 255,255,0 boxf (gaku*BAR_SIZEX)-BAR_SIZEX,movms*bar_tim-BAR_SIZEY/2,gaku*BAR_SIZEX,movms*bar_tim+BAR_SIZEY/2 //バーの基準点を中央に変更 } } //ヒット表示 if hitf<6 and hitf>0{//perfect=白、good=黄色、miss=赤 if hitf<4 { color 255,255,63+hitf*64 boxf hit_line_posx-BAR_SIZEX,hit_line_posy-BAR_SIZEY/2+hitf*3,hit_line_posx,hit_line_posy+BAR_SIZEY/2-hitf*3 } color 255,255-128*(use_bak=3),255-128*(use_bak>1) circle hit_line_posx-65-hitf*2,PERFECT_LINE-15-hitf*2,hit_line_posx-35+hitf*2,PERFECT_LINE+15+hitf*2,1 circle hit_line_posx-80-hitf*4,PERFECT_LINE-30-hitf*4,hit_line_posx-20+hitf*4,PERFECT_LINE+30+hitf*4,0 hitf++ } if (key(gaku)=1)&(use=0)&(gaku!0) { hitf=1 //ヒット表示フラグ hit_line_posx=gaku*BAR_SIZEX hit_line_posy=movms*bar_tim //ヒットした時の座標を保存 if abs(PERFECT_LINE-hit_line_posy) <= PERFECT_RANGE {//差がPERFECT_RANGE以下ならperfect ms="perfect" :use=1 }else{//PERFECT_RANGE*2以下ならgoodでそれより大きければmiss if abs(PERFECT_LINE-hit_line_posy) <= (PERFECT_RANGE*2) {ms="good" :use=2}else{ms="miss" :use=3 } } use_bak=use } pos 500,0 color 255,255,255 mes ms redraw 1 await 16 loop



WOLF

リンク

2013/5/24(Fri) 17:36:30|NO.54263

最後に、譜面などをファイル化してやりたいのですが、どうやったらいいですか?
無知ですみません;;



check

リンク

2013/5/24(Fri) 20:25:56|NO.54265

それはファイルフォーマットを自分で決めて、自分で譜面ファイルを作成すればいい。
普通のテキストファイルでも問題ないだろう。
読み込んだテキストファイルに従ってプログラム側で譜面を用意するという形になるかな。



暇人

リンク

2013/5/27(Mon) 00:51:15|NO.54340


0123454321234543212345432123454321
をHSPエディタでもメモ帳でもなんでも良いけど
譜面.txt としてスクリプトと同じフォルダに保存

NO.53739の
>gakuhu = "0123454321234543212345432123454321" ;0は無表示,1〜5はz〜bボタンを押す
これを

notesel gakuhu noteload "譜面.txt"
に置き換え



WOLF

リンク

2013/7/22(Mon) 09:30:17|NO.55806

ありがとうございました!
助かりました!



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