ページ 11

画面外に出たらデータを消去する処理

Posted: 2013年7月24日(水) 10:17
by 666
こんにちは。DXライブラリで「敵が画面外に出たらデータを消す」処理(以下、Out)を書いたのですが、実行すると
敵が画面外に出た瞬間に、エラーで止まってしまいます。
調べてみると、どうやらOut処理時に敵のデータを消去した後 nullptrが入っていないみたいなのです。
Outの処理を飛ばすと正常に動作するのでおそらくここに原因があるとおもうのですが・・・。
どなたかアドバイスや対処法をご教授お願いします。

コード:

void Gamemanager::Cmove()
{ 
	Player *player = new Player();
	for(int i = 0; i < static_cast<int>(enemy.size()); ++i)
	{
		if(enemy[i] != nullptr)
		{
			enemy[i]->Cmove();	//敵を動かす
			if( HitEnemy(player,enemy[i]) == 1)				//敵を上から踏んだら
			{	delete enemy[i];	enemy[i] = nullptr;	}	//敵を消す
			Out(enemy[i]);		//画面外に出たら消す
		}
	}
	delete player;
}

void Gamemanager::Out(Enemy *enemy)		//画面外に出たらその敵を消す
{
	if(	( (enemy->getLeftX() > 800) && (enemy->getRightX() >800+Gsize) ) ||
		( (enemy->getRightX() < 0) && (enemy->getLeftX() < (0-Gsize) ) ) ||
		( (enemy->getLeftY() < (0 -Gsize)) && (enemy->getRightY() < 0)) ||
		( (enemy->getRightY() > 600+Gsize)  && (enemy->getLeftY() > 600) ) 
		)
		{	delete enemy;	enemy = nullptr;	}
}

void Gamemanager::Draw()
{
	for(int i = 0; i < static_cast<int>(enemy.size()); ++i)
	{
		if(enemy[i] != nullptr)
		{	enemy[i]->draw();	}
	}

Re: 画面外に出たらデータを消去する処理

Posted: 2013年7月24日(水) 10:56
by usao

コード:

void Gamemanager::Out(Enemy *enemy){ ... }
↓
void Gamemanager::Out(Enemy *&enemy){ ... }
でどうでしょうか.

Re: 画面外に出たらデータを消去する処理

Posted: 2013年7月24日(水) 13:00
by KORYUOH
nullptr消そうとしてたりしませんか?

呼び出し前の処理でdeleteされてる可能性があるのでOutの一番初めにnullptrだったら何もしないで抜ける処理を追加してはいかがでしょうか?

Re: 画面外に出たらデータを消去する処理

Posted: 2013年7月25日(木) 08:24
by 666
御二方の通り調べたり書き直したりしたら成功しました!
ありがとうございました。