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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
666

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

#1

投稿記事 by 666 » 6年前

こんにちは。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();	}
	}

アバター
usao
記事: 1565
登録日時: 6年前

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

#2

投稿記事 by usao » 6年前

コード:

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

KORYUOH
記事: 44
登録日時: 7年前

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

#3

投稿記事 by KORYUOH » 6年前

nullptr消そうとしてたりしませんか?

呼び出し前の処理でdeleteされてる可能性があるのでOutの一番初めにnullptrだったら何もしないで抜ける処理を追加してはいかがでしょうか?
C言語を使うと自分の足を誤って撃ち抜いてしまうことがある。 C++を使えばそのような間違いを犯しにくくなる。しかし、やってしまったときには足全体が無くなる。

666
記事: 1
登録日時: 6年前

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

#4

投稿記事 by 666 » 6年前

御二方の通り調べたり書き直したりしたら成功しました!
ありがとうございました。

閉鎖

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