我正在使用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