简短的解释。我正在写一个游戏引擎。我使用OpenGL进行渲染,使用Boost::Python编写脚本。现在一切都很好。我正在实现处理事件的侦听器类。例如,此类在呈现期间触发事件:
class FrameListener
{
public:
struct FrameEvent
{
double TimeSinceLastEvent;
double TimeSinceLastFrame;
};
virtual void FrameStart(FrameEvent& evt) = 0;
virtual void FrameEnd(FrameEvent& evt) = 0;
virtual void OnFrame(FrameEvent& evt) = 0;
};
这是一个基本FrameListener类,包含3个在不同呈现阶段触发的事件。下面是python的包装类:
^{pr2}$这个很好用。例如,我可以用python创建这个类,它将在10秒内关闭游戏:
class SimpleListener(FrameListener):
time = 0
def __init__(self):
super(self.__class__, self).__init__()
def OnFrame(self, evt):
self.time += evt.TimeSinceLastFrame
if self.time > 10:
CORE_ENGINE.Shutdown()
然后打电话给CORE_引擎.AddListener(SimpleListener())从python将侦听器添加到std::vector FrameListeners:
if (FrameListener* listen = boost::python::extract< FrameListener* >(listener))
{
FrameListeners.push_back(listen);
}
所有这一切都很顺利。但是我有一个函数RemoveAllListeners,它应该删除所有的侦听器。我试过这样的方法:
vector<FrameListener*>::iterator it;
for ( it = FrameListeners.begin(); it != FrameListeners.end(); ){
delete * it;
}
很明显会崩溃。我假设指向基本FrameListener的指针被销毁,但python SimpleListener对象仍然是悬挂指针?如何正确地从C++代码中销毁那些Python继承的框架文件?在
干杯,普索!在
目前没有回答
相关问题 更多 >
编程相关推荐