現在、龍神録プログラミングの館のコードを可能な限りグローバル変数を使わずに、ポインタを使って自分なりに書いております
さて、キャラクターの移動に関する部分を自分なりに書いてみましたが、低速移動時に、キャラクターが右上に動いてくれません
以下、関係ありそうな部分です
//main.cpp
#include "DxLib.h"
#include "struct.h"
#include "graph.h"
#include "player.h"
#include "define.h"
int key_update(int*);
int every_process();
int check_shift(int,int);
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
ChangeWindowMode(TRUE),DxLib_Init(),SetDrawScreen(DX_SCREEN_BACK);
int key[256],board;
board = LoadGraph("画像/board.png");
ch_t player;
player.x = 160,0;
player.y = 300.0;
player.img = LoadGraph("画像/キャラクタ01.png");
while(every_process()==0)
{
graph_board(&board);
graph_ch(&player);
key_update(key);
if(key[KEY_INPUT_RSHIFT] > 0||key[KEY_INPUT_LSHIFT] > 0)
slow_move(&player,key);
else
quick_move(&player,key);
}
DxLib_End();
return 0;
}
int every_process()
{
ScreenFlip();
ProcessMessage();
ClearDrawScreen();
return 0;
}
int key_update(int key[])
{
char all_key[256];
GetHitKeyStateAll(all_key);
int i;
for(i=0;i<256;i++)
{
if(all_key[i] != 0)
key[i]++;
else
key[i] = 0;
}
return 0;
}
//ここからplayer.cpp
#include "DxLib.h"
#include "player.h"
#include "struct.h"
#include <math.h>
int slow_move(ch_t *player,int *key)
{
if(key[KEY_INPUT_UP]>0 && key[KEY_INPUT_RIGHT]>0)
{
player->y = player->y-sqrt(2.0);
player->x = player->x+sqrt(2.0);
}
else if(key[KEY_INPUT_UP]>0 && key[KEY_INPUT_LEFT]>0)
{
player->y = player->y-sqrt(2.0);
player->x = player->x-sqrt(2.0);
}
else if(key[KEY_INPUT_DOWN]>0 && key[KEY_INPUT_RIGHT]>0)
{
player->y = player->y+sqrt(2.0);
player->x = player->x+sqrt(2.0);
}
else if(key[KEY_INPUT_DOWN]>0 && key[KEY_INPUT_LEFT]>0)
{
player->y = player->y+sqrt(2.0);
player->x = player->x-sqrt(2.0);
}
else if(key[KEY_INPUT_UP]>0)
player->y = player->y-1;
else if (key[KEY_INPUT_DOWN]>0)
player->y = player->y+1;
else if(key[KEY_INPUT_RIGHT]>0)
player->x = player->x+1;
else if(key[KEY_INPUT_LEFT]>0)
player->x = player->x-1;
return 0;
}
int quick_move(ch_t *player,int *key)
{
if(key[KEY_INPUT_UP]>0 && key[KEY_INPUT_RIGHT]>0)
{
player->y = player->y-3 * sqrt(2.0);
player->x = player->x+3 * sqrt(2.0);
}
else if(key[KEY_INPUT_UP]>0 && key[KEY_INPUT_LEFT]>0)
{
player->y = player->y-3 * sqrt(2.0);
player->x = player->x-3 * sqrt(2.0);
}
else if(key[KEY_INPUT_DOWN]>0 && key[KEY_INPUT_RIGHT]>0)
{
player->y = player->y+3 * sqrt(2.0);
player->x = player->x+3 * sqrt(2.0);
}
else if(key[KEY_INPUT_DOWN]>0 && key[KEY_INPUT_LEFT]>0)
{
player->y = player->y+3 * sqrt(2.0);
player->x = player->x-3 * sqrt(2.0);
}
else if(key[KEY_INPUT_UP]>0)
player->y = player->y-3;
else if (key[KEY_INPUT_DOWN]>0)
player->y = player->y+3;
else if(key[KEY_INPUT_RIGHT]>0)
player->x = player->x+3;
else if(key[KEY_INPUT_LEFT]>0)
player->x = player->x-3;
return 0;
}
また、main.cppの低速、高速の分岐を消し、低速移動のみにしてみると右上への入力も入りました
原因を教えていただけるとうれしいです。