忍者ブログ
なんとなくだらだらと。方向性はまだ決まってない。 当方のプログラムでは、山田巧さん作成のDXライブラリを利用させていただいてます。 本サイト http://homepage2.nifty.com/natupaji/DxLib/index.html DX Library Copyright (C) 2001-2008 Takumi Yamada.
[6] [7] [8] [9] [10] [11] [12] [13] [14]
×

[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


忍者ブログ [PR]
カレンダー
11 2024/12 01
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
フリーエリア
バーコード
ブログ内検索
P R
アクセス解析
カウンター