void game_con(){
static int a=1;
switch(a){
case 1:
if(CheckStateKey(KEY_INPUT_X) == 1 )++con_f;
break;
case 2:
if(CheckStateKey(KEY_INPUT_X) == 1 )con_f++;
break;
case 3:
if(CheckStateKey(KEY_INPUT_Y) == 1)con_f=1;
break;
default:
break;
}
}
というコードにおいて、aの初期値は1です。
ここでXを押すとaの値が一気に3まで増えてしまいます。
aをグローバル変数とし
int a=1;
void game_con(){
switch(a){
case 1:
if(CheckStateKey(KEY_INPUT_X) == 1 )++con_f;
break;
case 2:
if(CheckStateKey(KEY_INPUT_X) == 1 )con_f++;
break;
case 3:
if(CheckStateKey(KEY_INPUT_Y) == 1)con_f=1;
break;
default:
break;
}
}
というコードとすると、一度Xを押すとaの値は2となり、もう一度Xを押すと3となります。
これはどうしてなのでしょうか?
グローバル変数とstaticについて
Re:グローバル変数とstaticについて
記載しているコードからはaの値を変化させるようなコードはないと思います。
変化するとしたら、con_fという変数ぐらいだと思います。
この関数外でcon_fをaに代入したり、足してたりするのでしょうか?
変化するとしたら、con_fという変数ぐらいだと思います。
この関数外でcon_fをaに代入したり、足してたりするのでしょうか?
Re:グローバル変数とstaticについて
すみませんコードを変えて記載したので、いろいろ間違ってました(汗)
正しくは
void game_con(){
static int a=1;
switch(a){
case 1:
if(CheckStateKey(KEY_INPUT_X) == 1 )a++;
break;
case 2:
if(CheckStateKey(KEY_INPUT_X) == 1 )a++;
break;
case 3:
if(CheckStateKey(KEY_INPUT_Y) == 1)a=1;
break;
default:
break;
}
}
と
int a=1;
void game_con(){
switch(a){
case 1:
if(CheckStateKey(KEY_INPUT_X) == 1 )a++;
break;
case 2:
if(CheckStateKey(KEY_INPUT_X) == 1 )a++;
break;
case 3:
if(CheckStateKey(KEY_INPUT_Y) == 1)a=1;
break;
default:
break;
}
}
でした。
申し訳ないです・・・
正しくは
void game_con(){
static int a=1;
switch(a){
case 1:
if(CheckStateKey(KEY_INPUT_X) == 1 )a++;
break;
case 2:
if(CheckStateKey(KEY_INPUT_X) == 1 )a++;
break;
case 3:
if(CheckStateKey(KEY_INPUT_Y) == 1)a=1;
break;
default:
break;
}
}
と
int a=1;
void game_con(){
switch(a){
case 1:
if(CheckStateKey(KEY_INPUT_X) == 1 )a++;
break;
case 2:
if(CheckStateKey(KEY_INPUT_X) == 1 )a++;
break;
case 3:
if(CheckStateKey(KEY_INPUT_Y) == 1)a=1;
break;
default:
break;
}
}
でした。
申し訳ないです・・・
Re:グローバル変数とstaticについて
この関数はゲームのコンフィング関係の関数なので、
ゲームタイトルで
http://dixq.net/g/36.html
を参考にして移動制御しmenuの値を決め
int title_flag=1
if(title_flag>0){
if( CheckStateKey(KEY_INPUT_X) == 1 ){
switch(menu)
{
case 0:
break;
case 1:
confing_flag=1;
title_flag=0;
break;
case 2:
break;
case 3:
DxLib_End();
break;
default:
break;
}
}
と置き、menuが1の状態の時にXを押すとconfing_flag=1;となり、それによって
if(confing_flag>0){
game_con();
}
というふうに呼び出してます。
上の関数をさらにmain関数ほうで呼び出しています。
こっちのmain関数はシエルさんがおっしゃる通り、龍神録のようなループの中で呼び出しています。
キーを押す長さは私自身がどんなに素早く押して放しても、結果は変わりませんでした・・・
ゲームタイトルで
http://dixq.net/g/36.html
を参考にして移動制御しmenuの値を決め
int title_flag=1
if(title_flag>0){
if( CheckStateKey(KEY_INPUT_X) == 1 ){
switch(menu)
{
case 0:
break;
case 1:
confing_flag=1;
title_flag=0;
break;
case 2:
break;
case 3:
DxLib_End();
break;
default:
break;
}
}
と置き、menuが1の状態の時にXを押すとconfing_flag=1;となり、それによって
if(confing_flag>0){
game_con();
}
というふうに呼び出してます。
上の関数をさらにmain関数ほうで呼び出しています。
こっちのmain関数はシエルさんがおっしゃる通り、龍神録のようなループの中で呼び出しています。
キーを押す長さは私自身がどんなに素早く押して放しても、結果は変わりませんでした・・・
Re:グローバル変数とstaticについて
グローバル変数と関数内のstatic変数は、関数の外から見えるかどうかの違いしかありません。
その変数の更新にかんする挙動が変わることはありません。
両者で挙動が違うとしたら、原因は別にあるはずです。
その変数の更新にかんする挙動が変わることはありません。
両者で挙動が違うとしたら、原因は別にあるはずです。
Re:グローバル変数とstaticについて
>case 3: > if(CheckStateKey(KEY_INPUT_Y) == 1)a=1;KEY_INPUT_X
KEY_INPUT_X
KEY_INPUT_Y
の順になってますが
タイプミスしてませんか?
3になるのは当然に見えますが