ゲームを作っていても、プログラム的には上達する部分が少ないと思うので、
結構前に買ってちょっとしかやっていなかった
「ゲームプログラマになる前に覚えておきたい技術」という本で勉強しようと思います。
今は、アンドロイドで作っているし,言語はjavaだし、Openglだしと
つながっている部分はゲームプログラムという点しかないけれど、すこしでも上達すればという思いでやろうと思います。
チャプター1からチャプター27まであるんですが、前に2まではやってあったので3からスタートすることにしました。
しかし、しばらくC++とvisualstdioを触っていなかったので使いにくいし、C++も結構忘れている、
コードを書こうとするとjavaの書き方になってしまってなかなか進まないこともあり大変です。
C++は難しいというか使いこなすのが大変。
さらに勉強している途中で早速つまずきました。サンプルプログラムを実行してもゲームを動かすことができないんです。
ゲームを起動することはできるんですが、絵画面がでたままキー入力を受け付けずずっと更新状態のままで、おかしいなと思ってネットで探すも同じようなのはでてきません。
止まっていたのはNimotsuKunImageの以下の部分↓
cin >> input;
このcinはiostreamのcinではなくて、gamelibというオリジナルのライブラリーの関数でした。
その関数の中身を見てみると、
//StandardInput
StandardInput cin;
StandardInput::StandardInput() : mPrevEnterOn( false ){
}
StandardInput& StandardInput::operator>>( char& a ){
a = '\0'; //初期値
bool entered = false;
while ( true ){ //無限ループ
//スペース
if ( GetAsyncKeyState( VK_SPACE ) & 0x8000 ){
a = ' ';
entered = true;
}
//0-9
for ( char i = '0'; i <= '9'; ++i ){
if ( GetAsyncKeyState( i ) & 0x8000 ){
a = i;
entered = true;
}
}
//a-z
for ( char i = 'A'; i <= 'Z'; ++i ){
if ( GetAsyncKeyState( i ) & 0x8000 ){
if ( GetAsyncKeyState( VK_SHIFT ) & 0x8000 ){
a = i;
}else{
a = 'a' + ( i - 'A' );
}
entered = true;
}
}
bool enterOn = ( ( GetAsyncKeyState( VK_RETURN ) & 0x8000 ) != 0 );
if ( entered && enterOn && !mPrevEnterOn ){
mPrevEnterOn = enterOn;
break;
}
//ウィンドウから終了要請を受けているようなら抜ける
bool alt = ( ( GetAsyncKeyState( VK_MENU ) & 0x8000 ) != 0 );
bool f4 = ( ( GetAsyncKeyState( VK_F4 ) & 0x8000 ) != 0 );
if ( alt && f4 ){
Framework().requestEnd();
break;
}
mPrevEnterOn = enterOn;
}
return *this;
}
となっており、よく見るとリターンキーを押さないと入力を受け付けないようになっていた。
さらにwhileで入力待ちになっていたから、更新されたままの状態になってしまっていた。
ということで、キーを入力した後にリターンキーを押せばちゃんと動かすことができました。
これを直すのに理解するのに時間がかかったし、これでとまったのは自分だけでしょう。
あーあ
0 件のコメント:
コメントを投稿