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

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

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

#1

投稿記事 by カリンカ » 14年前

現在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;
	}


	

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#2

投稿記事 by softya(ソフト屋) » 14年前

画像が無いので、どう問題なのかが良く分かりません。
一応ちゃんと拡大はされています。

たとえば、
DrawExtendGraph(x1+40, y1, x2-40, y2, walker[0], TRUE);
とかにしてもガタガタして見えるのでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

カリンカ

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

#3

投稿記事 by カリンカ » 14年前

すみません、詳しく説明しますと

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

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#4

投稿記事 by softya(ソフト屋) » 14年前

それは絵の位置合わせの問題とか、秒間60コマ表示されるって事に起因しませんか?
コマ数が7コマですから60/7で一秒間に8.5回ループする事になると思います。

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

[補足]
DrawExtendGraph(x1+40, y1, x2-40, y2, walker[(i/10)%7], TRUE); //!?画像表示がガタガタする
としてもらうとスロー表示になるので原因を切り分けられるかと思います。1/10の10の部分を大きくすればよりスローになります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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