2015-04-24 2 views
0

Я работаю над простой игрой 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 статичным, без перекраски при каждом обновлении в сцене?

Извините за мой английский, это не мой первый язык.

+0

возможно QGraphicsItem :: ItemCoordinateCache является то, что вам нужно – Thalia

ответ

1

enum QGraphicsItem::CacheMode

«Кэширование используется для ускорения отрисовки с помощью выделения и рендеринга на закадровым пикселей буфера, который может быть использован повторно, когда элемент требует перерисовки. Для некоторых устройств рисования кэш хранится непосредственно в графическая память, что делает рендеринг очень быстрым ».

Попробуйте

QGraphicsItem::ItemCoordinateCache 
+0

Работает идеально! Спасибо, Талия! – Pumpkin

Смежные вопросы