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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0424
rikuriku112233音ゲーの同時押しなどについて1未解決


rikuriku112233

リンク

2016/4/24(Sun) 12:41:26|NO.75304

HSPを使って音ゲーを作ろうとしていて、掲示板などを検索したら、ソースコードを拾ったので、
それを改良して、
・音楽をならす
・txtファイルからノードの落とすときを取得
・コンボ表示
をできるようにしたのですが、まだ同時押しや一拍(?)の間に複数のノードを落とす方法
が分かりません。
どこをいじればいいのか教えてください。


#include "d3m.hsp" //タイマーだけ利用(timeGetTimeを使用してるだけだから精度は良くない) #include"hgimg3.as" dmmini dim key,6 count = 0 KEY_CODE = 0,'C','V','B','N','M' KEY_POSX = 41 KEY_POSY = 423 BAR_SIZEX = 100 BAR_SIZEY = 20 PERFECT_LINE = 400 PERFECT_RANGE = 20 //PERFECT_LINEから上下にずれてもperfectになるサイズ //背景バッファ初期化 buffer 1 color 73,73,73:boxf:color 255,255,255 repeat 5 line BAR_SIZEX+cnt*BAR_SIZEX,0,BAR_SIZEX+cnt*BAR_SIZEX,1280 loop line 0,PERFECT_LINE,500,PERFECT_LINE gsel 0 notesel gakuhu noteload "gakuhu\\test.txt" ;0は無表示,1〜5はz〜bボタンを押す tenpo = 71 ;テンポの速さ onebeat = 60000/tenpo //一拍の時間(ms) perfect_tim = (1.0*PERFECT_LINE/480.0)*onebeat //バー発生からPERFECT_LINEまでの時間 movms = (720.0/onebeat) //1msの移動量(1画面の縦サイズを一拍の時間で割る) dmmload "gakuhu\\test.wav",0 dmmplay 0 font "",30 ms = "" combo = 0 score = 0 start_tim = d3timer() //開始時間 repeat 3800 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="GREAT" :use=1 combo + 1 score + 500 }else{//PERFECT_RANGE*2以下ならgoodでそれより大きければmiss if abs(PERFECT_LINE-hit_line_posy) <= (PERFECT_RANGE*2) {combo + 1:score + 200:ms="GOOD" :use=2}else{combo = 0:ms="BAD" :use=3 } } use_bak=use } pos 202,200 color 255,255,255 font "MS UI Gothic",50 mes ms pos 238,235 mes combo pos 590,0 font "",30 redraw 1 await 16 count + 1 title "" + count loop end



この記事に返信する


GENKI

リンク

2016/4/24(Sun) 14:22:43|NO.75305

まずキーボード入力はハードウェアの性質上、次のような制限があることを把握ください。

HSPのgetkey stickkey などの同時押しの限界はいくつですか?
http://hsp.tv/play/pforum.php?mode=pastwch&num=52577

Nキーロールオーバー - Wikipedia
https://ja.wikipedia.org/wiki/N%E3%82%AD%E3%83%BC%E3%83%AD%E3%83%BC%E3%83%AB%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC


入力はキーボードと同時にゲームパッドへも対応させることをおすすめします。
ちなみに我が家のキーボードではCVBNM同時入力出来ました。3キーロールオーバーぐらいだったと思ってたんだけどな…。


> まだ同時押しや一拍(?)の間に複数のノードを落とす方法が分かりません。

変数gakuが譜面データでしょうか。
これに1文字しか入らない作りだから同時押し判定が出来ないようですね。
まずはgakuを配列変数とかにして、5個分の楽譜データを取得して入れられるようにしてみてください。


> ・コンボ表示
成功をカウントする変数作ればいいのではないでしょうか。


> ・音楽をならす
dmmplay で再生できなかったのでしょうか?


> ・txtファイルからノードの落とすときを取得
音ゲーはよくわからないのですが、確か過去に同様の質問があったような。
検索してみてください。



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