int Key[256]; // キーが押されているフレーム数を格納する
// キーの入力状態を更新する
int gpUpdateKey() {
char tmpKey[256]; // 現在のキーの入力状態を格納する
GetHitKeyStateAll(tmpKey); // 全てのキーの入力状態を得る
for (int i = 0; i<256; i++) {
if (tmpKey[i] != 0) { // i番のキーコードに対応するキーが押されていたら
Key[i]++; // 加算
}
else { // 押されていなければ
Key[i] = 0; // 0にする
}
}
return 0;
}
このプログラムによってPCの中で何が起こっているのかを教えて頂けると嬉しいです。
なぜこのようにしなくてはキーボードを利用してキャラが動かせないのか。
key[256]やバッファなど出てきますが、フレームや押下状態をバッファに入れるなど設計図というかイメージが出来ずにいます。
なんで更新する必要があるのか、一度押した後、おしっぱではずっと動くので、更新して0に戻す、、、など、そこで出てくるフレームや押下状態に対してもイメージが出来ません。バッファに押下状態があることでおしっぱを再現しいるとか、それをKey = 0更新して再びchar tmpKey[256]してキーボードを話すと止まるなど。
逆に、おしっぱでも一歩しか進まないようにするにはバッファやフレームや押下状態をどのように考えながら上のようにコードを書けばいいのかわかりません。
ただ欲を言えば、使う画像のデータをPC内で扱っていると仮定して、その画像のフレーム数や押下状態の収納するバッファの様子や図を紙に書いて考えて、上のようなコードが作れた!みたいなのが理想です。そのように説明して頂けると考えやすいです。
そしてもう一つ、できれば、別表現で以上のプログラムをもっと簡単に書き直せないでしょうか?
というのも、正直、「フレーム」や「押下状態」などの用語の理解に努めようとしたのですが、うまくいかず、もっとめんどうで地道にあえてわかりやすく簡単に書いたら理解できるような気がしました。
というのもhttps://dixq.net/g/02_09.htmlより私が押したいキーボードは右、左、下、上の四つのみなのでCheckHitKey関数が使えるのではないかと考えました。もし、全部のキーボードを使わないで特定のキーボードのみを打つプログラムを作るとしたら、上のプログラムを利用しなくても作れるでしょうか?