|
|
|
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
回答待ってます。よろしくお願いします
| |
|
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
}
変更
|
|
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
| |
|
2013/5/24(Fri) 17:36:30|NO.54263
最後に、譜面などをファイル化してやりたいのですが、どうやったらいいですか?
無知ですみません;;
|
|
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"
に置き換え
|
|
2013/7/22(Mon) 09:30:17|NO.55806
ありがとうございました!
助かりました!
|
|