#4
by Math » 5年前
>というプログラムの10行目 if( tmpKey != 0 ) の条件式を tmpkey = 1 にすると右キーを押しても反応せず、最初の位置も変わりました。
GetHitKeyStateAll関数での()の中身は押されていたら1、押されていなければ0なので != 0 も = 1 も同じような気がするんですが、なぜ上手くいかないんでしょうか?
ーーーーー
10行目は
if( tmpKey[ i ] != 0 ){ // i番のキーコードに対応するキーが押されていたら
ですから
if( tmpKey[ i ] == 1 ){ // i番のキーコードに対応するキーが押されていたら
の勘違いでしょう(^^; そのようににしたら”正常” に動作しますよ。
***
チェック付きプログラム
コード:
#include "DxLib.h"
int Key[256]; // キーが押されているフレーム数を格納する
// キーの入力状態を更新する
int gpUpdateKey(){
char tmpKey[256]; // 現在のキーの入力状態を格納する
GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
for( int i=0; i<256; i++ ){
if( tmpKey[i] == 1 ){ // i番のキーコードに対応するキーが押されていたら
Key[i]++; // 加算
} else { // 押されていなければ
Key[i] = 0; // 0にする
}
}
return 0;
}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
int Color; Color = GetColor( 255 , 255 , 255 ) ;
int x=0;
// while(裏画面を表画面に反映, メッセージ処理, 画面クリア, キーの状態更新)
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){
DrawFormatString( x, 0, GetColor(255,255,255), "?!" ); // x,0 の位置に白で ?! を描画
if( Key[KEY_INPUT_RIGHT] == 1 ){ // 右キーが押された瞬間なら
x = x + 50; // xを50加算
}
DrawFormatString( 0, 30, Color, "KEY_INPUT_RIGHT=%d: ", KEY_INPUT_RIGHT) ;
for( int i=65; i<256; i++ ){ DrawFormatString( 70*((i-65) % 8), 20*((i-65)/8) + 60, Color, ":%d=%d: ", i ,Key[i]) ; }
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
実行する。
http://www2.koyoen.birdview.co.jp/~abcx ... -03-a-.PNG
キーを押しているとカウント・アップします。
>というプログラムの10行目 if( tmpKey != 0 ) の条件式を tmpkey = 1 にすると右キーを押しても反応せず、最初の位置も変わりました。
GetHitKeyStateAll関数での()の中身は押されていたら1、押されていなければ0なので != 0 も = 1 も同じような気がするんですが、なぜ上手くいかないんでしょうか?
ーーーーー
10行目は
if( tmpKey[ i ] != 0 ){ // i番のキーコードに対応するキーが押されていたら
ですから
if( tmpKey[ i ] == 1 ){ // i番のキーコードに対応するキーが押されていたら
の勘違いでしょう(^^; そのようににしたら”正常” に動作しますよ。
***
チェック付きプログラム
[code]
#include "DxLib.h"
int Key[256]; // キーが押されているフレーム数を格納する
// キーの入力状態を更新する
int gpUpdateKey(){
char tmpKey[256]; // 現在のキーの入力状態を格納する
GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
for( int i=0; i<256; i++ ){
if( tmpKey[i] == 1 ){ // i番のキーコードに対応するキーが押されていたら
Key[i]++; // 加算
} else { // 押されていなければ
Key[i] = 0; // 0にする
}
}
return 0;
}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
int Color; Color = GetColor( 255 , 255 , 255 ) ;
int x=0;
// while(裏画面を表画面に反映, メッセージ処理, 画面クリア, キーの状態更新)
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){
DrawFormatString( x, 0, GetColor(255,255,255), "?!" ); // x,0 の位置に白で ?! を描画
if( Key[KEY_INPUT_RIGHT] == 1 ){ // 右キーが押された瞬間なら
x = x + 50; // xを50加算
}
DrawFormatString( 0, 30, Color, "KEY_INPUT_RIGHT=%d: ", KEY_INPUT_RIGHT) ;
for( int i=65; i<256; i++ ){ DrawFormatString( 70*((i-65) % 8), 20*((i-65)/8) + 60, Color, ":%d=%d: ", i ,Key[i]) ; }
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
[/code]
実行する。
[url]http://www2.koyoen.birdview.co.jp/~abcxyz/19-03-03-a-.PNG[/url]
キーを押しているとカウント・アップします。