慣性?のあるキーを離した後に滑る移動処理について
Posted: 2013年12月23日(月) 17:16
移動するキーを離した時、すぐに停止しないで滑るような処理を作りたいと思っています。
色々試してみたのですが、特に斜め移動の後に滑る場合の計算がどうしても思いつきませんでした。
以下が移動するときの処理です。
こうすればいい、こんな方法がある、など教えていただけないでしょうか。
色々試してみたのですが、特に斜め移動の後に滑る場合の計算がどうしても思いつきませんでした。
以下が移動するときの処理です。
struct XY{
float x;
float y;
};
//プレイヤーの座標
XY model = {320,240};
//正面の角度(実際に組み込む時はマウスの座標から角度を変更します)
float angle = PI;
/*メインループ*/
//移動量
XY move = {0};
//入力キー(右,上,左,下)
const int moveKey[4] = {D_DIK_D,D_DIK_W,D_DIK_A,D_DIK_S};
//移動したかどうか
bool moveFlag;
//キーが押されているか確認
for(int i = 0;i < 4;i ++){
//指定したキーが押されていたら0以上の値が戻ってくる
if(CheckKey(moveKey[i]) > 0){
moveFlag = true;
//角度を計算するため、とりあえず移動する
move.x += sin(-angle - PI / 2 + PI / 2 * i);
move.y += cos(-angle - PI / 2 + PI / 2 * i);
}
}
//移動していた場合は
if(moveFlag){
//移動した後の角度を調べる
float angle2 = atan2(move.x,move.y);
//10px移動する
move.x += sin(angle2) * 10;
move.y += cos(angle2) * 10;
}
//移動する
model.x += move.x;
model.y += move.y;
//画像を表示して確認
DrawRotaGraphF(model.x,model.y,1,0,img,true);