はじめまして。プログラミング初心者です。
初めて質問します。
龍神録9章の移動制御でわからないところがあるので教えてください。
char.cppで最後の
[coad]
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;//実際に移動させる
}
[/coad]
の部分でなぜ移動範囲を制限できるのかよくわかりません。
例えば、キャラクターが一番下にいる状態で右+下、もしくは左+下にキー入力します。
自分は、このとき、計算結果の座標が移動可能範囲外になるので、
ch.x=x , ch.y=y;
の部分は実行されず、キャラクターは動かないのでは?、と考えています。
しかし、実行結果ではこのとき、キャラクターのy座標は変わらず、x座標だけ動くことができます。
なぜこのように動けるのでしょうか?
わかりにくい質問文で申し訳ありません。
よろしくお願いします。
龍神録9章の移動制御について
Re: 龍神録9章の移動制御について
直前をよく見てください。
forは何のために使われていますか?
それを理解できれば何故移動できるかもわかるはずです。
forは何のために使われていますか?
それを理解できれば何故移動できるかもわかるはずです。
オフトピック
個人的にはあの移動方法は少々効率が悪いような気がしますのでご自身で少し改変なさったほうが良いかと思います。
Re: 龍神録9章の移動制御について
涼雅さん
すぐに返信して頂き、ありがとうございます。
直前のfor文
4方向についてそれぞれひとつずつ処理を行うため、
実行結果ではキャラクターのx座標を動かした後、y座標を動かす。
ということで合ってますか?
すぐに返信して頂き、ありがとうございます。
直前のfor文
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座標を動かした後、y座標を動かす。
ということで合ってますか?
- Dixq (管理人)
- 管理人
- 記事: 1661
- 登録日時: 13年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 龍神録9章の移動制御について
非常に分かりにくいコードですよね・・。
分かりやすさも含めるとこんな感じがいいのかなと思います。
※画像のセットは入っていません。
分かりやすさも含めるとこんな感じがいいのかなと思います。
void ch_move(){
int x=0, y=0;
if(CheckStatePad(configpad.left)>0){
x -= MOVE_SPEED;
}
if(CheckStatePad(configpad.right)>0){
x += MOVE_SPEED;
}
if(CheckStatePad(configpad.up)>0){
y -= MOVE_SPEED;
}
if(CheckStatePad(configpad.down)>0){
y += MOVE_SPEED;
}
if(x!=0&&y!=0){//斜めなら
x /= ROOT2;//ルート2で割る
y /= ROOT2;
}
if(CheckStatePad(configpad.slow)>0){//低速移動なら
x /= 3;//低速に
y /= 3;
}
ch.x += x;
ch.y += y;
if(ch.x<0){
ch.x=0;
}
if(ch.x>W){
ch.x=W;
}
if(ch.y<0){
ch.y=0;
}
if(ch.y>H){
ch.y=H;
}
}
Re: 龍神録9章の移動制御について
Dixqさん
コードありがとうございます。
if文が多くてわかりやすいです。
移動範囲の制限方法が理解できました。
皆さんありがとうございます。
コードありがとうございます。
if文が多くてわかりやすいです。
移動範囲の制限方法が理解できました。
皆さんありがとうございます。