ページ 11

選択画面

Posted: 2010年3月12日(金) 23:52
by Y.K
今、選択画面の作り方。というのをやっているのですがどうにもうまくいきません。
どうかヒントをください。


if( Key & PAD_INPUT_UP )
{
y -= 20;
if( y ==340 )
y = 420;
}
else if( Key & PAD_INPUT_DOWN )
{
y += 20;
if( y == 440 )
y = 400;//390;
}

DrawString( 510 , y , "■", GetColor( 255, 255, 255 ) );
DrawString( 530 , 360 , "たたかう", GetColor( 255, 255, 255 ) );
DrawString( 530 , 380 , "まほう", GetColor( 255, 255, 255 ) );
DrawString( 530 , 400 , "アイテム", GetColor( 255, 255, 255 ) );
DrawString( 530 , 420 , "逃げる", GetColor( 255, 255, 255 ) );
//DrawString( 600 , 180 , "CONTINUE4" , White );

} 画像

Re:選択画面

Posted: 2010年3月13日(土) 02:27
by kazuoni
提示されたプログラムのみでは状況が把握できません。
何をどの様に実装して、どの様な結果を期待していたが、
現実、どの様になってしまっているのか、
コンパイルエラーが出ているならばどの様なエラーが出ているか
を追記してください。

大規模でなければソースコードをtxtでUPするのも有効かと思います。

Re:選択画面

Posted: 2010年3月13日(土) 08:57
by Y.K
状況としては、カーソルが”たたかう”の所にあって↓キーを押すと”まほう”の所までは行くのですがその先の”アイテム”、”にげる”の横にカーソルが行かないです。後、↑キーを押すと一番下の”にげる”に飛ぶだけでその先に行かないです。

自分が望む動きはまずカーソルは”こうげき”の横にいて↓キーを押すと順番に”まほう”、”アイテム”というふうに順番に選択をするようにして一番したの”にげる”まで来たら一番上の”こうげき”の横に飛ぶようにしたいです。

ちなみにエラーはないです。
ソースコードは長いのであまり載せれないのですがこれでいいですか?

Re:選択画面

Posted: 2010年3月13日(土) 13:41
by conio
こんな感じでどうでしょう。
------------------------------------------------------------------------------------
#include "DxLib.h"

int Key[256];
int GetHitKeyStateAll_2(int KeyStateBuf[/url]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key==1) KeyStateBuf++;
else KeyStateBuf=0;
}
return 0;
}

struct SELECT{
int x;
int y;
char* str;
};

SELECT Select[/url] = { {100,100,"Menu 1"},
{100,120,"Menu 2"},
{100,140,"Menu 3"}};

void DrawSelect(void){
int white = GetColor( 255, 255, 255);
int Red = GetColor( 255, 0, 0);
static int count = sizeof(Select) / sizeof(Select[0]);
static int NowPt = 0;

if(Key[KEY_INPUT_UP] == 1){
NowPt = (NowPt + count - 1) % count;
}else if(Key[KEY_INPUT_DOWN] == 1){
NowPt = (NowPt + 1) % count;
}

for(int i = 0; i < count; i++){
if(i == NowPt ){
DrawString( Select.x, Select.y, Select.str, Red);
}else{
DrawString( Select.x, Select.y, Select.str, white);
}
}
DrawString( Select[NowPt].x - 40, Select[NowPt].y, "⇒", white);
}


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE );

if(DxLib_Init() == -1 ) return -1;
SetDrawScreen( DX_SCREEN_BACK );

while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0 ){
DrawSelect();
ScreenFlip();
}
DxLib_End();
return 0;
}
------------------------------------------------------------------------------------ 画像