ここから質問投稿すると、最大4000ポイント当たる!!!! >>

以下のプログラムのif文に関してなのですが、
if (Key[KEY_INPUT_R] == 1 && playerY == enemyY) {
lock = 1;
lockonMove = 1;

}
if (lockonMove > 0) {
++lockonMove;
}
if (lockonMove == 10) {
lockImge = lockonHandle[0];

}
else if (lockonMove == 20) {
lockImge = lockonHandle[1];

}
else if (lockonMove == 30) {
lockImge = lockonHandle[2];


}
else if (lockonMove == 40) {
lockImge = lockonHandle[1];
lockonMove = 1;
}

if (playerY != enemyY) {
lock = 0;
lockonMove = 0;
}




if (Key[KEY_INPUT_R] == 1 && playerY == enemyY) {
lock = 1;
lockonMove = 1;

if (lockonMove > 0) {
++lockonMove;
}
if (lockonMove == 10) {
lockImge = lockonHandle[0];

}
else if (lockonMove == 20) {
lockImge = lockonHandle[1];

}
else if (lockonMove == 30) {
lockImge = lockonHandle[2];


}
else if (lockonMove == 40) {
lockImge = lockonHandle[1];
lockonMove = 1;
}

if (playerY != enemyY) {
lock = 0;
lockonMove = 0;
}

}
のプログラムに関して、
上のプログラムは+1ずつされますが、下のプログラムは一度しか+1されないのはなぜでしょうか。
詳しく説明して頂けるとありがたいです。

A 回答 (7件)

ですよね, volatile がついてないとおかしいですよね>#6.



って, volatile がないと下は全体で
if (Key[KEY_INPUT_R] == 1 && playerY == enemyY) {
lock = 1;
lockonMove = 2;
}
と同じじゃね~か.
    • good
    • 1

最後のif文はありえないですね。

    • good
    • 2

下って, 論理的におかしくないか?

    • good
    • 1

「偽であるのが正解だと思いますが」と書いてしまいましたが、どちらが正解なのかは分かりません。

スレ主様はお分かりだと思いますので、この言葉については無視して下さい。
    • good
    • 0

>なぜ最初のif文は真になっていないのでしょうか。



 これについては、ここにあるソース以外でKey[KEY_INPUT_R]の値が変えられている場所があると思います。Key[KEY_INPUT_R] == 1が偽である可能性が高いです。

 ここが真だとすると、lockonMove=1が実行され、続いて++lockonMoveが実行されるのでlockonMoveは永遠に2のままです。上のソースでも同じことです。
 だから偽であるのが正解だと思いますが、掲載されているソースだけを拝見するとそれ以外に思いつきません。

 上のソースは偽であるからlockonMove=1は実行されませんが、++lockonMoveは実行されるためlockonMoveは加算され続けます。さらに言えば、最初のif文のplayerY == enemyYは真として成り立っています。これが偽であれば、最後のif文が成り立つためlockonMove=0が実行されてしまいます。そうするとlockonMoveはずっと1のままです。だからKey[KEY_INPUT_R]の値が変えられている場所があり、それが1以外であると推定した訳です。

 下のソースは偽であるからif文の中は何も実行されません。一度だけ+1となったのは多分1が2になった時だと想像しますが、その時だけ(多分1回目)真になるのだと思います。
    • good
    • 3

>上のプログラムは+1ずつされますが、下のプログラムは一度しか+1されないのはなぜでしょうか。



上のプログラムはなんという変数が+1ずつされるのですか?
下のプログラムはなんという変数が一度しか+1されないのですか?
    • good
    • 1

lockonMove変数のことだと思いますが、下のソースは最初のif文が以降のソース全部をくくっていますから、最初のif文が真でなければそれ以降は実行しません。


if (Key[KEY_INPUT_R] == 1 && playerY == enemyY)
つまりこのif文が真になっていないため、++lockonMoveが実行されないからです。

上のソースは全部がバラバラですから、if (lockonMove > 0) が真でありさえすれば、++lockonMoveは実行されます。
    • good
    • 1
この回答へのお礼

ありがとうございます。
なぜ最初のif文は真になっていないのでしょうか。

お礼日時:2019/09/10 17:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング