- 【初心者】スレを立てる前にココで質問を【Part22】
861 :名前は開発中のものです。[sage]:2011/06/21(火) 13:47:02.74 ID:3pc3Ry/R - 度々すみません
CとDXライブラリで現在2Dアクションを作っていて、 右向きの移動の場合 加速時の速さを定数"0,25"、時間を 変数"t"にします。そして速さと時間をかけて得られる距離を"k"とします それをキャラクタ( 今回は文字定数"■"を移動させます )が居るx座標に足して移動を表現しています k = 0.25*t //速さと時間を掛けて出た距離 x+=k //距離をキャラの座標に足す この考えで、キー入力がない場合緩やかな減速 右キープラスBボタンが押されれば更に加速 という処理を実装させたいのですがうまく行きません メインループの中に以下の処理を入れたら、うまく行きます if(CheckHitKey( KEY_INPUT_RIGHT) == 1 ) { t++; k=0.25*t; if(k>=8)k=8; //移動の限界値を設定 x+=k; } if(CheckHitKey( KEY_INPUT_RIGHT) == 0 && k>0 ) { t=0; t++; k=-0.5*t +k; x+=k; } DrawString ( x, 400, "■", GetColor( 255 , 255 , 255 ));
|
- 【初心者】スレを立てる前にココで質問を【Part22】
862 :名前は開発中のものです。[]:2011/06/21(火) 13:58:41.47 ID:3pc3Ry/R - つづき
右方向だけの移動なら上の処理で問題ないのですが、 右と左の処理を分けるためにwhile文を使ってみたのですがうまくいきません どなたかアドバイスお願いします if(CheckHitKey( KEY_INPUT_RIGHT) == 1 ) //右キー入力があれば while(1){ //ループに入る if(CheckHitKey( KEY_INPUT_RIGHT) == 1 ) //右キー入力があれば移動する処理 { t++; k=0.25*t; if(k>=8)k=8; x+=k; } if(CheckHitKey( KEY_INPUT_RIGHT) == 0 && k>0 ) //キー入力なしで減速する処理 { t=0; t++; k=-0.5*t +k; x+=k; } DrawString ( x, 400, "■", GetColor( 255 , 255 , 255 )); if( k<0 ) break; //移動が0でループを抜ける } }
|
- 【初心者】スレを立てる前にココで質問を【Part22】
863 :名前は開発中のものです。[sage]:2011/06/21(火) 14:00:42.66 ID:3pc3Ry/R - すみません最初のifの中括弧の始まりを忘れました
実際はあってもうまくいきません
|
- 【初心者】スレを立てる前にココで質問を【Part22】
866 :名前は開発中のものです。[sage]:2011/06/21(火) 17:17:31.44 ID:3pc3Ry/R - >>865
減速時のことでしょうか? 私も最初はおかしいかなと思ったんですが、その処理をするごとにkの値は減っていくので毎回t=0からでも問題ないです if(CheckHitKey( KEY_INPUT_RIGHT) == 0 && k>0 ) //キー入力なしで減速する処理 { t=0; t++; k=-0.5*t +k; x+=k; } もし一回の処理で移動する距離( k )が最大の8の場合 一回目 k=-0.5*1 +8 k=7.5 二回目 k=-0.5*1 +6.5 k=6 という感じにうまく減速してくれます 加速時に0.25ずつ進む距離が増えるのに対して、減速時は0.5ずつ減るようにしたのですが
|
- 【初心者】スレを立てる前にココで質問を【Part22】
867 :名前は開発中のものです。[sage]:2011/06/21(火) 17:30:56.28 ID:3pc3Ry/R - 本当に何度も申し訳ないですが、自己解決というか妥協解決しました
右向きの処理と左向きの処理をループで括って分けたかったのですが、それがうまく行かなかったので 全ての処理を独立させることにしました 何回も長文を書いてスレを汚してしまって申し訳ないです
|
- 【初心者】スレを立てる前にココで質問を【Part22】
869 :名前は開発中のものです。[sage]:2011/06/21(火) 18:32:58.12 ID:3pc3Ry/R - >>868
移動距離"k"を正の値のままにしておきたかったからです しかし正の値のままだと何もボタンを押していない時の条件が被ります if(CheckHitKey( KEY_INPUT_RIGHT) == 0 && k>0 ) if(CheckHitKey( KEY_INPUT_LEFT ) == 0 && k>0 ) ですので、whileでなくとも何か違う関数の中にいれて条件が被らないようにしたかったのです 別にkの値を負にすればいいじゃないか。というかそれが正しいと言われると思いますが、 別の関数に分けるという考え方は大体合ってると思うので、それが出来ないとまた同じようなアルゴリズムを組む時苦労すると思ったので こっちのやり方も出来るようになっておきたかったんですよ
|