なるべく自分で解決しようとしているのですが・・・
ちょっと言葉で説明しにくいのです。
同じ画像を弾の座標に合わせて何回も描画して段々小さくしていくようにして
弾の軌道を描こうと思ったのですが、
少しおかしなことになりました。
画像を何度も描画しているとたまに小さくなっていくのがわかるときがあります。
・・・すみません分かりにくくて;
小さくなっていく時の画像を添付しました
動画のほうが分かりやすかったかな・・・
以下、関係がありそうなところのソースです(管理者様の龍神録をベースに作成してあります。)
#define SHOT_START 500 //弾発射時描画用構造体 typedef struct{ //フラグ、種類、カウンタ、色、消す時間 int flag,knd,cnt,col,delcnt; //座標、消す速さ、大きさ double x,y,delspd,r; }shot_start_t; int sertch_shot_start(){//空き番号を返す for(int i=0;i<SHOT_START;i++){ if(shot_start.flag==0) return i; } return -1; } //弾発射時のエフェクト登録 //x,x座標、カウント、描く頻度(例:3なら3回に一回かく)、小さくなるスピード、大きさ、種類、色 void shot_graph(double x, double y,int kaisu, double delspd,double r, int knd, int col){ int k; static int cnt; if((k=sertch_shot_start())!=-1){ shot_start[k].flag = 1; shot_start[k].cnt = 0; shot_start[k].delcnt=kaisu;//書く頻度 shot_start[k].delspd=delspd;//小さくなるスピード shot_start[k].x = x;//表示するx座標 shot_start[k].y = y;//表示するy座標 shot_start[k].r = r;//最初の大きさ shot_start[k].knd = knd;//種類 shot_start[k].col = col;//色 数はkndできまる if(cnt%kaisu!=0)//1ならすべて描画 shot_start[k].flag=0; } cnt++; } //登録例です void boss_shot_bulletH000(){ #define TM000 200 int i,t=boss_shot.cnt%TM008; if(t%100==0){ bullet_way(boss.x,boss.y,1,bossatan2(),0, 2,8,1,0,0); } for(i=0;i<BOSS_BULLET_MAX;i++){ if(boss_shot.bullet.flag>0){ shot_graph(boss_shot.bullet.x,boss_shot.bullet.y,1,3,1,0,4); } } } //計算 for(int j=0;j<SHOT_START;j++){ if(shot_start[j].flag>0){ shot_start[j].cnt++; if(shot_start[j].cnt<3) shot_start[j].r+=0.13; if(shot_start[j].cnt>4) shot_start[j].r-=0.01*shot_start[j].delspd; if(shot_start[j].r<0) shot_start[j].flag=0; } } //描画処理(graph_bullet()内にあります) if(boss_shot.flag>0){//弾幕データがオンなら for(j=0;j<SHOT_START;j++){//弾発射時描画 if(shot_start[j].flag>0){ DrawRotaGraphFdF(shot_start[j].x, shot_start[j].y, shot_start[j].r*2, 0, img_shot_start[shot_start[j].knd][shot_start[j].co[/url],TRUE); } } }
描く頻度があやしいと思って数値を変えてみたのですが同じでした。
または、SHOT_STARTの数が足りてないのかなと思って2000とかにしても同じでした。
変数内を確認しても数は足りていました。
エラーばかりだしてるバカなので簡単な間違いをしていそうで怖いです。
ソースも・・・分かりにくいですね・・・(というか汚い;
すみません;