ダッシュのボタンを押さずにすれば基本的に大丈夫なんですが、ダッシュ時に上手く曲がりません・・・。
しかも、斜め方向にも進みません。どうすればいいでしょうか?
#include "DxLib.h"
#include "Keyboard.h"
#include "Player.h"
#include "Plusproglam.h"
#include <math.h>
#define FIELD_R_MAX 400
double pai = 3.14159265358979;
static int m_Image;
static int m_y;
// 初期化をする
void Player_Initialize(Player_t *Player){
m_Image = LoadGraph("画像/キャラクタ01.png");
m_y = 0;
Player->x = 320;
Player->y = 240;
Player->cnt = 0;
Player->sp = 3;
Player->Dflag = 0;
Player->img = m_Image;
Player->side = 0;
}
void Player_Calc(Player_t *Player,configpad_t configpad,pad_t pad){
Player->cnt++;
if(CheckStatePad(configpad.DA,pad)>0){
Player->Dflag = 1;
}
else
Player->Dflag = 0;
}
void Player_side(Player_t *Player1,Player_t *Player2){
if(Player1->x<Player2->x){
Player1->side = 0;
Player2->side = 1;
}
else{
Player1->side = 1;
Player2->side = 0;
}
}
// 動きを計算する
void Player_Move(Player_t *Player,pad_t pad,configpad_t configpad){
int Inputpad[5];
int i,sayu_flag=0,joge_flag=0;
double x,y,mx,my;
double ang,nang,dushper=1;
Inputpad[0]=CheckStatePad(configpad.right,pad);Inputpad[1]=CheckStatePad(configpad.up,pad);
Inputpad[2]=CheckStatePad(configpad.left,pad);Inputpad[3]=CheckStatePad(configpad.down,pad);
Inputpad[4]=CheckStatePad(configpad.right,pad);
//-----------------------------------------
for(i=0;i<4;i++){
if(Inputpad[i]>0&&Inputpad[i+1]==0)
ang=0.5*pai*(double)i;
if(Inputpad[i]>0&&Inputpad[i+1]>0)
ang=0.5*pai*((double)i+0.5);
}
//-----------------------------------------
if(Player->Dflag==1){
for(i=0;i<4;i++){
if(Inputpad[i]>0&&Inputpad[i+1]==0)
nang=0.5*pai*(double)i;
if(Inputpad[i]>0&&Inputpad[i+1]>0)
nang=0.5*pai*((double)i+0.5);
else
nang=ang;
}
if(nang>ang&&pai+ang>nang)
ang++;
if(nang>ang&&pai+ang<nang)
ang--;
if(nang<ang&&ang-pai<nang)
ang--;
if(nang<ang&&ang-pai<nang)
ang++;
if(ang>=pai*2)
ang=0.0;
if(ang<=0.0)
ang=pai*2-0.1;
if(ang==nang)
ang+=0.0;
if(nang==ang+pai*2){
if(Player->side==0)
ang--;
if(Player->side==1)
ang++;
}
dushper = 3;
}
//----------------------------------------------
for(i=0;i<4;i++){
if(Inputpad[i]>0){
x=Player->x,y=Player->y;
mx=Player->sp*dushper*cos(ang);
my=Player->sp*dushper*sin(ang);
x+=mx,y+=my;
Player->x=x,Player->y=y;
}
}
DrawFormatString(0,0,GetColor(255,255,255),"ang=%d",ang);
}
// 描画する
void Player_Graph(Player_t Player){
DrawRotaGraph3D2((float)Player.x,(float)Player.y,1.0f,0.0f,Player.img,TRUE);
}
// 終了処理をする
void Player_Finalize(){
DeleteGraph( m_Image );
}