我正在使用Graphics View Framework在Qt中開發一個簡單的Pacman-clone遊戲。我創建了一個類,WallItem
,它繼承了QGraphicsItem。它代表迷宮,由許多小塊(弧線,直線等)組成。QGraphicsScene上的靜態QGraphicsItem
class WallItem: public QGraphicsItem
{
protected:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
}
我的應用程序的主類繼承了QGraphicsView。
class Canvas: public QGraphicsView
{
Q_OBJECT
private:
WallItem* wallItem;
PacmanItem* pacman;
//other items
}
在Canvas的構造函數中,我將wallItem添加到場景中;
wallItem = new WallItem(/*params*/);
scene()->addItem(wallItem);
pacmanItem = new PacmanItem(/*params*/);
scene()->addItem(pacmanItem);
//other items
的問題是,我想調用方法wallItem的paint
只有一次 - 在應用程序的開始,因爲在迷宮牆壁是靜態的。但是,當pacman移動或食物移除時,場景更新和所有項目(包括wallItem)都會重新繪製,從而影響性能。我怎樣才能使我的wallItem
成爲靜態的,而不需要重新繪製場景中的每個更新?
對不起,我的英語不是我的第一語言。
可能的QGraphicsItem :: ItemCoordinateCache是你所需要的 – Thalia