在我正在开发的游戏中,我有两个C++类(ICollidable和Sprite),它们的属性Position和Size都实际上继承了另一个名为Object的C++类。我有这三个类暴露在python与boost python。在蟒蛇Player类的构造函数看起来像这样的例子:虚拟继承C++和boost python
class Player(Game.ICollidable, Game.Sprite, Game.IKeyboardListener, Game.IEntity):
def __init__(self):
Game.IKeyboardListener.__init__(self)
Game.IEntity.__init__(self)
Game.ICollidable.__init__(self)
Game.Sprite.__init__(self)
的问题是,当雪碧初始化到来之前ICollidable的初始化雪碧位置不正常,我不能重新定位精灵屏幕上。我认为最近发生的事情是,有些独立的Sprite和ICollidable位置实例,这是我在创建ICollidable类之前会发生的事情。
我尝试了各种各样的事情来尝试解决这个问题,并搜索互联网寻找解决方案,像这样的问题,但我已经空手而来了。任何意见,解决方案或提示将不胜感激。
编辑:
这些都是python绑定到我的C++类:
class_<Object>("GameObject")
.def_readwrite("Pos", &Object::pos)
.def_readwrite("Size",&Object::size)
;
class_<Sprite, bases<Object>>("Sprite", init<>())
// Sprite(TexID, Pos)
.def(init<GLuint, glm::vec2>())
// ----------------------------
.def_readwrite("TexId", &Sprite::texid)
;
class_<ICollidableWrap, bases<Object>,boost::noncopyable>("ICollidable", init<>())
//.def("Pos", &ICollidable::Object::pos)
.def("Test", pure_virtual(&ICollidable::Test))
.def("OnCollision",pure_virtual(&ICollidable::OnCollision))
;
如果有用我将包括包装代码,暴露我的类到python – Steve
我的第一个猜测是你通过值而不是通过引用传递参数,但它只是一个猜测,你应该提供更多的信息... –
我已经在提高python绑定中添加,希望它可以提供有用的信息需要解决这个问题。 – Steve