【发布时间】:2012-12-09 11:58:14
【问题描述】:
我想将数据发送回创建此对象的类。
这和游戏有关。 敌方物体具有线程功能,并在场景中自行移动。
如果您将创建对象的类中的头文件包含到对象本身中...以传递指针,则会产生很多错误。
敌人等级:
Class Enemy
{
private:
void (*iChange)(DWORD &);
}:
Enemy::Enemy(void (*iChangeHandler)(DWORD &) ) : iChange(0)
{
this->iChange = iChangeHandler;
}
void Enemy::Draw(D3DGraphics& gfx)
{
this->iChange(this->dwThreadID); // send a message back to the class that created me
gfx.PutPixel(this->my_position_x + 0,this->my_position_y,this->red,this->blue,this->green);
this->grafix->DrawCircle(this->my_position_x + 0,this->my_position_y, this->radius, this->red,this->blue,this->green);
(sprintf)( this->enemy_buffer, "X: %d, Y: %d", this->my_position_x , this->my_position_y);
this->grafix->DrawString( this->enemy_buffer, this->my_position_x , this->my_position_y, &fixedSys, D3DCOLOR_XRGB(255, 0, 0) );
}
游戏类:
struct enemies_array_ARRAY {
std::string name;
DWORD ID;
Enemy* enemy;
} enemies_array[25];
void Game::EnemyEvent(DWORD &thread_id)
{
enemies_array[0]...... // i want to acces this struct array
}
Game::Game(HWND hWnd)
{
enemies_array[0].name = "john Doe";
enemies_array[0].ID = NULL;
enemies_array[0].enemy = new Enemy(&Game::EnemyEvent);
// error: C2664:
// another attemp
enemies_array[0].name = "john Doe";
enemies_array[0].ID = NULL;
enemies_array[0].enemy = new Enemy(Game::EnemyEvent);
// error C3867:
}
【问题讨论】:
-
一个类只是一个类型。你不能向一个类型发送任何东西。您可以向 int 发送消息吗?
-
我正在努力实现你可以用 c# 做的事情......回调我已经阅读了很多关于它的内容......但我没有真正将其解释为与 c# 类似
-
如果
EnemyEvent(DWORD &thread_id)是静态的......代码可以工作,但我无法访问游戏类中/从游戏类中的变量
标签: c++ winapi events event-handling callback