2015-04-24 74 views
0

我正在使用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成爲靜態的,而不需要重新繪製場景中的每個更新?

對不起,我的英語不是我的第一語言。

+0

可能的QGraphicsItem :: ItemCoordinateCache是​​你所需要的 – Thalia

回答

1

enum QGraphicsItem::CacheMode

「高速緩存被用來加快通過分配和渲染到一個離屏像素緩衝器,其可以當物品需要重畫被重用渲染。對於一些塗料設備,高速緩存直接存儲在圖形內存,這使得渲染速度非常快。「

嘗試

QGraphicsItem::ItemCoordinateCache 
+0

運行完美!謝謝塔利亞! – Pumpkin