もう少し具体的に書きますと、
上キー+右キーor左キーだけを押しているのであれば問題なく右上、左上に行くのですが、
上キー+LSHIFTキー+右キーor左キーを押すと、
動かなくなる、或いは右上、左上に行かない(上手く押すと、上、左、右には行けます)、
ということが起きてしまっています(LSHIFTキーに限ったことではありません。他のキーを押してもこのようになってしまいます)。
私なりに解決しようと、上、右、左、下に行く処理とは別に、右上、左上に行くような処理を書きましたが、ダメでした(この処理は消しました)。
ご教授いただきたいのは、
①何が原因で右上、左上に行けないのか
②どうやったら右上、左上に行けるようになるのか
以上の二点です。よろしくお願いいたします。
下に、自機の移動の処理を書いた関数と、自機の描画関数を載せます。
使用しているものは、
Visual Studio Community 2013
DXライブラリ
です。
//以下、プロトタイプ宣言
void move_player(void);
void draw_player(void);
struct PLAYER{ //自機情報
double x, y;
double draw_x, draw_y;
};
struct PLAYER p1;
//以下、関数
//自機の移動の処理
void move_player(){
//右に行く処理
if (key[KEY_INPUT_RIGHT] >= 1){
p1.x = p1.x + 4;
if (key[KEY_INPUT_LSHIFT] >= 1){
p1.x = p1.x - 2;
}
if (p1.x > 100)p1.x = 100;
}
//下に行く処理
if (key[KEY_INPUT_DOWN] >= 1){
p1.y = p1.y - 4;
if (key[KEY_INPUT_LSHIFT] >= 1){
p1.y = p1.y + 2;
}
if (p1.y < -190)p1.y = -190;
}
//左に行く処理
if (key[KEY_INPUT_LEFT] >= 1){
p1.x = p1.x - 4;
if (key[KEY_INPUT_LSHIFT] >= 1){
p1.x = p1.x + 2;
}
if (p1.x < -310)p1.x = -310;
}
//上に行く処理
if (key[KEY_INPUT_UP] >= 1){
p1.y = p1.y + 4;
if (key[KEY_INPUT_LSHIFT] >= 1){
p1.y = p1.y - 2;
}
if (p1.y > 225)p1.y = 225;
}
}
//自機の描画関数
void draw_player(){
if (CheckHitKey(KEY_INPUT_LEFT) == 0 && CheckHitKey(KEY_INPUT_RIGHT) == 0){
// 右と左が押されていない(通常グラ表示)//
DrawGraph(p1.draw_x, p1.draw_y, Handle1, TRUE);
}
if (CheckHitKey(KEY_INPUT_LEFT) == 1 && CheckHitKey(KEY_INPUT_RIGHT) == 1){
// 右と左が押されている(通常グラ表示)//
DrawGraph(p1.draw_x, p1.draw_y, Handle1, TRUE);
}
if (key[KEY_INPUT_RIGHT] >= 1 && key[KEY_INPUT_LEFT] == 0){
DrawGraph(p1.draw_x, p1.draw_y, Handle2, TRUE);
}//左靡きグラ表示//
if (key[KEY_INPUT_LEFT] >= 1 && key[KEY_INPUT_RIGHT] == 0){
DrawGraph(p1.draw_x, p1.draw_y, Handle3, TRUE);
}//右靡きグラ表示//
}