Ouxiy さんが書きました: ↑4年前
if (key[KEY_INPUT_RIGHT] == 1 && x + DX < RIGHT)に関して、右のキーが押されたら1進み、
== 1 は、キーが押されているかどうかの判定です。
1進みません。
Ouxiy さんが書きました: ↑4年前
かつ、、、x + DX < RIGHTの部分が何を表しているのですか?
またx + DX < RIGHTにより右方向への移動を制限しているのでしょうか?
x を DX だけ進めても右端を超えないかどうかのチェックです。
Ouxiy さんが書きました: ↑4年前
関数void gpUpdateKeyは{}より256のキーをchar型で収納しましたが、
char tmpKey[256]; は 256個のキーの押下状態を収納するために用意しましたが、
まだ、押下状態の値は何も入っていません。
Ouxiy さんが書きました: ↑4年前
そのあとGetHitKeyStateAll(tmpKey); // 全てのキーの入力状態を取得
for (int i = 0; i < 256; i++)としているのはなぜですか、
GetHitKeyStateAll(tmpKey); は、GetHitKeyStateAll を呼び出すことによって、
キーの押下状態を tmpKey に取得します。
次に、for (int i = 0; i < 256; i++)としているのは、
取得した 256個のキーの状態を一つ一つ見ていくためです。
Ouxiy さんが書きました: ↑4年前
リファレンスを呼んだのですが、専門用語が難しくイメージできませんでした。フレームや押下状態など出てきますが、どの関数がフレームや押下状態と関係があるのか、GetHitKeyStateAll(tmpKey)の必要性がわかりません。
GetHitKeyStateAll を呼び出さないとキーの押下状態は取得できません。
これが、GetHitKeyStateAll(tmpKey) の必要性です。
WinMain の whileループにより、1フレームに 1回 gpUpdateKey が呼び出され、
その中で GetHitKeyStateAll が呼び出されます。
Ouxiy さんが書きました: ↑4年前
for (int i = 0; i < 256; i++)に関しては常に更新して元の状態に戻すためのプログラムだとわかります。
元の状態って何ですか?
for (int i = 0; i < 256; i++)としているのは、取得した 256個のキーの状態を
tmpKey[ i] で、一つ一つ見ていくためです。
tmpKey[ i] には 0 か 1 しか入っていません。
Ouxiy さんが書きました: ↑4年前
ただforの後にif (tmpKey[ i]) key[ i]++がある理由はforで選ばれた一つのキーのフレームをカウントアップするためのプログラムですか?
tmpKey[ i] が 0 なら、key[ i] を 0 にリセットします。
tmpKey[ i] が 1 なら、key[ i] を カウントアップします。
INPUT_KEY_RIGHT のキーを押して離すと、WinMain の whileループで gpUpdateKey
が何度も呼ばれるたびに、tmpKey[INPUT_KEY_RIGHT] は、
0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, ... となります。
gpUpdateKey の中の for文の中の if文で、key[INPUT_KEY_RIGHT] は、
0, 0, 0, 1, 2, 3, 4, 5, 6, 0, 0, 0, ... となります。
Ouxiy さんが書きました: ↑4年前
そして、以上のプログラムをフレーム、キー、押下状態、バッファ、カウントアップ、リセットの用語を用いて詳しく、PCの中で何が起こっているのか教えてほしいです。
「バッファ」って何ですか?
質問にコードを書くときは、codeタグを使ってください。
そうでないと、コードが左詰めになって、読むことができません。また、
key[ i] が key となって、その後すべての半角文字が斜体になってしまいます。