忍者ブログ
なんとなくだらだらと。方向性はまだ決まってない。 当方のプログラムでは、山田巧さん作成のDXライブラリを利用させていただいてます。 本サイト http://homepage2.nifty.com/natupaji/DxLib/index.html DX Library Copyright (C) 2001-2008 Takumi Yamada.
[28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

とりあえず、後先なにも考えずにプレイヤーデータをベタ置きしてみる。

今日のダウンロード
http://hiyayakko.sarashi.com/SimpleSoccer/SimpleSoccer.html


必要なものは必要になってから組み込めばいいやの精神なんだけど、やっぱり
先回りしてしまう悪い癖が。

プログラム解説するほどのところ無いなあ。
行き当たりばったりで汚いクソースだからな。


Player.h


class Player
{
    TeamColor Team;             // どちらのチームに所属しているか
    double Px,Py;               // プレイヤー座標
//    double Yaw;                 // プレイヤーの向き
    PlayerStatus Status;        // プレイヤーの状態
    int HomeX,HomeY;             // 守備位置(戻るべき座標)
    int SetX, SetY;              // 目標地点
public:
    void Init(TeamColor Team,double Px,double Py, int HomeX, int HomeY);
    int getPx(){return static_cast<int>(Px);}
    int getPy(){return static_cast<int>(Py);}
    PlayerStatus getStatus(){return Status;}
    TeamColor getTeam(){return Team;}
    void GoLocate(PlayerStatus st, int LocX, int LocY);
    void GoHomePos();
    void Move();
};

void Player::Init(TeamColor Team,double Px, double Py, int HomeX, int HomeY)
{
    this->Team = Team;
    this->Px = Px;
    this->Py = Py;
    this->HomeX = HomeX;
    this->HomeY = HomeY;
    GoLocate( GO_HOME,HomeX,HomeY);
}

void Player::GoLocate(PlayerStatus st, int LocX, int LocY)
{
    Status = st;
    SetX = LocX;
    SetY = LocY;
}

void Player::GoHomePos()
{
    Status = GO_HOME;
    SetX   = HomeX;
    SetY   = HomeY;
}

void Player::Move()
{
    double rad = atan2(SetY - Py, SetX - Px);
    double c = cos(rad);
    double s = sin(rad);

    Px += c;
    Py += s;

    if((getPx()==HomeX)&&(getPy()==HomeY))Status = WAIT;

}


Player::GoLocate() で次に移動する位置とステータス(状況)を決める。
Player::GoHomePos() は、ホームポジションに戻ることに特化したもの。

プレイヤーの行先を決めたら、Player::Move() で毎フレーム少しづつ移動。
アークタンジェントのところは、説明するつもりなら図に描かないとわかりにくい。
図を描くほど気力ないんでパス。シューティングゲームの自機狙い弾あたりの文献見てね。
自分の向かう方向(角度)決めたら、X、Y成分に分解。cos、sinだから最大1まで。
これにスピードの係数を掛ける。今回は何もしてない。

で、X座標Y座標ともに目標地点に来たら、ステータスをWait に変更。
このへんは今このプログラムを動かすためだけに特化してる感じ。
ぷるぷるしてるのは、ぴしゃりこの座標に収まらないんでしょう。

すぐにでも目標地点までの距離を測る関数が必要なので、出来次第それを使って
一定距離以下ならごまかす処理を追加しないとな。
全員Wait状態になるまで試合が始まらないぜ。

PR


忍者ブログ [PR]
カレンダー
12 2025/01 02
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
アクセス解析
カウンター