龍神録のボスを残像させる方法

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

龍神録のボスを残像させる方法

#1

投稿記事 by kai » 16年前

サンプルデータを参考にして

//**************ここからサンプル**************
// 残像処理基本
#include "DxLib.h"

// 残像データの数
#define AFTIMAGENUM	65

int PlayerX[ AFTIMAGENUM ], PlayerY[ AFTIMAGENUM ] ;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
						 LPSTR lpCmdLine, int nCmdShow )
{
	int Key ;
	int i ;

	// 画面モードのセット
	SetGraphMode( 640 , 480 , 16 ) ;
	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;		// エラーが起きたら直ちに終了
	}

	// 描画先画面を裏画面にセット
	SetDrawScreen( DX_SCREEN_BACK ) ;

	// キャラクターの初期位置をセット
	for( i = 0 ; i < AFTIMAGENUM ; i ++ )
	{
		PlayerX[ i ] = 0 ;
		PlayerY[ i ] = 0 ;
	}

	// ループ
	while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
	{
		// キー入力取得
		Key = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;

		// 上を押していたら上に進む
		if( Key & PAD_INPUT_UP ) PlayerY[0] -= 3 ;

		// 下を押していたら下に進む
		if( Key & PAD_INPUT_DOWN ) PlayerY[0] += 3 ;

		// 右を押していたら右に進む
		if( Key & PAD_INPUT_RIGHT ) PlayerX[0] += 3 ;
		
		// 左を押していたら左に進む
		if( Key & PAD_INPUT_LEFT ) PlayerX[0] -= 3 ;

		// 画面を初期化する
		ClearDrawScreen() ;

		// プレイヤーを描画する
		for( i = AFTIMAGENUM - 1 ; i >= 0 ; i -= 8 )
			DrawBox( PlayerX , PlayerY , PlayerX + 32 , PlayerY + 32 ,
						GetColor( 0 , 255 - 255 * i / AFTIMAGENUM , 0 ) , TRUE ) ;

		// 裏画面の内容を表画面に反映させる
		ScreenFlip() ;

		// 残像データを一つづつずらす
		for( i = AFTIMAGENUM - 1 ; i > 0 ; i -- )
		{
			PlayerX[ i ] = PlayerX[ i - 1 ] ;
			PlayerY[ i ] = PlayerY[ i - 1 ] ;
		}
	}

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}
//**************ここまで**************

改造龍神録のボスを残像させてみたいと思い、
実装してみたのですが、うまくいきません><
どうしたらボスが残像するようになるでしょうか?


graph_boss()内

int i;
#define AFTIMAGENUM	65

for(i = AFTIMAGENUM - 1 ; i >= 0 ; i -= 8 ){
	SetDrawBlendMode( DX_BLENDMODE_ALPHA, 255 - 255 * i / AFTIMAGENUM) ;//αブレンドする
	DrawRotaGraphFdF(boss.dx,boss.dy,//ボスを描画
		1.0f,0.0f,img_dot_boss01[0],TRUE);
	SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0 );//ブレンドモードをリセットする。
}

// 残像データを一つづつずらす
for( i = AFTIMAGENUM - 1 ; i > 0 ; i -- ){
	boss.dx = boss.dx-i ;
	boss.dy = boss.dy-i ;
}

Justy

Re:龍神録のボスを残像させる方法

#2

投稿記事 by Justy » 16年前


>どうしたらボスが残像するようになるでしょうか?

 察するにサンプルプログラムの残像の原理を理解していないように思えます。
 
 kaiさんが書かれた graph_boss()内のコードは雰囲気にはコードは似通っていますが
何回も同じところにキャラを書いてみたり、同じ変数に対し何度も引き算を繰り返してみたりと
あまり意味のあるコードになっていないようです。

 まずは、サンプルプログラムがどうやって残像を実現しているか考え、理解に努めてみて下さい。


 ヒントとしては、残像の基本は何フレーム、或いは何十フレーム以上に渡る
キャラクターが移動した過去の座標を参照して、(時には補完しながら)表示を行うのが
基本となります。

 その為、サンプルにおける PlayerXや PlayerYは配列になっており、
現在の座標が配列の先頭に、1フレーム前の座標が配列の2番目に
入るようになっています。

 残念ながら、graph_boss()内の boss.dxは配列ではないので、過去の座標を記録することは
出来ません。

 まずこのあたりから直す必要があるでしょう。

閉鎖

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