【发布时间】:2015-04-24 15:33:42
【问题描述】:
我正在使用图形视图框架在 Qt 中开发一个简单的 Pacman 克隆游戏。我创建了一个类,WallItem,它继承了 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 是你需要的