初歩的なこと

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
WLD

初歩的なこと

#1

投稿記事 by WLD » 13年前

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 初歩的なこと

#2

投稿記事 by softya(ソフト屋) » 13年前

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();
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

WLD

Re: 初歩的なこと

#3

投稿記事 by WLD » 13年前

理由はわかりましたが・・・
解決法としてはどのようにすればいいでしょう?
わがまま言ってすみません。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 初歩的なこと

#4

投稿記事 by softya(ソフト屋) » 13年前

解決方法と言いましても
int White,y=title.y=200,x=title.x=250;
でopening_control時に毎回初期化されるので、
title.y=200
title.x=250
をループ外に出すしかありません。

メイン側が提示されていないのでどうなっているか分かりませんが、毎回初期化しない様に出来ませんか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 初歩的なこと

#5

投稿記事 by softya(ソフト屋) » 13年前

あとx,yで処理してますがtitle.xとtitle.yで処理しないと関数外に出た時に情報が消えてしまいます。
変数の寿命の問題。
http://www.geocities.jp/ky_webid/c/022.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ゲスト

Re: 初歩的なこと

#6

投稿記事 by ゲスト » 13年前

おお!関数外に出したらうまくいきました!ありがとうございます!
豆知識のほうも、役に立ちました!ありがとうございます!一応解決です(って言うか今回、解決ってないのね)

閉鎖

“C言語何でも質問掲示板” へ戻る