館S.2章のサンプルの動作について(ベジェ曲線)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ヤット
記事: 2
登録日時: 14年前

館S.2章のサンプルの動作について(ベジェ曲線)

#1

投稿記事 by ヤット » 12年前

新ゲームプログラミングの館 「S.2 高次元方程式を用いたベジェ曲線」に記載されているサンプルプログラムの動作についてです。

CBezier::Get関数の戻り値が、途中で減って(のちにまた増加して1.0までいく)場合があります。
数字は例えですが、0.1 0.2 0.3 0.4 0.5 0.6 0.5 0.4 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0のような動きです。
特に終わりの動きを急にするパターン(eRapid_Lv3~5)でこの事象が発生します。
以下のソースはサンプルプログラムのうち、Get関数のパラメータだけ変えたものです。

コード:

#include "DxLib.h"
#include "Bezier.h"

#define X 20
#define W 500
#define T 150   //時間(フレーム数)

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );
        CBezier Bez;
        int t=0,Img = LoadGraph("画像/キャラクタ01.png");
        SetDrawMode( DX_DRAWMODE_BILINEAR );

        while( ScreenFlip()==0 && ProcessMessage()==0 ){
                DrawGraphF( X+Bez.Get( CBezier::eNoAccel,   CBezier::eNoAccel,   (float)t/T )*W,  50, Img, TRUE );//等速 問題なし
				DrawGraphF( X+Bez.Get( CBezier::eNoAccel,  CBezier::eRapid_Lv3,  (float)t/T )*W, 150, Img, TRUE );//
                DrawGraphF( X+Bez.Get( CBezier::eRapid_Lv1, CBezier::eRapid_Lv5, (float)t/T )*W, 250, Img, TRUE );//
				DrawGraphF( X+Bez.Get( CBezier::eRapid_Lv3, CBezier::eRapid_Lv4,  (float)t/T )*W, 350, Img, TRUE );//
                if(t<T){
                        t ++;
                } else {
                        continue;
                }
        }

        DxLib_End(); // DXライブラリ終了処理
        return 0;
}

上記ソースの実行結果ですが、画像(X座標)が最初は右に向かって進みますが、途中で左に向かって進み始め、しばらくするとまた右にという動きです。

もしこういうものならば仕方ないのですが…ちょっと意図した動きと違うのでできましたら一度確認して頂ければ助かります。

ベジェ曲線がまだよく理解できず、サンプルプログラムをそのまま使わせてもらっています。もし修正可能であればお願いします。
添付ファイル
名称未設定 2.png
手元の画像での結果です、赤い線の動きです
名称未設定 2.png (39.87 KiB) 閲覧数: 10075 回

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