指定フレームで目標地点に向かうプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
お茶

指定フレームで目標地点に向かうプログラム

#1

投稿記事 by お茶 » 10年前

プログラムを独学で勉強しており、シューティングゲームを作り、
なんとなくゲームでのcos、sinの使い方が
わかってきたのであるサンプルプログラムを作っております。
開発環境はC++、DXLibになります。

2点間の角度を求め、指定されてポイントに特定のフレーム数で移動するといった少しややこしい形を目指しております。

Object.Px、Py・・・現在のポジション
Sx、Sy・・・スタート地点の座標
Tx、Ty・・・目標地点の座標

なんとなく近い所までいっていると思うのですが、
Tx、Tyの座標によってはそれぞれ定義されたフレーム数で移動してくれません。。。

新参者で恐縮ですが、どなたかアドバイスを頂けないでしょうか。

コード:


#define CHARACTER_ANIME_FRAME 30

        float angle = atan2((float)(this->Ty-this->Sy),(float)(this->Tx-this->Sx));
        
        float diffX = this->Tx - this->Sx;
        float diffY = this->Ty - this->Sy;
        
        float Mx = cos(angle) * float( diffX / CHARACTER_ANIME_FRAME ) * 1.0f;//CHARACTER_MOVE_SPEED;
        float My = sin(angle) * float( diffY / CHARACTER_ANIME_FRAME ) * 1.0f;//CHARACTER_MOVE_SPEED;
        
		// Xの移動
        if( this->Tx > this->Sx ){
            this->Object.Px += Mx;
            if( this->Object.Px >= this->Tx ) this->Object.Px = this->Tx;
        }

        /*
        if( this->Tx < this->Sx ){
            this->Object.Px -= Mx;
            if( this->Object.Px <= this->Tx ) this->Object.Px = this->Tx;
        }*/
        
		
		// Yの移動(TxはSxより必ず下にあるものとする)
        if( this->Object.Py < this->Ty ){
            this->Object.Py += My;
        }else{
            this->Object.Py = this->Ty;
        }

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: 指定フレームで目標地点に向かうプログラム

#2

投稿記事 by h2so5 » 10年前

9, 10行目は正しくはこうじゃないでしょうか。

コード:

        float Mx = diffX / CHARACTER_ANIME_FRAME;
        float My = diffY / CHARACTER_ANIME_FRAME;

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: 指定フレームで目標地点に向かうプログラム

#3

投稿記事 by ISLe » 10年前

常に残りの距離を30フレームかけて移動するというふうに見えるのですが。
それだと理論的には永久に到達しないということなのでは。

「指定されたポイントに特定のフレーム数で移動する」のに三角関数は必要ないので、題材として不適切なのではないかと。

お茶

Re: 指定フレームで目標地点に向かうプログラム

#4

投稿記事 by お茶 » 10年前

皆様ご回答ありがとうございます。
なるほど・・・確かに今回の場合、角度必要ないですよね・・・。

cos、sinを使ってもう少し理解出来るようになりたいと、
サンプル作ってたのですが問題が悪かったです。。。

どうやってもスパイラルから抜けれなかったので助かりました。
ありがとうございます!

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: 指定フレームで目標地点に向かうプログラム

#5

投稿記事 by ISLe » 10年前

三角関数を使う題材としては…
線を使って描いた戦車を、左右のキーで回転、上下のキーで前進後退、で動くものが良いと思います。
キャラクターは画像を回転させたものでもかまいません。
重要なのは回転とともに進行方向が変化するという点です。

おおむかしにアステロイドというシューティングゲームがありましたが、あれを真似て作ってみるというのも良いかもしれません。

閉鎖

“C言語何でも質問掲示板” へ戻る