ページ 11

アニメーションの表示について

Posted: 2011年10月10日(月) 07:11
by カリンカ
現在DXライブラリを使用しゲーム製作を行っています。

walker[0]~[6]に入れた絵を順番に表示することで歩くアニメーションを作り、それをDrawExtendGraph関数を利用しだんだん拡大することで、画面奥から手前に歩いてくるように画面に表示しようとしています。
しかし狙ったとおりに画面に表示はされるのですが、画像の切り替えがうまくいかないようでガタガタして見苦しいです。

改善するにはどうすればよいでしょうか?よろしくお願いします

コード:

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
			 LPSTR lpCmdLine, int nCmdShow ){
	//画面設定とか
		ChangeWindowMode(TRUE);
		if( DxLib_Init() == -1 ) return -1;
		SetDrawScreen(DX_SCREEN_BACK);
		SetDrawMode(DX_DRAWMODE_BILINEAR);

	int x1 = 30, y1 = 280, x2 = 130, y2 = 380, count = 0, i = 0;

	//画像読み込み
		int walker[7];
		walker[0] = LoadGraph("image/walker0.png");
		walker[1] = LoadGraph("image/walker1.png");
		walker[2] = LoadGraph("image/walker2.png");
		walker[3] = LoadGraph("image/walker3.png");
		walker[4] = LoadGraph("image/walker4.png");
		walker[5] = LoadGraph("image/walker5.png");
		walker[6] = LoadGraph("image/walker6.png");

	//ループ
		while(1){
			ClearDrawScreen();
		
			//画面を白に
				DrawBox(0, 0, 640, 480, GetColor(255, 255, 255), TRUE);
			
			//画像の上辺が画面上端に来たら終了
				if(y1 > 0){
					DrawExtendGraph(x1+40, y1, x2-40, y2, walker[i%7], TRUE);  //!?画像表示がガタガタする
					
					y1 -= 1;
					y2 += 1;
					count++;
					i++;

					if(count == 5){  //サイズ調整
						x1 -= 1;
						x2 += 1;
						count = 0;
					}
				
				}else{
					break;
				}

			ScreenFlip();

			//終了処理
				if(ProcessMessage() == -1) break;
				if(CheckHitKey(KEY_INPUT_ESCAPE) == 1) break;

		}

		DxLib_End();
		return 0;
	}


	

Re: アニメーションの表示について

Posted: 2011年10月10日(月) 10:25
by softya(ソフト屋)
画像が無いので、どう問題なのかが良く分かりません。
一応ちゃんと拡大はされています。

たとえば、
DrawExtendGraph(x1+40, y1, x2-40, y2, walker[0], TRUE);
とかにしてもガタガタして見えるのでしょうか?

Re: アニメーションの表示について

Posted: 2011年10月10日(月) 15:04
by カリンカ
すみません、詳しく説明しますと

walker[0]のように一枚の画像だとスムーズに動くのですが、
上記のように画像を切り替える方法でやると、切り替えがうまくいかないようでチカチカしてしまいます。

CreaDrawScreenなどの画面表示に関する関数の位置が悪いのかと思い色々試してみたのですが、改善することはできませんでした。

Re: アニメーションの表示について

Posted: 2011年10月10日(月) 15:08
by softya(ソフト屋)
それは絵の位置合わせの問題とか、秒間60コマ表示されるって事に起因しませんか?
コマ数が7コマですから60/7で一秒間に8.5回ループする事になると思います。

絵を見せてもらうか、動画をyoutube等にアップしてもらうか実際に動いているところを見ないと診断は難しいですね。

[補足]
DrawExtendGraph(x1+40, y1, x2-40, y2, walker[(i/10)%7], TRUE); //!?画像表示がガタガタする
としてもらうとスロー表示になるので原因を切り分けられるかと思います。1/10の10の部分を大きくすればよりスローになります。