敵が出現するごとにEnemyクラスをnewするのは遅くなると聞きました。
なので初めにすべてnewしておいてパラメタで処理を分岐させる設計にしたいのです。
そこでEnemy::draw()とEnemy::upData()は関数ポインタという形で持っておき、create()するときに適切な描画関数と更新関数に結び付けよう、思いました。
しかし、結び付けるために代入しようとするとC2440コンパイルエラーになってしまいます。
なぜエラーになるのか、どのように解決すればよいか、お教えくださるとありがたいです。
コードは以下です。
ZACは敵キャラの名前です。
敵クラス
class Enemy{
friend class EnemyCompany;
public:
Enemy() :
m_x(0.f), m_y(0.f), m_r(0.f),
m_hp(0.f),
m_isLive(false),
m_counter(0),
draw( 0 ), upData( 0 )
{};
static void setImage(int img){ m_image = img; };
bool getIsLive(){ return m_isLive; }
bool getIsHit(float x, float y, float r){
return ((m_x - x)*(m_x - x) + (m_y - y)*(m_y - y) < (m_r + r)*(m_r + r));
}
void (*upData)(BulletCompany* bullet);
void (*draw)();
void create(float x, float y,EnemyType type);
private:
static int m_image;
float m_x, m_y, m_r, m_hp;
bool m_isLive;
int m_counter;
Enemy* Next;
Enemy* Prev;
//type別のdrawとupData
void drawZAC();
void upDataZAC(BulletCompany* bullet);
};