Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python&;Qt、qgraphicscene冲突和typeid(来自c+;+;)_Python_Qt_Pyqt_Collision_Qgraphicsscene - Fatal编程技术网

Python&;Qt、qgraphicscene冲突和typeid(来自c+;+;)

Python&;Qt、qgraphicscene冲突和typeid(来自c+;+;),python,qt,pyqt,collision,qgraphicsscene,Python,Qt,Pyqt,Collision,Qgraphicsscene,在这个问题上我很难找到帮助 我设法让碰撞检测工作,但现在我想检测碰撞对象的类型。 目前这是一个QX平台 我已经在C++中编码了,但是现在Python不知道Type ID,我不知道该怎么办。 Python函数: def IsColliding(self, charView): collision_list = self.Map_Scene.collidingItems(charView, mode=QtCore.Qt.IntersectsItemShape) if

在这个问题上我很难找到帮助

我设法让碰撞检测工作,但现在我想检测碰撞对象的类型。 目前这是一个QX平台

我已经在C++中编码了,但是现在Python不知道Type ID,我不知道该怎么办。 Python函数:

def IsColliding(self, charView):
        collision_list = self.Map_Scene.collidingItems(charView, mode=QtCore.Qt.IntersectsItemShape)
        if collision_list:
            print(collision_list)
            print(typeid(collision_list[0])) ## Error here
            return True
        else:
            return False

工作C++等效代码:

void xGame::placeBlock(int xpos, int ypos, QString blockName, bool isObs) {
    //place new block
    block = new xBlock(blockName, isObs);
    block->setPos(xpos, ypos);
    block->setZValue(1);
    scene->addItem(block);

    //remove old block
    QList<QGraphicsItem *> colliding_items = block->collidingItems();
    for (int i = 0, n = colliding_items.size(); i < n; ++i) {
        if (typeid(*(colliding_items[i])) == typeid(xBlock)) {
            scene->removeItem(colliding_items[i]);
            delete colliding_items[i];
        }
    }
}
void xGame::placeBlock(int XPO、int YPO、QString blockName、bool isObs){
//放置新块
块=新的xBlock(块名,isObs);
块->设置位置(xpos、YPO);
块->设置值(1);
场景->添加项(块);
//移除旧块
QList colling_items=block->collingitems();
对于(int i=0,n=collisting_items.size();i移除项目(碰撞物品[i]);
删除冲突项[i];
}
}
}

基类QGraphicsItem有一个返回“int”的“type”方法,它正好用于此目的。它应该比使用typeid或任何涉及字符串查找或比较的方法更有效。QGraphicsItem派生的每个内置类都有一个唯一的类型,当您派生自己的类时,只需在类中实现“type”方法并返回一个唯一的值


在文档中查找QGraphicsItem::UserType。这里有一个例子。Qt为自己保留最多65535的值,用户类型从65536开始。

如果要检查该项是否为QGraphicsPixmapItem的实例,请使用
isinstance(item,QGraphicsPixmapItem)
(或您的子类名称)