Я работаю над простой игрой Pacman-clone в Qt, используя Graphics View Framework. Я создал класс, WallItem
, который наследует QGraphicsItem. Он представляет собой лабиринт, состоящий из множества мелких предметов (дуги, прямые и т. Д.).Статический QGraphicsItem на QGraphicsScene
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
Проблема заключается в том, что я хотел бы вызвать метод paint
из wallItem только один раз - при начале применения, потому что стены в лабиринте статичны. Однако, когда pacman перемещается или пища удаляется, обновления сцены и ВСЕ предметы, включая wallItem, перекрашиваются, что влияет на производительность. Как я могу сделать свой wallItem
статичным, без перекраски при каждом обновлении в сцене?
Извините за мой английский, это не мой первый язык.
возможно QGraphicsItem :: ItemCoordinateCache является то, что вам нужно – Thalia