2015-04-24 42 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