VC++とDXライブラリを使用して、
「画像をメモリに読み込んで表示し、上キーと下キーを押すと画像が上下に移動する」というプログラムを作りたくて、下のようなプログラムを書いてみたのですが
code
#include "DxLib.h"
int Key[256];
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key==1) GetHitKeyStateAll_InputKey++;
else GetHitKeyStateAll_InputKey=0;
}
return 0;
}
int func_state = 0;
int x =220;
void draw_picture();
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない
switch(func_state){
case 0:
draw_picture();
default:
break;
}
ScreenFlip();
}
DxLib_End();
return 0;
}
void draw_picture(){
int image;
image = LoadGraph( "picture.png" ) ;
DrawGraph( 60 , x , image , FALSE ) ;
if(Key[KEY_INPUT_UP]==1) x=x-5;
if(Key[KEY_INPUT_DOWN]==1) x=x+5;
}
/code
上キーや下キーを押し続けても一度移動するだけなんです。
押している間は動かし続けたいのですが、どうすればよいでしょうか・・
初歩的な質問で申し訳ありません
初心者ですが、画像を動かせません。
Re: 初心者ですが、画像を動かせません。
このプログラムのKeyは押されていたら1を足し、押されてなかったら0になるというものなので
押されていたら1、2と増えますので、==1ではなく>=1です。
if(Key[KEY_INPUT_UP]==1)
if(Key[KEY_INPUT_DOWN]==1)の部分を
if(Key[KEY_INPUT_UP]>=1)
if(Key[KEY_INPUT_DOWN]>=1)にします。
これで大丈夫だと思います。
押されていたら1、2と増えますので、==1ではなく>=1です。
if(Key[KEY_INPUT_UP]==1)
if(Key[KEY_INPUT_DOWN]==1)の部分を
if(Key[KEY_INPUT_UP]>=1)
if(Key[KEY_INPUT_DOWN]>=1)にします。
これで大丈夫だと思います。
Re: 初心者ですが、画像を動かせません。
解決してしまったようですが、
気になることを少し書きます。
case 0:
draw_picture();
のあとにbreak; がありません。
void draw_picture(){
int image;
image = LoadGraph( "picture.png" ) ;
DrawGraph( 60 , x , image , FALSE ) ;
if(Key[KEY_INPUT_UP]==1) x=x-5;
if(Key[KEY_INPUT_DOWN]==1) x=x+5;
}
ここでは毎フレームごとにDrawGraphされているんですが、
LoadGraphも同じように毎回なされています。
危険なので、
int image;
image = LoadGraph( "picture.png" ) ;
は、ループの外に移しましょう。
while(ProcessMessage()==0 &&.....の上の方にということです。
あと、y座標のところをXと書くのも変だと思います。
気になることを少し書きます。
case 0:
draw_picture();
のあとにbreak; がありません。
void draw_picture(){
int image;
image = LoadGraph( "picture.png" ) ;
DrawGraph( 60 , x , image , FALSE ) ;
if(Key[KEY_INPUT_UP]==1) x=x-5;
if(Key[KEY_INPUT_DOWN]==1) x=x+5;
}
ここでは毎フレームごとにDrawGraphされているんですが、
LoadGraphも同じように毎回なされています。
危険なので、
int image;
image = LoadGraph( "picture.png" ) ;
は、ループの外に移しましょう。
while(ProcessMessage()==0 &&.....の上の方にということです。
あと、y座標のところをXと書くのも変だと思います。
Re: 初心者ですが、画像を動かせません。
これをやる際は、int image;はWinMain関数の外に出しておかないと、wing さんが書きました:int image;
image = LoadGraph( "picture.png" ) ;
は、ループの外に移しましょう。
while(ProcessMessage()==0 &&.....の上の方にということです。
imageが定義されていないと怒られると思います。
注意してください。
勘違いだったらすみません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
- MoNoQLoREATOR
- 記事: 284
- 登録日時: 13年前
- 住所: 東京
Re: 初心者ですが、画像を動かせません。
??
もっと簡単に書けるのでは?
これだけでOK
ついでに四方向に移動できるようにしました。
もっと簡単に書けるのでは?
#include "DxLib.h"
int image;
char key[256];
int x,y;
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC){
ChangeWindowMode(TRUE);
if(DxLib_Init() == -1) return(-1);
SetDrawScreen(DX_SCREEN_BACK);
image = LoadGraph("image.png");
while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
ClsDrawScreen();
GetHitKeyStateAll(key);
//キーが押されていれば1が、
//キーが押されていなければ0が格納されているので
y -= key[KEY_INPUT_UP] * 5;
y += key[KEY_INPUT_DOWN] * 5;
x -= key[KEY_INPUT_LEFT] * 5;
x += key[KEY_INPUT_RIGHT] * 5;
DrawGraph(x,y, image, TRUE);
ScreenFlip();
}
DxLib_End();
return(0);
}
ついでに四方向に移動できるようにしました。