genaue Kollisionsabfrage bei QGraphicsPixmapItem
Verfasst: 31. Dezember 2006 20:03
Hallo zusammen!
Ich möchte gerne einen Character über eine Map laufen lassen. Beide hab ich als QGraphicsPixmapItem in meine QGraphicScene eingebaut. Die Kollisionsabfrage funktioniert auch, leider wird diese aber durch das umschließende Rechteck der Map bereitgestellt.
Ich habe mit:
foreground.setMask(foreground.mask());
bereits für das Bild eine Maske erstellt.
unter QGraphicsPixmapItem::setShapemode() steht auch folgendes:
"Sets the item's shape mode to mode. The shape mode describes how QGraphicsPixmapItem calculates its shape. The default mode is MaskShape."
und unter MaskShape:
"The shape is determined by calling QPixmap::mask(). This shape includes only the opaque pixels of the pixmap. Because the shape is more complex, however, it can be slower than the other modes, and uses more memory."
Wenn ich nun meine ShapeMode auf MaskShape stelle müsste er mir ja immer den genauen shape berechnen, oder?
Auf jeden Fall tut es das nicht, obwohl ich eine richtige Maske bekomme wenn ich QPixmap::mask() als Bitmap ausgebe.
Eine Alternative wäre für mich noch eine eigene QPixmap::shape Funktion zu schreiben. Dazu bräuchte ich aber eine Funktion, die mir aus der Maske ein QPainterPath erstellt, da die shape Funktion QPainterPath zurück geben soll.
Ich hoffe ihr könnt mir helfen!
Auf jeden Fall schon mal an alle ein gutes neues Jahr!
Ich möchte gerne einen Character über eine Map laufen lassen. Beide hab ich als QGraphicsPixmapItem in meine QGraphicScene eingebaut. Die Kollisionsabfrage funktioniert auch, leider wird diese aber durch das umschließende Rechteck der Map bereitgestellt.
Ich habe mit:
foreground.setMask(foreground.mask());
bereits für das Bild eine Maske erstellt.
unter QGraphicsPixmapItem::setShapemode() steht auch folgendes:
"Sets the item's shape mode to mode. The shape mode describes how QGraphicsPixmapItem calculates its shape. The default mode is MaskShape."
und unter MaskShape:
"The shape is determined by calling QPixmap::mask(). This shape includes only the opaque pixels of the pixmap. Because the shape is more complex, however, it can be slower than the other modes, and uses more memory."
Wenn ich nun meine ShapeMode auf MaskShape stelle müsste er mir ja immer den genauen shape berechnen, oder?
Auf jeden Fall tut es das nicht, obwohl ich eine richtige Maske bekomme wenn ich QPixmap::mask() als Bitmap ausgebe.
Eine Alternative wäre für mich noch eine eigene QPixmap::shape Funktion zu schreiben. Dazu bräuchte ich aber eine Funktion, die mir aus der Maske ein QPainterPath erstellt, da die shape Funktion QPainterPath zurück geben soll.
Ich hoffe ihr könnt mir helfen!
Auf jeden Fall schon mal an alle ein gutes neues Jahr!