[PyQt] PyQt4 does not recognize the *shape* of QGraphicsItems for collision detection

Konrad Koller koko9991 at googlemail.com
Wed Aug 18 09:27:43 BST 2010


2010/8/14 Philippe Crave <philippe.crave at gmail.com>

> not sure, but maybe you should set this flag: ItemClipsToShape
>
>
> http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qgraphicsitem.html#GraphicsItemFlag-enum
>
>
> 2010/8/14 Konrad Koller <koko9991 at googlemail.com>
> >
> > In many games collision detection is important. In my case the game's
> stones are mostly convex polygons.
> > Therefore their bounding rectangle is not adequate for collision
> detection and therefore I create them
> > in the constructor of the class Stone(QGraphicsItem) as QPainterPaths
> like so:
> >
> > self.path=QPainterPath()
> > self.path.addPolygon(polygon)
> > self.path.closeSubpath()
> >
> > Then their shape is simple:
> >
> > def shape(self): return self.path
> >
> > Their boundingRect (used elsewhere) is:
> >
> > def boundingRect(self): return self.path.boundingRect()
> >
> > For collision detection with already placed stones I write:
> >
> > for item in self.collidingItems(Qt.IntersectsItemShape):
> >     if isinstance(item,Stone): print "Collision!"
> >
> > To my surprise the detection does not recognize the shape but obviously
> the boundingRect.
> > For example:
> > _________
> > |______    |
> >   ___    |   |___
> >  |     |    |_____|
> >  |     |
> >  |     |_
> >  |____|
> >
> > This reports a "collision". Why?
> >
> >  Thanks for any hint. Konrad
>
> Philippe Crave proposed the flag ItemClipsToShape, but this does not help.
I suppose a fundamental error in the shape collision detection of Qt4/PyQt4.
My experience is, that for the same QGraphicsItem the detection of a
collision with a point (QGraphicsItem.contains(point)) works correctly even
when the shape is of importance, but fails for the colliding detection with
QGraphicsItems when the shape of the colliding item has to be recognized.

I think the experts of Qt4/PyQt4 should check this behavior and eventually
try to correct it, otherwise in such cases the GUI would not be usable. Any
further hint is welcome.

Konrad
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20100818/bf9a0efd/attachment-0001.html>


More information about the PyQt mailing list