敵弾をアニメーションさせたい

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

敵弾をアニメーションさせたい

#1

投稿記事 by OZ » 5年前

こんばんは
前回ボスのアニメーションについて質問した者です
今回は敵弾をアニメーションさせようと思ったのですがつまづいてしまいました

イメージとしては東方紅魔郷のパチュリー・ノーレッジが撃ってくる炎弾のような感じです
↓参考動画3:27くらいから
[youtube][/youtube]
うーん…動画サイトの動画だと画質がよくないのでちょっと分かりにくいですね;

そしてコレを再現すべくプログラムを書いてみたのですが上手くいきませんでした
graph.cpp

コード:

//弾丸の描画
void graph_bullet(){
	int i,j,eff;
	double disp_angle;
	SetDrawMode( DX_DRAWMODE_BILINEAR ) ;//線形補完描画
	for(i=0;i<SHOT_MAX;i++){//敵の弾幕数分ループ
		if(shot[i].flag>0){//弾幕データがオンなら
			for(j=0;j<SHOT_BULLET_MAX;j++){//その弾幕が持つ弾の最大数分ループ
				if(shot[i].bullet[j].flag!=0){//弾データがオンなら
					if(shot[i].bullet[j].eff==1){
						SetDrawBlendMode( DX_BLENDMODE_ADD, 255) ;
					}

					if(bullet_info[shot[i].bullet[j].knd].kaiten==1){
						disp_angle=PI2*(shot[i].bullet[j].cnt%120)/120;
					}else{
						disp_angle=shot[i].bullet[j].angle+PI/2;
					}

					if(shot[i].bullet[j].effanime==1){
						if(tamaanicount%8==0){
							shot[i].bullet[j].col++;
						}
						DrawRotaGraphFdF(
						shot[i].bullet[j].x, shot[i].bullet[j].y,
						1.0, disp_angle,
						img_bullet[shot[i].bullet[j].knd][shot[i].bullet[j].col%4],TRUE);
					}else{
						DrawRotaGraphFdF(
						shot[i].bullet[j].x, shot[i].bullet[j].y,
						1.0, disp_angle,
						img_bullet[shot[i].bullet[j].knd][shot[i].bullet[j].col],TRUE);
					}

					if(shot[i].bullet[j].eff==1){
						SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
					}
					tamaanicount++;
				}
			}
		}
	}
//以下略
「effanimeが1だったら8カウントに1回colを+1し、col÷4のあまりの数字の画像を描画する」
というイメージで書いたのですがいざ実行してみるとアニメーションされず
分割ロードしたときの1枚目の画像のまま飛んでいきます

ボスや敵のアニメーションと同じようにやれば上手くいくと思ったのですが…

アバター
SAI
記事: 115
登録日時: 8年前
住所: はひほーひ

Re: 敵弾をアニメーションさせたい

#2

投稿記事 by SAI » 5年前

tamaanicountというのは弾が持ってるメンバ変数ではなく、グローバルな変数のようですが、これでは弾が1つ描画される度にtamaanicountがインクリメントされていて、8フレームごとに画像が変わるという処理にならないのではないでしょうか?
うまくいかないのはこれが原因かはわかりませんが、対処するならtamaanicountをループの外に出して1フレームに一度しかインクリメントを実行しないようにするか、tamaanicountをbulletのメンバにしてしまうのがよいと思われます。
Alea jacta est !

閉鎖

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