Re: プログラムの動きが遅くなる ( No.1 ) |
- 名前:通 日時:2008/01/15 17:28
提示されたコード以外にもっと処理に時間の掛かる
ネックな部分を探して改善するのが先決です。
アルゴリズムを全般見直すか、処理に時間の
掛かりそうな所を探してください。
兎に角無駄をなくすしか無いでしょう。
SetDrawScreen( DX_SCREEN_BACK );//プログラムの起動時に一回やればよい。
void explosion( int explosion_x , int explosion_y )
{
int i;
for( i=0 ; i<15 ; i++ ){
DrawGraph( explosion_x , explosion_y , Explosion_Image[i] , TRUE );
ScreenFlip();
}
PlaySoundMem( Explosion_BGM , DX_PLAYTYPE_NORMAL );
}
|
Re: プログラムの動きが遅くなる ( No.2 ) |
- 名前:クラウン 日時:2008/01/15 19:25
ありがとうございます。
|
Re: プログラムの動きが遅くなる ( No.3 ) |
- 名前:浮浪者 日時:2008/01/15 19:59
横から失礼します。
処理に時間がかかるとかいう以前に
爆発の画像表示の処理をループ内でやっていますよね?
つまり、ループが回っている間(画像が変わっている間)には、他の処理はしてないのではないですか?
それから、ScreenFlip(); は呼び出すたびに画面が更新されてしまうので、
1フレームにつき一回しか呼び出さないようにした方が良いと思います。
(基本的にはメインループ内の最後ですかね)
|
Re: プログラムの動きが遅くなる ( No.4 ) |
- 名前:クラウン 日時:2008/01/16 11:42
浮浪者様、アドバイスありがとうございます。
ループが回っている間、確かにほかの処理はされませんね。
解決方法などはありますか?ほかの、爆発アニメーションの作成方法など・・・。
|
Re: プログラムの動きが遅くなる ( No.5 ) |
- 名前:SweetBlack 日時:2008/01/16 12:55
他の敵が動くのと同じように
爆発も動かして(アニメーション)させてやればいいだけですよ。
早い話、爆発も「キャラのひとつ」にしてしまうんです。
|
Re: プログラムの動きが遅くなる ( No.6 ) |
- 名前:クラウン 日時:2008/01/16 17:32
SweetBlack様ありがとうございます!
参考にこのように作ってみたんですが、これだと最後の画像が一瞬表示されるだけできえてしまいます。なにか、いい方法はありますか?
<プログラム>
void explosion( int explosion_x , int explosion_y , int i )
{
DrawGraph( explosion_x , explosion_y , Explosion_Image[i] , TRUE );
if(i<15)
explosion( explosion_x+1 , explosion_y , i+1 );
else
PlaySoundMem( Explosion_BGM , DX_PLAYTYPE_NORMAL );
}
|
Re: プログラムの動きが遅くなる ( No.7 ) |
- 名前:通 日時:2008/01/16 18:12
うーん、惜しいような、惜しくないような。
再起呼び出ししている間はループと同じように
他の処理を行えません。
#include "DxLib.h"
int animation( void );
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( TRUE );
if( DxLib_Init() == -1 ){ // DXライブラリ初期化処理
return -1; // エラーが起きたら直ちに終了
}
SetDrawScreen( DX_SCREEN_BACK );
while( !ProcessMessage() && !CheckHitKey( KEY_INPUT_ESCAPE ) ){
ClearDrawScreen();
animation();
ScreenFlip();
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
int animation( void )
{
static int frame;
char* anime[] = {
"1枚目", "2枚目", "3枚目", "4枚目", "5枚目",
"6枚目", "7枚目", "8枚目", "9枚目", "10枚目",
"11枚目", "12枚目", "13枚目", "14枚目", "15枚目"
};
if ( frame >= 15 ){ frame = 0; }
DrawString( 0, 16, anime[frame++], GetColor( 255 , 255 , 255 ));
return 0;
}
適当ですが、参考に。
|
Re: プログラムの動きが遅くなる ( No.8 ) |
- 名前:かたぱると 日時:2008/01/16 18:19
※通様とほぼ同時刻の返信になってしまっていたので修正しました。
No.6のようなプログラムですと
explosionの中でexplosionを呼び出す手法なので
「再帰」という状態になってしまっています。
この状態ですと1フレームに15枚全て重ねて描いてしまっているので
最後の1枚しか見えていないように感じられるのではないでしょうか。
15枚のアニメーションを1フレームずつ表示したいのであれば、
○1フレームで1枚描く。カウンタを1進める。カウンタが15なら爆発終了。計15フレームかかる
×1フレームでカウンタを1進めつつ15枚全部描く。一気に全部やってしまっているので計1フレーム(←上記No.6のプログラムですとこの状態)
となるのがよろしいかと。
爆発アニメーション用のカウンターは1フレームで1だけ進める訳です。
|
Re: プログラムの動きが遅くなる ( No.9 ) |
- 名前:ZAP 日時:2008/01/16 22:24
ところで、爆発音を鳴らすときのパラメータ指定が
DX_PLAYTYPE_NORMAL になっているので、
鳴り終わるまで処理がここで止まっていると思うのですが、
これはこれでいいのでしょうか?
|
Re: プログラムの動きが遅くなる ( No.10 ) |
- 名前:通 日時:2008/01/17 05:24
鳴らすサウンドの長さにもよりますが、
確かに「DX_PLAYTYPE_BACK」を指定したほうが
良いですね。
効果音でも2・3秒はブロックされることになりそうです。。。
|
Re: プログラムの動きが遅くなる ( No.11 ) |
- 名前:クラウン 日時:2008/01/21 10:28
皆さんありがとうございます!
DX_PLAYTYPE_BACKに変更したら大分マシになりました。あと、当たり判定もすこし、まずかったので変更したら大分マシになりました。
皆さん、本当にありがとうございました。
|