プレイヤーの弾や敵の弾などをstd::listで管理しています。
そしてPlayerクラスとEnemyクラスを持つManagerクラスというものがあり、そこでプレイヤーと敵の双方のあたり判定をしています。
そこでManagerからPlayerクラスのリストを参照しようとしています。リストの型がもともとC++や標準ライブラリ等が持っている型であったり、
型がグローバルに宣言されていたなら問題ないのですが、リストの型がPlayerクラスが持っている構造体であった場合、
どのようにManagerクラスから参照すればよいのでしょうか。
つまりPlayerクラスからShot_tの型を返す(?)にはどうすれば良いのでしょうか
前回のトピックの質問があまりにも漠然としていたので、ある程度方針を固めて(ManagerからPlayerクラスの情報を参照する)みました。
C++ / DxLib 3.16b
VS Community 2015
Managerクラス あたり判定の関数とコンストラクタ
Manager::Manager()
{
g_cnt = 0;
m_player = new Player;
m_back = new Back;
//敵は面倒なので別関数で初期化
LoadEnemyData();
}
void Manager::CollisionAll()
{
//敵座標
float ex,ey;
//プレイヤーの弾の分ループ
//既存の型なら std::list<int> *tmp; などとしてポインタ変数を宣言、定義
//tmp = m_player->GetShotInfo();みたいにポインタを取得
//for(std::list<int>::iteretor blItr = *tmp.begin;blItr != *tmp.end();)でループさせて
//blItr->xとかで参照してあたり判定を行える...がリストの型(Shot_t)がPlayerしか持ってないのでリストを宣言できない
}
Player.h
#ifndef DEF_PLAYER_H
#define DEF_PLAYER_H
#include <list>
class Player
{
private:
・・略・・
//ショットのパラメータ
const float SHOT_SPEED = 4.0f; //ショット速度
const float SHOT_COLLISION = 16.0f; //ショットあたり判定半径
int img_shot; //画像ハンドル
typedef struct Shot_t
{
float x; //座標、x成分、y成分、角度、速度
float y;
float vx;
float vy;
float ang;
float speed;
int sizeX; //弾のサイズ、カウンタ
int sizeY;
int cnt;
int knd; //弾の種類
}Shot_t;
//リストで管理してみる
std::list<Shot_t> bullet;
private:
//更新
void Update();
void Move();
void Anim();
void Shot();
//描画
void Draw();
void Finalize();
public:
Player();
~Player();
//座標を返す
void GetPos(float *x, float *y);
//プレイヤーの弾の情報を返す
auto GetShotInfo();
//プレイヤーのあたり判定のサイズを返す
float GetSize(){return PLAYER_COLLISION;}
//プレイヤーの弾のあたり判定のサイズを返す
float GetShotSize(){return SHOT_COLLISION;}
//プレイヤーが持つ弾の数を返す
void All();
};
#endif