3.3「章簡単な選択画面を作る」について
Posted: 2014年3月20日(木) 00:08
この章では↓キーを押すことでSelectNum = (SelectNum + 1) % 5の処理で0~5のループをしていました。
そこで↑キーでも同じ事をやってみようと思い、SelectNum = (SelectNum - 1) % 5で処理をしてみたのですが、この場合0から-1された時に-1となり、ループが出来ません。
if(SelectNum < 0) SelectNum = 4;とすればいいと思うのですが入れると上にある処理を分解しなくてはいけないし、↑キーの処理だけ見た目があれになるのも嫌なので、いい方法ありませんか?
<code=C>
while(!ProcessMessage() && !ScreenFlip() && !ClearDrawScreen() && !gpUpdateKey())
{
//----更新処理----//
if( Key[ KEY_INPUT_DOWN ] == 1 || Key[ KEY_INPUT_DOWN ] > 30)
{ // 下キーが押された瞬間だけ処理
SelectNum = ( SelectNum + 1 ) % 5; // 現在の選択項目を一つ下にずらす(ループする)
}
if(Key[ KEY_INPUT_UP ] == 1 || Key[ KEY_INPUT_UP ] > 30)
{ //上キーが押された瞬間だけ処理
SelectNum = ( SelectNum - 1 ) % 5; // 現在の選択項目を一つ上にずらす(ループする)
}
//----描画処理----//
for( int i=0; i<5; i++ ){ // メニュー項目を描画
if(i == SelectNum)
{
DrawFormatString( MenuElement.x - 20, MenuElement.y, GetColor(255,255,255), MenuElement.name );
}
else
{
DrawFormatString( MenuElement.x, MenuElement.y, GetColor(255,255,255), MenuElement.name );
}
}
}
</code>
そこで↑キーでも同じ事をやってみようと思い、SelectNum = (SelectNum - 1) % 5で処理をしてみたのですが、この場合0から-1された時に-1となり、ループが出来ません。
if(SelectNum < 0) SelectNum = 4;とすればいいと思うのですが入れると上にある処理を分解しなくてはいけないし、↑キーの処理だけ見た目があれになるのも嫌なので、いい方法ありませんか?
<code=C>
while(!ProcessMessage() && !ScreenFlip() && !ClearDrawScreen() && !gpUpdateKey())
{
//----更新処理----//
if( Key[ KEY_INPUT_DOWN ] == 1 || Key[ KEY_INPUT_DOWN ] > 30)
{ // 下キーが押された瞬間だけ処理
SelectNum = ( SelectNum + 1 ) % 5; // 現在の選択項目を一つ下にずらす(ループする)
}
if(Key[ KEY_INPUT_UP ] == 1 || Key[ KEY_INPUT_UP ] > 30)
{ //上キーが押された瞬間だけ処理
SelectNum = ( SelectNum - 1 ) % 5; // 現在の選択項目を一つ上にずらす(ループする)
}
//----描画処理----//
for( int i=0; i<5; i++ ){ // メニュー項目を描画
if(i == SelectNum)
{
DrawFormatString( MenuElement.x - 20, MenuElement.y, GetColor(255,255,255), MenuElement.name );
}
else
{
DrawFormatString( MenuElement.x, MenuElement.y, GetColor(255,255,255), MenuElement.name );
}
}
}
</code>