自機の弾と敵との当たり判定処理
Posted: 2021年10月27日(水) 16:44
c/c++とDxライブラリで2次元シューティングゲームを作ろうとしているものです。投稿は今回で3回目となり、前回は「メニュー画面の実装について」というトピックで質問させていただきました。
今回はタイトルにもあるように、「自機ショットと敵との当たり判定処理」を行いたいと思い、インターネットなどを参考にしながらプログラムを書いていたのですが、その過程でわからないところがありましたので質問させていただきます。
ソースコードです。
とりあえず上のような感じで作成してみたのですが、void CheckHit::CollisionAll()関数にあるfor(auto enemy : _list)の部分でエラーがでてしまい、デバッグが出来ない状態です。
enemyは他クラスにてstd::listで管理しております。それをHitCheckクラスにfor文を使ってすべての要素にアクセスしたかったのですが、エラーが吐かれてしまいました。
構文上のミスではないと思うのですが、、他クラスのstd::listにアクセスする方法があるのでしたら教えていただきたいです。
今回はタイトルにもあるように、「自機ショットと敵との当たり判定処理」を行いたいと思い、インターネットなどを参考にしながらプログラムを書いていたのですが、その過程でわからないところがありましたので質問させていただきます。
ソースコードです。
isHitCheck.h
#pragma once
#include "PlayerBullet01.h"
#include "PlayerBullet02.h"
#include "EnemyManager.h"
class HitCheck
{
public:
HitCheck();
PlayerBulletCollection01* playerbullet01;
PlayerBulletCollection02* playerbullet02;
EnemyManager* enemy;
bool CircleCollision(double pc, double ec, double cx1, double cx2, double cy1, double cy2);
void CollisionAll();
};
isHitCheck.cpp
#include "isHitCheck.h"
#include "Define.h"
HitCheck::HitCheck()
{
}
bool HitCheck::CircleCollision(double pc, double ec, double cx1, double cx2, double cy1, double cy2)
{
//仮引数は左から弾の半径、敵の半径、弾のx座標、敵のx座標、弾のy座標、敵のy座標
double hlength = pc + ec;
double xlength = cx1 - cx2;
double ylength = cy1 - cy2;
if(hlength * hlength >= xlength * xlength + ylength * ylength) {
return true;
}
else {
return false;
}
}
void HitCheck::CollisionAll()
{
float px, py, ex, ey; //判定処理をしたい弾と敵の座標
//操作キャラの弾と敵との当たり判定
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < Define::PBULLET_NUM / 4; ++j) {
if (playerbullet01->GetShotPosition(i, j, &px, &py)) {
for (auto enemy : _list) {
if (!enemy->GetdeadFlag()) {
enemy->GetPosition(&ex, &ey);
//当たり判定
if (CircleCollision(Define::PSHOT_COLLISION, Define::ENEMY_COLLISION, px, ex, py, ey)) {
//当たっていれば、deadflagを立てる
enemy->SetDeadFlag();
//当たった弾のフラグを戻す
playerbullet01->SetShotFlag(i, j, false);
}
}
}
}
}
}
}
enemyは他クラスにてstd::listで管理しております。それをHitCheckクラスにfor文を使ってすべての要素にアクセスしたかったのですが、エラーが吐かれてしまいました。
構文上のミスではないと思うのですが、、他クラスのstd::listにアクセスする方法があるのでしたら教えていただきたいです。