ページ 11

追尾型オプションのアルゴリズム

Posted: 2009年10月03日(土) 22:34
by ちゃお
スーパーファミコンのグラディウス3の追尾型オプションで、キャラクターの動きをトレースして動くオプションのアルゴリズムが思いつきません。

自機のx座標、y座標を常にバッファに格納して、そのバッファをオプションが読み込んでいくのだろうと考えていますが、プログラムでは、どのタイミングで読み込んだりしたら、いいのかなど、なかなか思いつきません。

カウント変数を作って、自機が動いたときだけ、バッファに格納して、止まっているときはバッファに格納しないようにするようにカウントを工夫するなどが考えていますが・・・。

ご教授願います。

Re:追尾型オプションのアルゴリズム

Posted: 2009年10月03日(土) 23:10
by ねこ
double arrX[50];
double arrY[50];
というような過去座標を保持する変数を持たせておき
// 0.1ドット以上動いたら
if( fabs( player.x - arrX[0] ) > 0.1 || fabs( player.y - arrY[0] ) > 0.1 ) {
	for( int ii = 0; ii < 50; ii++ ){
		int idx = 50 - ii - 1;
		arrX[ idx ] = arrX[ idx - 1 ];
		arrY[ idx ] = arrY[ idx - 1 ];
	}
	arrX[ 0 ] = player.x;
	arrY[ 0 ] = player.y;
}
とりあえず50個分くらい保持しておいて
option1.x = arrX[ 10 ];
option1.y = arrY[ 10 ];
option2.x = arrX[ 20 ];
option2.y = arrY[ 20 ];
みたいな感じにしておくとプレイヤーが動くたびに座標が更新されるのでカウントとか気にしないで済みます。

初期化時は0~49にプレイヤー座標を詰めるのをお忘れなく。

Re:追尾型オプションのアルゴリズム

Posted: 2009年10月03日(土) 23:36
by ちゃお
ねこさんありがとうございます。

プログラム使わせていただきました。
思ったとおりの動きになりました。
すごいです。

最高です。

Re:追尾型オプションのアルゴリズム

Posted: 2009年10月03日(土) 23:37
by ちゃお
解決しました。