このプログラムにおいて、現在 上下左右のキー入力に対応した座標の変換ができるようになっています。
(上キーを入力すると、y座標が1増えるなど。)
今回このプログラムで、上キーを入力した時に、「ジャンプ」のように
一度変化した座標の値を、もとの値まで徐々に戻すようなプログラムを作成したいと思っています。
一度、フラグをつかったものも作ってみましたが、うまく動作しませんでした。
以下のどの部分に、「ジャンプ」を描画するための 座標計算を入力すれば良いでしょうか。
また、どのような式を作成すればいいでしょうか。やはり、物理の公式などが有効ですか。
長くなりましたが、よろしければ どなたかお願いします。
#include "../include/GV.h"
void calc_ch()
{
ch.cnt++;
ch.img=(ch.cnt%24)/6;
}
void ch_move()
{
int i,sayu_flag=0,joge_flag=0;
double x,y,mx,my,naname=1;
double move_x[4]={-4.0,4.0,0,0},move_y[4]={0,0,4.0,-4.0};//{左,右,下,上}のスピード
int inputpad[4]; //4つのキーパッドを配列に格納
inputpad[0]=CheckStatePad(configpad.left); inputpad[1]=CheckStatePad(configpad.right);
inputpad[2]=CheckStatePad(configpad.down); inputpad[3]=CheckStatePad(configpad.up);
if(CheckStatePad(configpad.left)>0)//左キーが押されていたら
{
ch.img+=4*2;//画像を左向きに
if(CheckStatePad(configpad.up)>0)//上キー左キーが押されていたら
ch.img+=4*2;//画像を左上向きに//左向き時に値が既に足されていることに注意
if(CheckStatePad(configpad.down)>0)//下キー左キーが押されていたら
ch.img+=4*4;//画像を左下向きに
}
else if(CheckStatePad(configpad.right)>0)//右キーが押されていたら
{
ch.img+=4*1;//画像を右向きに
if(CheckStatePad(configpad.up)>0)//上キー右キーが押されていたら
ch.img+=4*2;//画像を右上向きに//右向き時に値が既に足されていることに注意
if(CheckStatePad(configpad.down)>0)//下キー右キーが押されていたら
ch.img+=4*4;//画像を右下向きに
}
else if(CheckStatePad(configpad.up)>0)//上キーが押されていたら
ch.img+=4*3;
for(i=0;i<2;i++)//左右分
if(inputpad[i]>0)//左右どちらかの入力があれば
sayu_flag=1;//左右入力フラグを立てる
for(i=2;i<4;i++)//上下分
if(inputpad[i]>0)//上下どちらかの入力があれば
joge_flag=1;//上下入力フラグを立てる
if(sayu_flag==1 && joge_flag==1)//左右、上下両方の入力があれば斜めだと言う事
naname=sqrt(2.0);//移動スピードを1/ルート2に
for(int i=0;i<4;i++)
{ //4方向分ループ
if(inputpad[i]>0)
{ //i方向のキーボード、パッドどちらかの入力があれば
x=ch.x , y=ch.y;//今の座標をとりあえずx,yに格納
mx=move_x[i]; my=move_y[i];//移動分をmx,myに代入
if(CheckStatePad(configpad.slow)>0)
{//低速移動なら
mx=move_x[i]/3; my=move_y[i]/3;//移動スピードを1/3に
}
x+=mx/naname , y+=my/naname;//今の座標と移動分を足す
if(!(x<10 || x>FIELD_MAX_X-10 || y<5 || y>FIELD_MAX_Y-5)){//計算結果移動可能範囲内なら
ch.x=x , ch.y=y;//実際に移動させる
}
}
}
}