ページ 11

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

Posted: 2015年3月03日(火) 19:19
by スライパ
このコードがメインのループ関数内にあります

コード:

           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関数内で変化するためだと思うのですが。
解決法を教えてください

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

Posted: 2015年3月03日(火) 19:22
by 夢幻ノ月夜
Forの前に何回ループしなきゃいけないのかを変数に入れといて
それを使ってループすればいける?

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

Posted: 2015年3月03日(火) 19:25
by みけCAT
objectの実装がどうなっているかわからないと確定はできませんが、例えば後ろ(添字の大きい方)からループする、とかでしょうか?

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

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

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

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

Posted: 2015年3月04日(水) 07:32
by スライパ
プログラム全体を見直さないといけないかとびくびくしてました。
皆さんありがとうございます