前回では画像表示の件でお世話になりました。
画像も表示できたということもあり、なんとか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倍進むようにしたい)です。
ご教示のほど、よろしくおねがいします。
背景を描画するとキャラが重いです……orz
Re:背景を描画するとキャラが重いです……orz
LoadGraphScreenは描画するごとにメモリに展開しては捨てる関数です。
この関数はテスト用にしか使わない関数です。
LoadGraphでグラフィックハンドルを取得して、DrawGraphで描画しましょう。
詳しくはゲームプログラミングの館にて紹介しています。
本家リファレンスでこの関数を探して頂いてサンプルをご覧いただいても良いかと思います。
この関数はテスト用にしか使わない関数です。
LoadGraphでグラフィックハンドルを取得して、DrawGraphで描画しましょう。
詳しくはゲームプログラミングの館にて紹介しています。
本家リファレンスでこの関数を探して頂いてサンプルをご覧いただいても良いかと思います。
Re:背景を描画するとキャラが重いです……orz
管理人様!? 本当に勉強になるサイトを作ってくださりありがとうございます!(お礼をば
さて本題ですが……
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;
}
これであってますでしょうか……調べてやったのですがどうでしょう。
しかしそれでも重いのです。悲しいくらいに。
ぜひともご教示お願いします。
さて本題ですが……
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
>2倍進むようにしたい
if( Key[ KEY_INPUT_RIGHT ] == 1 ) //右ボタンが押されたら
ch.x++ ; //xの値を1増やす
の部分を、
if( Key[ KEY_INPUT_RIGHT ] == 1 ) //右ボタンが押されたら
ch.x += 2 ; //xの値を2増やす
に変えてください。シャア程ではありませんが、2倍にはなります。
ところで重いというのは何がどう重いのでしょうか?キーを押してからの反応ですか?それとも一歩一歩進む描画がですか?
if( Key[ KEY_INPUT_RIGHT ] == 1 ) //右ボタンが押されたら
ch.x++ ; //xの値を1増やす
の部分を、
if( Key[ KEY_INPUT_RIGHT ] == 1 ) //右ボタンが押されたら
ch.x += 2 ; //xの値を2増やす
に変えてください。シャア程ではありませんが、2倍にはなります。
ところで重いというのは何がどう重いのでしょうか?キーを押してからの反応ですか?それとも一歩一歩進む描画がですか?
Re:背景を描画するとキャラが重いです……orz
> GHandle = LoadGraph( "stage.png" ) ;//ハンドル所得
画像ファイルのロード処理が相変わらずメインループの中にあるので時間がかかります。
画像ファイルのロード処理が相変わらずメインループの中にあるので時間がかかります。
Re:背景を描画するとキャラが重いです……orz
GHandle = LoadGraph( "stage.png" ) ;//ハンドル所得
この一文をwhile文の外に出してみて下さい。
これではループの度にデータを読み込み直しているので、結局LoadGraphScreen()関数を使った時と同じ事になってしまいます。
この一文をwhile文の外に出してみて下さい。
これではループの度にデータを読み込み直しているので、結局LoadGraphScreen()関数を使った時と同じ事になってしまいます。
Re:背景を描画するとキャラが重いです……orz
>>ゆーずぃさん
一歩一歩進むキャラの描画が重かったんですが解決いたしました!
仰られたとおりに「ch.x += 2 ;」に書き換えるとシャアには及びませんが2倍早くなりました!
ありがとうございました!
>>ISleさん
>>迷彩吹雪さん
おっしゃられたとおりにメインループの中からはずしてやるとキャラの描画が軽快になりました!
ありがとうございました!
またお聞きする機会があるとは思いますが、そのときもよろしくお願いします!
一歩一歩進むキャラの描画が重かったんですが解決いたしました!
仰られたとおりに「ch.x += 2 ;」に書き換えるとシャアには及びませんが2倍早くなりました!
ありがとうございました!
>>ISleさん
>>迷彩吹雪さん
おっしゃられたとおりにメインループの中からはずしてやるとキャラの描画が軽快になりました!
ありがとうございました!
またお聞きする機会があるとは思いますが、そのときもよろしくお願いします!