オブジェクトのremove時のバグ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
スライパ
記事: 9
登録日時: 8年前
住所: 北海道→東京

オブジェクトのremove時のバグ

#1

投稿記事 by スライパ » 5年前

このコードがメインのループ関数内にあります

コード:

           TamaTime();//新しい弾のオブジェクトの生成
			
			for(int i=0;i<object.size();i++){
				object.get(i).OMove();                      //各オブジェクトを移動させ画面に表示
				jikisokudo = object.get(i).OMove(jikisokudo);
				Zousyoku(i);                                     //敵機の新しいオブジェクトの追加
				ms.Atarihantei(object,i);                  //当たり判定の結果からオブジェクトの関数deadをtrueにする
				object.get(i).ODraw(canvas,mapx);
				
				if(i!=0 && object.get(i).Ogetdead()==true){
					object.remove(i);                      //オブジェクトの関数deadがtrueならば開放
				}
			}
 

一つのオブジェクトが開放されたとき残されたオブジェクトのうち一つが点滅もしくは消滅してしまいます。
おそらくobject.size()のあたりがfor関数内で変化するためだと思うのですが。
解決法を教えてください

アバター
夢幻ノ月夜
記事: 133
登録日時: 5年前
住所: Stens;Gate世界線

Re: オブジェクトのremove時のバグ

#2

投稿記事 by 夢幻ノ月夜 » 5年前

Forの前に何回ループしなきゃいけないのかを変数に入れといて
それを使ってループすればいける?
毎回ゲーム作ろうとするたびに壁にぶち当たる

アバター
みけCAT
記事: 6247
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: オブジェクトのremove時のバグ

#3

投稿記事 by みけCAT » 5年前

objectの実装がどうなっているかわからないと確定はできませんが、例えば後ろ(添字の大きい方)からループする、とかでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
へにっくす
記事: 628
登録日時: 7年前
住所: 東京都

Re: オブジェクトのremove時のバグ

#4

投稿記事 by へにっくす » 5年前

スライパ さんが書きました:おそらくobject.size()のあたりがfor関数内で変化するためだと思うのですが。
そこまでわかってるなら、removeしたあとi++しちゃうからまずいのはわかりますよね。
だからremoveしたらi--すりゃいいじゃん。

それか、みけCATさんの言うように、0からsize()-1でなくsize()-1から0へループするようにすればいい。
written by へにっくす

アバター
スライパ
記事: 9
登録日時: 8年前
住所: 北海道→東京

Re: オブジェクトのremove時のバグ

#5

投稿記事 by スライパ » 5年前

プログラム全体を見直さないといけないかとびくびくしてました。
皆さんありがとうございます

閉鎖

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