背景を描画するとキャラが重いです……orz

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

背景を描画するとキャラが重いです……orz

#1

投稿記事 by マグロ丼 » 14年前

前回では画像表示の件でお世話になりました。
画像も表示できたということもあり、なんとか21節まで進めました!
しかしそこで問題が。
23節に進む前に背景を表示しようと思い、3節で使った関数を使おうと思ったのですが……
void Main(){


int image[6];
char Key[256];
ch_t ch;
ch.x =0;
ch.y =240;

LoadDivGraph( "chara_shit2.png" , 6 , 3 , 2 , 250 , 250 , image );//画像を分割してimage配列に保存

while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了
LoadGraphScreen( 0 , 0 , "stage.png" , TRUE ) ; //背景の描画・・・orz
if( Key[ KEY_INPUT_RIGHT ] == 1 ) //右ボタンが押されたら
ch.x++ ; //xの値を1増やす

else if(ch.x%32!=0)
ch.x++;

ch.img=image[(ch.x%32)/6+0]; //現在のx座標にあった画像を指定

DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;//画像を描画

ScreenFlip();//裏画面を表画面に反映

}

if(KeyBuf[KEY_INPUT_X]==1)
function_status=2;
}//ここまで

LoadGraphScreen関数を使うと今まで普通に動いてたキャラがめちゃくちゃ重くなります。
あともう少しアニメを早く動かしたい(xの+方向にせめて2倍進むようにしたい)です。
ご教示のほど、よろしくおねがいします。

Dixq (管理人)

Re:背景を描画するとキャラが重いです……orz

#2

投稿記事 by Dixq (管理人) » 14年前

LoadGraphScreenは描画するごとにメモリに展開しては捨てる関数です。
この関数はテスト用にしか使わない関数です。

LoadGraphでグラフィックハンドルを取得して、DrawGraphで描画しましょう。
詳しくはゲームプログラミングの館にて紹介しています。

本家リファレンスでこの関数を探して頂いてサンプルをご覧いただいても良いかと思います。

マグロ丼

Re:背景を描画するとキャラが重いです……orz

#3

投稿記事 by マグロ丼 » 14年前

管理人様!? 本当に勉強になるサイトを作ってくださりありがとうございます!(お礼をば
さて本題ですが……

void Main(){

int image[6];
int GHandle ;
char Key[256];
ch_t ch;
ch.x =0;
ch.y =240;
SetDrawScreen( DX_SCREEN_BACK ) ;
LoadDivGraph( "chara_shit2.png" , 6 , 3 , 2 , 250 , 250 , image );//画像を分割してimage配列に保存

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

GHandle = LoadGraph( "stage.png" ) ;//ハンドル所得
DrawGraph( 0 , 0 , GHandle , FALSE ) ;//描画!


if( Key[ KEY_INPUT_RIGHT ] == 1 ) //右ボタンが押されたら
ch.x++ ; //xの値を1増やす

else if(ch.x%32!=0)
ch.x++;

ch.img=image[(ch.x%32)/6+0]; //現在のx座標にあった画像を指定

DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;//画像を描画

ScreenFlip();//裏画面を表画面に反映

}

if(KeyBuf[KEY_INPUT_X]==1)
function_status=2;
}

これであってますでしょうか……調べてやったのですがどうでしょう。
しかしそれでも重いのです。悲しいくらいに。
ぜひともご教示お願いします。

ゆーずぃ

Re:背景を描画するとキャラが重いです……orz

#4

投稿記事 by ゆーずぃ » 14年前

>2倍進むようにしたい


if( Key[ KEY_INPUT_RIGHT ] == 1 ) //右ボタンが押されたら
ch.x++ ; //xの値を1増やす
の部分を、


if( Key[ KEY_INPUT_RIGHT ] == 1 ) //右ボタンが押されたら
ch.x += 2 ; //xの値を2増やす


に変えてください。シャア程ではありませんが、2倍にはなります。


ところで重いというのは何がどう重いのでしょうか?キーを押してからの反応ですか?それとも一歩一歩進む描画がですか?

ISLe

Re:背景を描画するとキャラが重いです……orz

#5

投稿記事 by ISLe » 14年前

> GHandle = LoadGraph( "stage.png" ) ;//ハンドル所得
画像ファイルのロード処理が相変わらずメインループの中にあるので時間がかかります。

迷彩吹雪

Re:背景を描画するとキャラが重いです……orz

#6

投稿記事 by 迷彩吹雪 » 14年前

GHandle = LoadGraph( "stage.png" ) ;//ハンドル所得

この一文をwhile文の外に出してみて下さい。
これではループの度にデータを読み込み直しているので、結局LoadGraphScreen()関数を使った時と同じ事になってしまいます。

マグロ丼

Re:背景を描画するとキャラが重いです……orz

#7

投稿記事 by マグロ丼 » 14年前

>>ゆーずぃさん

一歩一歩進むキャラの描画が重かったんですが解決いたしました!
仰られたとおりに「ch.x += 2 ;」に書き換えるとシャアには及びませんが2倍早くなりました!
ありがとうございました!

>>ISleさん
>>迷彩吹雪さん

おっしゃられたとおりにメインループの中からはずしてやるとキャラの描画が軽快になりました!
ありがとうございました!
またお聞きする機会があるとは思いますが、そのときもよろしくお願いします!

閉鎖

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