ページ 11

初歩的なこと

Posted: 2010年11月25日(木) 10:31
by WLD
タイトルの選択画面についてです
void opening_disp(int White,int y,int x){
DrawString( x , y , "■" , White );
DrawString( 270 , 200 , "GAME START" , White );
DrawString( 250 , 240 , "未設定" , White );
DrawString( 280 , 280 , "未設定" , White );
DrawString( 290 , 320 , "終了" , White );
}
void opening_control(){
int White,y=title.y=200,x=title.x=250;
White = GetColor( 255 , 255 , 255 ) ;

opening_disp(White,y,x);
if(CheckStatePad(configpad.down)>0){
if(title.y==200){
title.y=240;
title.x=230;
}
if(y==240){
y=280;
x=260;
}
if(y==280){
y=320;
x=270;
}

if(y==320){
y=200;
x=250;
}
}
if(CheckStatePad(configpad.up)>0){
if(y==200){
y=320;
x=270;
}
if(y==240){
y=200;
x=250;
}
if(y==280){
y=240;
x=230;

}
if(y==320){
y=280;
x=260;
}
}
if(CheckStatePad(configpad.shot)>0){
if(y==200){
game_state=51;
}
}
}
void opening_main(){
opening_control();
}

C言語~ゲームプログラミングの館~を参考にさせてもらい
↑のようにして関数呼び出しを使い・・・・って言うか
そこが問題ではなく、簡単に言えば、↑の文字はちゃんと描画されますが、パッドの十字キーを押しても反応がありません(ちなみにショットボタンとして登録したのは反応し、ゲーム画面に映ります)
ゲームに入ると十字キーはちゃんと動作するので、↑のどっかがおかしいんだと思いますが、わかりません・・・
すみません、教えてください・・・(;ω;)

Re: 初歩的なこと

Posted: 2010年11月25日(木) 11:47
by softya(ソフト屋)
int White,y=title.y=200,x=title.x=250;
で毎回初期化しているためだと思います。

見づらいので字下げしてコード形式で貼っておきます。

コード:

void opening_disp(int White,int y,int x){
	DrawString( x , y , "■" , White );
	DrawString( 270 , 200 , "GAME START" , White );
	DrawString( 250 , 240 , "未設定" , White );
	DrawString( 280 , 280 , "未設定" , White );
	DrawString( 290 , 320 , "終了" , White );
}
void opening_control(){
	int White,y=title.y=200,x=title.x=250;
	White = GetColor( 255 , 255 , 255 ) ;

	opening_disp(White,y,x);
	if(CheckStatePad(configpad.down)>0){
		if(title.y==200){
			title.y=240;
			title.x=230;
		}
		if(y==240){
			y=280;
			x=260;
		}
		if(y==280){
			y=320;
			x=270;
		}

		if(y==320){
			y=200;
			x=250;
		}
	}
	if(CheckStatePad(configpad.up)>0){
		if(y==200){
			y=320;
			x=270;
		}
		if(y==240){
			y=200;
			x=250;
		}
		if(y==280){
			y=240;
			x=230;

		}
		if(y==320){
			y=280;
			x=260;
		}
	}
	if(CheckStatePad(configpad.shot)>0){
		if(y==200){
			game_state=51;
		}
	}
}
void opening_main(){
	opening_control();
}

Re: 初歩的なこと

Posted: 2010年11月25日(木) 13:19
by WLD
理由はわかりましたが・・・
解決法としてはどのようにすればいいでしょう?
わがまま言ってすみません。

Re: 初歩的なこと

Posted: 2010年11月25日(木) 13:29
by softya(ソフト屋)
解決方法と言いましても
int White,y=title.y=200,x=title.x=250;
でopening_control時に毎回初期化されるので、
title.y=200
title.x=250
をループ外に出すしかありません。

メイン側が提示されていないのでどうなっているか分かりませんが、毎回初期化しない様に出来ませんか?

Re: 初歩的なこと

Posted: 2010年11月25日(木) 13:33
by softya(ソフト屋)
あとx,yで処理してますがtitle.xとtitle.yで処理しないと関数外に出た時に情報が消えてしまいます。
変数の寿命の問題。
http://www.geocities.jp/ky_webid/c/022.html

Re: 初歩的なこと

Posted: 2010年11月25日(木) 16:52
by ゲスト
おお!関数外に出したらうまくいきました!ありがとうございます!
豆知識のほうも、役に立ちました!ありがとうございます!一応解決です(って言うか今回、解決ってないのね)