僕は現在VC++でタワーディフェンスと呼ばれるような防衛戦略ゲームの作成をしています。
具体的には自発的に攻撃する大砲をプレイヤーが設置し、迫ってくる敵を倒すというものです。
とりあえず大砲が敵を認知して攻撃する部分、敵が歩いてくる部分をそれぞれ作ったのですが
武器を2つ以上設置する(武器の関数を2回以上使う)と、弾が飛んでいる状態での全体の処理が遅くなってしまいます。
弾を飛ばすアルゴリズムは龍神録を参考にして作り、骨格も拝借しているので、そこまで重い処理ではないと思うのですが・・
ちなみにPCの性能も市販のゲームが十分動く程度なので問題はないと思います。
弾が飛んでいるときだけ重くなるので、弾を動かす所で無駄な処理をしているのかと考えたのですが、悪い箇所が分かりません。
是非アドバイスをお願いします。
以下汚いですが、弾を飛ばすアルゴリズムです
(chが大砲の、enが敵の構造体です。)
if(ch[j].tama.flag==0 && rate==0 && ch[j].range*ch[j].range > pow(en.X-ch[j].X,2)+pow(en.Y-ch[j].Y,2)){ //弾フラグ0,ディレイ後、敵が攻撃範囲内のとき ch[j].tama.flag = 1; ch[j].tama.x = ch[j].X; ch[j].tama.y = ch[j].Y; rate = ch[j].delay; //最低攻撃間隔 ch[j].delay(ms) break; } if(rate > 0 && ch[j].range * ch[j].range > pow(en.X - ch[j].X,2)+pow(en.Y - ch[j].Y,2)){//敵が範囲内のとき rate--; } if(ch[j].tama.flag==1) {//弾フラグが1のとき弾を移動させる ch[j].tama.spd = 10; DrawGraph((int)ch[j].tama.x-16,(int)ch[j].tama.y-16,img[1],TRUE); ch[j].tama.angle = atan2(en.Y-ch[j].tama.y,en.X-ch[j].tama.x); ch[j].tama.x += cos(ch[j].tama.angle) * ch[j].tama.spd; ch[j].tama.y += sin(ch[j].tama.angle) * ch[j].tama.spd; }