先日、慣性を付けようとしていた者です
Posted: 2010年9月16日(木) 23:36
どうも、ヤスです
別の部活の試合やらでごたごたしている内に
過去ログに入ってしまったので立て直しました
本題なのですが、いろいろやってみた結果
キー入力で移動量を変化させ、移動量によって
毎回キャラクターを移動させればいいのではないか、と思いつきまして
作ってみたのですが、うまくいきませんでした
おそらく、移動量(mx)が毎回0になっているんだと思うのですが
どこをいじればいいのかよくわかりませんでした
下にあるのが作ってみたソースです
いろいろ突っ込みどころがあると思うので
バシバシ突っ込んでください
#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,anglex=0,angley=0;
double x,y,mx=0,my=0,naname=1,mv=2;
//mx=移動量,my=移動量,mv=加速度
int inputpad[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;//画像を左向きに
else if(CheckStatePad(configpad.right)>0)//右キーが押されていたら
ch.img+=4*1;//画像を右向きに
for(i=0;i<2;i++)//左右分
if(inputpad>0)//左右どちらかの入力があれば
sayu_flag=1;//左右入力フラグを立てる
for(i=2;i<4;i++)//上下分
if(inputpad>0)//上下どちらかの入力があれば
joge_flag=1;//上下入力フラグを立てる
if(sayu_flag==1 && joge_flag==1)//左右、上下両方の入力があれば斜めだと言う事
naname=sqrt(2.0);//移動スピードを1/ルート2に
if(CheckStatePad(configpad.left)>0)//左キーが押されていたら
anglex=-1;//アングルを左向きに
else if(CheckStatePad(configpad.right)>0)//右キーが押されていたら
anglex=1;//アングルを右向きに
if(CheckStatePad(configpad.up)>0)//下キーが押されていたら
angley=-1;//アングルを下向きに
else if(CheckStatePad(configpad.down)>0)//上キーが押されていたら
angley=1;//アングルを上向きに
for(int i=0;i<4;i++){//4方向分ループ
if(inputpad>0){//i方向のキーボード、パッドどちらかの入力があれば
x=ch.x , y=ch.y;//今の座標をとりあえずx,yに格納
mx+=mv*anglex,my+=mv*angley;
}
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;//実際に移動させる
}
}
}
別の部活の試合やらでごたごたしている内に
過去ログに入ってしまったので立て直しました
本題なのですが、いろいろやってみた結果
キー入力で移動量を変化させ、移動量によって
毎回キャラクターを移動させればいいのではないか、と思いつきまして
作ってみたのですが、うまくいきませんでした
おそらく、移動量(mx)が毎回0になっているんだと思うのですが
どこをいじればいいのかよくわかりませんでした
下にあるのが作ってみたソースです
いろいろ突っ込みどころがあると思うので
バシバシ突っ込んでください
#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,anglex=0,angley=0;
double x,y,mx=0,my=0,naname=1,mv=2;
//mx=移動量,my=移動量,mv=加速度
int inputpad[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;//画像を左向きに
else if(CheckStatePad(configpad.right)>0)//右キーが押されていたら
ch.img+=4*1;//画像を右向きに
for(i=0;i<2;i++)//左右分
if(inputpad>0)//左右どちらかの入力があれば
sayu_flag=1;//左右入力フラグを立てる
for(i=2;i<4;i++)//上下分
if(inputpad>0)//上下どちらかの入力があれば
joge_flag=1;//上下入力フラグを立てる
if(sayu_flag==1 && joge_flag==1)//左右、上下両方の入力があれば斜めだと言う事
naname=sqrt(2.0);//移動スピードを1/ルート2に
if(CheckStatePad(configpad.left)>0)//左キーが押されていたら
anglex=-1;//アングルを左向きに
else if(CheckStatePad(configpad.right)>0)//右キーが押されていたら
anglex=1;//アングルを右向きに
if(CheckStatePad(configpad.up)>0)//下キーが押されていたら
angley=-1;//アングルを下向きに
else if(CheckStatePad(configpad.down)>0)//上キーが押されていたら
angley=1;//アングルを上向きに
for(int i=0;i<4;i++){//4方向分ループ
if(inputpad>0){//i方向のキーボード、パッドどちらかの入力があれば
x=ch.x , y=ch.y;//今の座標をとりあえずx,yに格納
mx+=mv*anglex,my+=mv*angley;
}
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;//実際に移動させる
}
}
}