なんとなくだらだらと。方向性はまだ決まってない。
当方のプログラムでは、山田巧さん作成のDXライブラリを利用させていただいてます。
本サイト http://homepage2.nifty.com/natupaji/DxLib/index.html
DX Library Copyright (C) 2001-2008 Takumi Yamada.
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
スローインとか作る気最初っからまったく無かった。
壁に当たったら跳ね返るように。密室空間デスマッチ会場。 とりあえず、ゴールの処理まで入れたら大掛かりになるんで、まずは壁反射だけ。 変更はボール移動のところだけでいいと思う。 ボールの移動管理を角度と速さ(ベクトルの長さ)で管理してたんだけど、これを使って 簡単に反射させる方法がよくわからんかった。 ネットの文献ちょっと漁っても、XYに成分分解して使ってるのがほとんど。 図に描いたらけっこう簡単なんだけどなあ。見てるといろいろと不審な行動を取る。 壁にほぼ水平に蹴ったら、90度反射してピッチの内側に向かって転がるとか。 結局は、角度速度で管理するのをやめて、サインコサインでXY成分として持つようにした。 いつもどおりの、旅慣れた方法。 ball.h // Ball.h #pragma once class Ball { double Bx,By; // ボール現在位置 // double Yaw; // ボール進行方向 double Spd; // ボールの速度 double Vx,Vy; // ボールの移動速度(X、Y成分) int HomeX,HomeY; // ホームポジション(試合開始時、ピッチ中央) public: void Init(int HomeX, int HomeY); int getBx(){return static_cast<int>(Bx);} int getBy(){return static_cast<int>(By);} double getSpd(){return Spd;} void Kick(int LocX, int LocY, double Spd); void Move(); }; void Ball::Init(int hx, int hy){ Bx = HomeX = hx; By = HomeY = hy; Spd = 0.0; } // ボールを蹴る(目標地点に向かう蹴り出し方向を決める) void Ball::Kick(int LocX, int LocY, double Spd) { double Yaw = atan2(LocY - By, LocX - Bx); this->Spd = Spd; Vx = cos(Yaw); Vy = sin(Yaw); } void Ball::Move() { Bx += Vx*Spd; By += Vy*Spd; Spd *= 0.98; // 地面との摩擦により、転がるスピードが落ちる if(Spd < 0.001) Spd = 0.0; // 壁の反射とゴール判定 // Yaw(移動方向)に180度足せば、壁に当たって跳ね返るかな? // if((By<0)||(By>300))Yaw+=Pi; // if((Bx<0)||(Bx>600))Yaw+=Pi; if(By<0.0){Vy=-Vy;By=0.0;} if(Bx<0.0){Vx=-Vx;Bx=0.0;} if(By>300.0){Vy=-Vy;By=300.0;} if(Bx>600.0){Vx=-Vx;Bx=600.0;} } 今回の修正は、最後のif文の羅列のためだけ。 いろいろとまとめてたけど、勢い余ってピッチからはみ出たとき、ボールが自力で 帰ってこられなくなることがあるので、範囲外になった瞬間に、壁の位置へ無理やり戻す。 厳密に考えたら話が違うんだけど、今のこのやり方でバグが出る気がしない。 この「上手に焼けました」感は、経験値稼がないと出てこないのかな。 イマイチ理解しきれててない、初めて使う借り物ソースのやり方でも、不安のなくなる瞬間が いきなり来る。 ダウンロード SC04.zip (2009.08.14) ソースのみ。 PR |
カレンダー
カテゴリー
フリーエリア
最新記事
(01/29)
(01/28)
(01/26)
(12/28)
(12/27)
(12/25)
(12/20)
(09/09)
(09/09)
(09/09)
(09/08)
(09/08)
(09/08)
(09/06)
(09/05)
(08/27)
(08/27)
(08/27)
(08/25)
(08/23)
ブログ内検索
P R
アクセス解析
カウンター
|