DXライブラリ 画面消去がうまくいっていない?
Posted: 2011年12月17日(土) 23:48
DXライブラリを使用してタイピングゲームを作りたいと思っています。
今メタセコイアで作ったキーボードのキーを読み込んで画面に表示しています。
パソコンのキーボードを押すと、それに対応して画面上のキーがへこむ(y座標を-10する)ようにしたいのですが、キーを押しても下がったようには見えません。
ClearDrawScreen();で画面消去されると思っているのですが、試しにその後にブレイクポイントを置いてデバッグをしてみると、そこで止まったときでも画面にはキーが残ったままになっています。
これって画面消去に失敗していると言うことでしょうか?
でもClearDrawScreen();の戻り値を調べてみると0が帰ってきていることから、失敗しているようには見えませんが・・・
もしやキーの座標を変えて表示してから戻して表示するまでが早いのでは?とSleep(1000);を挟んでみても、結果は同じでした。
どのようにするのがよいのでしょうか?
環境
OS:WIndows7
開発:Visual Studio 2008
DXライブラリ:DXライブラリ VisualC++用(Ver3.06c)
ソースコード
今メタセコイアで作ったキーボードのキーを読み込んで画面に表示しています。
パソコンのキーボードを押すと、それに対応して画面上のキーがへこむ(y座標を-10する)ようにしたいのですが、キーを押しても下がったようには見えません。
ClearDrawScreen();で画面消去されると思っているのですが、試しにその後にブレイクポイントを置いてデバッグをしてみると、そこで止まったときでも画面にはキーが残ったままになっています。
これって画面消去に失敗していると言うことでしょうか?
でもClearDrawScreen();の戻り値を調べてみると0が帰ってきていることから、失敗しているようには見えませんが・・・
もしやキーの座標を変えて表示してから戻して表示するまでが早いのでは?とSleep(1000);を挟んでみても、結果は同じでした。
どのようにするのがよいのでしょうか?
環境
OS:WIndows7
開発:Visual Studio 2008
DXライブラリ:DXライブラリ VisualC++用(Ver3.06c)
ソースコード
#include "DxLib.h"
#include <math.h>
void hyouzi();
struct robo_position{
float x,y,z;
float x_rotation,y_rotation,z_rotation;
};
int ModelHandle[26];
robo_position key[26];
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
VECTOR CameraPos;
SetMainWindowText("タイピングゲーム");
ChangeWindowMode(TRUE);
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
SetDrawScreen(DX_SCREEN_BACK);
// Zバッファを有効にする
SetUseZBuffer3D( TRUE ) ;
// Zバッファへの書き込みを有効にする
SetWriteZBuffer3D( TRUE ) ;
ModelHandle[0]=MV1LoadModel("キー\\A.mqo");
ModelHandle[1]=MV1LoadModel("キー\\B.mqo");
ModelHandle[2]=MV1LoadModel("キー\\C.mqo");
ModelHandle[3]=MV1LoadModel("キー\\D.mqo");
ModelHandle[4]=MV1LoadModel("キー\\E.mqo");
ModelHandle[5]=MV1LoadModel("キー\\F.mqo");
ModelHandle[6]=MV1LoadModel("キー\\G.mqo");
ModelHandle[7]=MV1LoadModel("キー\\H.mqo");
ModelHandle[8]=MV1LoadModel("キー\\I.mqo");
ModelHandle[9]=MV1LoadModel("キー\\J.mqo");
ModelHandle[10]=MV1LoadModel("キー\\K.mqo");
ModelHandle[11]=MV1LoadModel("キー\\L.mqo");
ModelHandle[12]=MV1LoadModel("キー\\M.mqo");
ModelHandle[13]=MV1LoadModel("キー\\N.mqo");
ModelHandle[14]=MV1LoadModel("キー\\O.mqo");
ModelHandle[15]=MV1LoadModel("キー\\P.mqo");
ModelHandle[16]=MV1LoadModel("キー\\Q.mqo");
ModelHandle[17]=MV1LoadModel("キー\\R.mqo");
ModelHandle[18]=MV1LoadModel("キー\\S.mqo");
ModelHandle[19]=MV1LoadModel("キー\\T.mqo");
ModelHandle[20]=MV1LoadModel("キー\\U.mqo");
ModelHandle[21]=MV1LoadModel("キー\\V.mqo");
ModelHandle[22]=MV1LoadModel("キー\\W.mqo");
ModelHandle[23]=MV1LoadModel("キー\\X.mqo");
ModelHandle[24]=MV1LoadModel("キー\\Y.mqo");
ModelHandle[25]=MV1LoadModel("キー\\Z.mqo");
for(int n=0;n<26;n++){
if(ModelHandle[n]==-1){
return -1;
}
}
SetCameraNearFar(1.0,3000.0);
CameraPos.x=0.0f;
CameraPos.y=125.0f;
CameraPos.z=320.0f;
for(int n=0;n<26;n++){
key[n].x=n*30-240;
key[n].y=-100.0;
key[n].z=0.0;
key[n].x_rotation=0.0;
key[n].y_rotation=0.0;
key[n].z_rotation=0.0;
}
SetCameraPositionAndTarget_UpVecY(CameraPos,VGet(0.0,50.0f,0.0f));
ChangeLightTypeDir(VGet(0.0,-1.0f,-1.0f));
while(ScreenFlip()==0&&ProcessMessage()==0&&ClearDrawScreen()==0){
if(CheckHitKey(KEY_INPUT_ESCAPE)==1){
return -1;
}
else if(CheckHitKey(KEY_INPUT_A)==1){
key[0].y=key[0].y-10;
hyouzi();
key[0].y=key[0].y+10;
}
else if(CheckHitKey(KEY_INPUT_B)==1){
key[1].y=key[1].y-10;
hyouzi();
key[1].y=key[1].y+10;
}
else if(CheckHitKey(KEY_INPUT_C)==1){
key[2].y=key[2].y-10;
hyouzi();
key[2].y=key[2].y+10;
}
else if(CheckHitKey(KEY_INPUT_D)==1){
key[3].y=key[3].y-10;
hyouzi();
key[3].y=key[3].y+10;
}
else if(CheckHitKey(KEY_INPUT_E)==1){
key[4].y=key[4].y-10;
hyouzi();
key[4].y=key[4].y+10;
}
else if(CheckHitKey(KEY_INPUT_F)==1){
key[5].y=key[5].y-10;
hyouzi();
key[5].y=key[5].y+10;
}
else if(CheckHitKey(KEY_INPUT_G)==1){
key[6].y=key[6].y-10;
hyouzi();
key[6].y=key[6].y+10;
}
else if(CheckHitKey(KEY_INPUT_H)==1){
key[7].y=key[7].y-10;
hyouzi();
key[7].y=key[7].y+10;
}
else if(CheckHitKey(KEY_INPUT_I)==1){
key[8].y=key[8].y-10;
hyouzi();
key[8].y=key[8].y+10;
}
else if(CheckHitKey(KEY_INPUT_J)==1){
key[9].y=key[9].y-10;
hyouzi();
key[9].y=key[9].y+10;
}
else if(CheckHitKey(KEY_INPUT_K)==1){
key[10].y=key[10].y-10;
hyouzi();
key[10].y=key[10].y+10;
}
else if(CheckHitKey(KEY_INPUT_L)==1){
key[11].y=key[11].y-10;
hyouzi();
key[11].y=key[11].y+10;
}
else if(CheckHitKey(KEY_INPUT_M)==1){
key[12].y=key[12].y-10;
hyouzi();
key[12].y=key[12].y+10;
}
else if(CheckHitKey(KEY_INPUT_N)==1){
key[13].y=key[13].y-10;
hyouzi();
key[13].y=key[13].y+10;
}
else if(CheckHitKey(KEY_INPUT_O)==1){
key[14].y=key[14].y-10;
hyouzi();
key[14].y=key[14].y+10;
}
else if(CheckHitKey(KEY_INPUT_P)==1){
key[15].y=key[15].y-10;
hyouzi();
key[15].y=key[15].y+10;
}
else if(CheckHitKey(KEY_INPUT_Q)==1){
key[16].y=key[16].y-10;
hyouzi();
key[16].y=key[16].y+10;
}
else if(CheckHitKey(KEY_INPUT_R)==1){
key[17].y=key[17].y-10;
hyouzi();
key[17].y=key[17].y+10;
}
else if(CheckHitKey(KEY_INPUT_S)==1){
key[18].y=key[18].y-10;
hyouzi();
key[18].y=key[18].y+10;
}
else if(CheckHitKey(KEY_INPUT_T)==1){
key[19].y=key[19].y-10;
hyouzi();
key[19].y=key[19].y+10;
}
else if(CheckHitKey(KEY_INPUT_U)==1){
key[20].y=key[20].y-10;
hyouzi();
key[20].y=key[20].y+10;
}
else if(CheckHitKey(KEY_INPUT_V)==1){
key[21].y=key[21].y-10;
hyouzi();
key[21].y=key[21].y+10;
}
else if(CheckHitKey(KEY_INPUT_W)==1){
key[22].y=key[22].y-10;
hyouzi();
key[22].y=key[22].y+10;
}
else if(CheckHitKey(KEY_INPUT_X)==1){
key[23].y=key[23].y-10;
hyouzi();
key[23].y=key[23].y+10;
}
else if(CheckHitKey(KEY_INPUT_Y)==1){
key[24].y=key[24].y-10;
hyouzi();
key[24].y=key[24].y+10;
}
else if(CheckHitKey(KEY_INPUT_Z)==1){
key[25].y=key[25].y-10;
hyouzi();
key[25].y=key[25].y+10;
}
hyouzi();
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
void hyouzi(){
ProcessMessage();
int m=ClearDrawScreen();
m=m*1; //ここで止めても画面にキーが残ったまま・・・
for(int n=0;n<26;n++){
MV1SetPosition(ModelHandle[n],VGet(key[n].x,key[n].y,key[n].z));
MV1SetRotationXYZ(ModelHandle[n],VGet(key[n].x_rotation,key[n].y_rotation,key[n].z_rotation));
MV1DrawModel(ModelHandle[n]);
}
}