2dアクションゲームの攻撃エフェクトの表示について

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

2dアクションゲームの攻撃エフェクトの表示について

#1

投稿記事 by foo » 7年前

2dアクションゲームで攻撃のエフェクトを出す際のやり方についてお聞きしたいです

http://piposozai.wiki.fc2.com/wiki/%E3% ... %94%A83%29

こちらのサイトのgifを一枚の画像に加工して、LoadDivGraphで読み込んだあとfor文で出力しているのですが

描画する速度が速くて一瞬で終わってしまうのですが、↑のサイトと同じくらいの速度で描画するにはどうすればいいでしょうか

というより描画の速度を遅くするにはどういった手法があるのでしょうか?

アバター
amehirune
記事: 181
登録日時: 10年前
住所: どっか
連絡を取る:

Re: 2dアクションゲームの攻撃エフェクトの表示について

#2

投稿記事 by amehirune » 7年前

開発環境やライブラリの記載がないので断定はできませんが、
LoadDivGraph関数を使って、という発言からDxLibを用いていることと仮定します。
言語は不明なので、とりあえずCで話を進めます。

えっと…まず、for文を使って出力させているのですか?
もしよろしければソースコードの方を拝見させていただいてもよろしいでしょうか?

同フレーム内に、

コード:

for(int i=0;i<EFF_MAX;i++)  DrawGraph( x, y,img_eff[i], TRUE );
などと記載してしまっていれば、恐らくそれは間違いでしょう。
1フレームで全てのアニメーション画像を表示してしまっていることになります。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

foo

Re: 2dアクションゲームの攻撃エフェクトの表示について

#3

投稿記事 by foo » 7年前

すみません。書き忘れていましたがDXlibをつかってC言語で開発しています

コード:

for (int i = 0; i < ah_1_size; i++) {
	frame = i % 6;
	DrawGraph(*view_charx + CHAR_SIZE_X *0.5F, *PlY - CHAR_SIZE_Y *0.5F, ah_1[frame], true);
}
amehirune さんが書いたコードとほぼ変わりませんがコードはこんな感じです

配列ah_1には6つに分割した画像が入っています

そもそもforでふつうは出力しないのだろうと思ってはいますが他にやり方が思いつきませんでした。

foo

Re: 2dアクションゲームの攻撃エフェクトの表示について

#4

投稿記事 by foo » 7年前

もう少し詳しく書くと

コード:

int PlayerAttack( float *view_charx, float *PlY, int *xcount, const int ah_1_size, const int ah_2_size )
{

	if ( *xcount > 0 && GetInputChar(TRUE) == 'v')
	{
		for (int i = 0; i < ah_1_size; i++) {
			frame = i % 6;
			DrawGraph( R_AtXDraw, AtYDraw, ah_1[frame], true);
		}
	}

	if (*xcount <= 0 && GetInputChar(TRUE) == 'v')
	{
		for (int i = 0; i < ah_2_size; i++) {
			frame = i % 6;
			DrawGraph( L_AtXDraw, AtYDraw, ah_2[frame], true);
		}
	}
	return 0;
}
こんなかんじですね

アバター
amehirune
記事: 181
登録日時: 10年前
住所: どっか
連絡を取る:

Re: 2dアクションゲームの攻撃エフェクトの表示について

#5

投稿記事 by amehirune » 7年前

foo さんが書きました:すみません。書き忘れていましたがDXlibをつかってC言語で開発しています

コード:

for (int i = 0; i < ah_1_size; i++) {
	frame = i % 6;
	DrawGraph(*view_charx + CHAR_SIZE_X *0.5F, *PlY - CHAR_SIZE_Y *0.5F, ah_1[frame], true);
}
amehirune さんが書いたコードとほぼ変わりませんがコードはこんな感じです
これはいけませんね…!!
先ほども申しましたが、for文で表示させようとしても1フレーム、恐らく1/60秒ほどしか表示されません…

と、いうわけで。すっごーく雑なサンプルプログラムですが、こちらをご参照ください。

コード:

struct{
  bool flag;
  int eff_no;
  int flame;
  int x,y;
}eff;

void action{
  /* なんやかんやあって */
  eff.flag = true;
  eff.eff_no = 0;
  flame = 0;
}

void eff_main(){
  if(eff.flag){
    switch(eff.eff_no){
      case 0:
        DrawGraph( eff.x, eff.y, img_eff[eff.flame%EFF_FLAME], TRUE);
        break;
      default:
        printfDx("Error.");
        break;
    }
    eff.flame++;
  }
}

int main(){
  action();
  eff_main();
}
とか…
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

foo

Re: 2dアクションゲームの攻撃エフェクトの表示について

#6

投稿記事 by foo » 7年前

返信ありがとうございます。

お聞きしたいのですが、

マクロ関数?のEFF_FLAMEは私の場合は画像を6つに分割しているので6が入るということでよろしいのでしょうか?

foo

Re: 2dアクションゲームの攻撃エフェクトの表示について

#7

投稿記事 by foo » 7年前

サンプルプログラムを参考にやってみたところうまくいきました

サンプルプログラムにキー入力のチェックの処理とフラグをfalseにする処理を加えました

amehirune さん

ありがとうございました

閉鎖

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