ヒントをいただけるとありがたいです

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

ヒントをいただけるとありがたいです

#1

投稿記事 by ぽぽぽ » 14年前

はじめまして
現在ゲームをDXライブラリで作りたく勉強中です。

ゲームプログラミングの館で画像を分割して読み込んでkey入力で画像が切り替わるプログラムありますよね?
あれを今key入力しないで画像自体の座標も変えないで画像を切り替えたいのですが・・・なかなかうまくいきません
画像で言うところの「.GIF」みたいな物を作りたいです。

ひとまず自分で考えた結果は

コード:

#include "DxLib.h"
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
    int image[2];
    char Key[256];
    int i,j;
 
    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
 
    SetDrawScreen( DX_SCREEN_BACK ) ;                         //描画先を裏画面に設定
    LoadDivGraph( "char.png" , 2 , 2 , 1 , 80, 90 , image );
 
    while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
            //↑メッセージ処理        ↑画面をクリア         ↑キーボード入力状態取得       ↑ESCが押されると終了
               
              for(i = 0; i < 100; i++){
		for(j = 0; j < 2; j++){
			DrawGraph( 150, 100, image[j], TRUE);//画像の描画
			Sleep(100);
			ScreenFlip();//裏画面を表画面に反映
			}
		}
    }
 
    DxLib_End();
    return 0;
}
↑一応コンパイルは正常に通るのですが何か画面がちらちらするだけで[.GIF]みたいにならないんですよね・・・
何かヒントをくれるとありがたいです

OS はwindows7
環境はVisual C++ 2008です

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: ヒントをいただけるとありがたいです

#2

投稿記事 by h2so5 » 14年前

とりあえず、Sleep(100);
を使用するのは止めたほうが良いです。

ゲームプログラミングで一定時間ごとに処理を行うには、フレーム数をカウントするのが普通です。

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

Re: ヒントをいただけるとありがたいです

#3

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

Windows系としてはやっては行けない動作をしていたので、変更させてもらいました。
ProcessMessage()→ScreenFlip()の流れだけは変えてはいけません。
Sleep(100);もあまり良くないので、Sleep(30);程度になるように押さえてください。これも余りおすすめできないんですけどね。
「s5. 処理速度を一定にする。」
http://dixq.net/g/51.html
これでもチラつく場合は、元のchar.pngのグラフィックとしての縦横サイズを教えてくださいね。

コード:

#include "DxLib.h"

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

	int image[2];
	char Key[256];
	int i,j;

	if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理

	SetDrawScreen( DX_SCREEN_BACK ) ;                         //描画先を裏画面に設定
	LoadDivGraph( "char.png" , 2 , 2 , 1 , 80, 90 , image );

	j = 0;
	i = 0;
	while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
		//↑メッセージ処理        ↑画面をクリア         ↑キーボード入力状態取得       ↑ESCが押されると終了

		DrawGraph( 150, 100, image[j], TRUE);//画像の描画
		j++;
		if( j>=2 ) j=0; 
		Sleep(30);
		ScreenFlip();//裏画面を表画面に反映
		i++;
		if( i>=100) {
			break:
		}
	}

	DxLib_End();
	return 0;
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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