選択画面の作り方
Posted: 2012年12月17日(月) 04:14
こんばんは。
調べるのにも詰まってしまったので、質問させて頂きます。
私は今、softyaさんのRPG講座のソースを元に、変更・追加をしながらC言語を学んでいます。
そこで、タイトル画面に「はじめから」「つづきから」という2つの選択を作り、
移動ができるようにしたかったのですが・・・。
どうやら、移動の前に選択(上キーで上へ、下キーで下へ)処理ができていないようなのです。
館さんの3.4章や、こちらのトピックを参考にしたのですが、上下キーを押しても反応がありません。
列挙体として扱っていると、また違うものなのでしょうか。
ごめんなさい、まだまだ勉強不足なもので、教えて下さると助かります。
どうぞよろしくお願い致します。
(softyaさんのソースコードを、全部載せた方がよろしかったでしょうか・・・?
キーコンフィグ、キーの入力状態の更新などはそのままなのですが)
調べるのにも詰まってしまったので、質問させて頂きます。
私は今、softyaさんのRPG講座のソースを元に、変更・追加をしながらC言語を学んでいます。
そこで、タイトル画面に「はじめから」「つづきから」という2つの選択を作り、
移動ができるようにしたかったのですが・・・。
どうやら、移動の前に選択(上キーで上へ、下キーで下へ)処理ができていないようなのです。
館さんの3.4章や、こちらのトピックを参考にしたのですが、上下キーを押しても反応がありません。
列挙体として扱っていると、また違うものなのでしょうか。
ごめんなさい、まだまだ勉強不足なもので、教えて下さると助かります。
どうぞよろしくお願い致します。
(softyaさんのソースコードを、全部載せた方がよろしかったでしょうか・・・?
キーコンフィグ、キーの入力状態の更新などはそのままなのですが)
#define SELECT_NUM 2
typedef struct{
int x, y; // 座標格納用変数
char name[128]; // 項目名格納用変数
} TitleSelect_t ;
GameState_t Title()
{
// メニュー項目要素を作る
static TitleSelect_t TitleSelect[SELECT_NUM]={
{ 350, 450, "はじめから" },
{ 370, 500, "つづきから" },
};
static int SelectNum = 0; // 現在の選択番号
// 計算フェーズ
if( Key[ g_MainData.key_down ] == 1 ){ // 下キーが押された瞬間だけ処理
SelectNum = ( SelectNum + 1 ) % SELECT_NUM; // 現在の選択項目を一つ下にずらす(ループする)
}
if( Key[ g_MainData.key_up ] == 1 ){ // 上キーが押された瞬間だけ処理
SelectNum = ( SelectNum + SELECT_NUM - 1 ) % SELECT_NUM; // 現在の選択項目を一つ上にずらす(逆ループする)
}
if( Key[ g_MainData.key_down ] == 1 || Key[ g_MainData.key_up ] == 1 ){ // 下キーか、上キーが押された瞬間
for( int i=0; i<SELECT_NUM; i++ ){ // メニュー項目数である2個ループ処理
if( i == SelectNum ){ // 今処理しているのが、選択番号と同じ要素なら
TitleSelect[i].x = 350; // 座標を350にする
} else { // 今処理しているのが、選択番号以外なら
TitleSelect[i].x = 370;// 座標を370にする
}
}
}
// 描画フェーズ
for( int i=0; i<SELECT_NUM; i++ ){ // メニュー項目を描画
DrawFormatString( TitleSelect[i].x, TitleSelect[i].y, GetColor(255,255,255), TitleSelect[i].name );
}
// スペースで選択
if(Key[g_MainData.key_act]==1) {
switch( SelectNum ) {
case 0://ゲームスタート
return GAME_STATE_STORY;
break;
case 1://コンティニュー
return GAME_STATE_CONTINUE;
break;
}
}
return g_MainData.gameState; //状態継続
}