Название: [РЕШЕНО] Анимированный спрайт от QGraphicsItem Отправлено: Hrundel от Июнь 19, 2013, 17:04 Всем привет,
задался целью написать анимированный спрайт наследуемый от QGraphicsItem. С простым виджетом получилось без проблем: Встроил таймер, переписал paintEvent и все заработало. Однако там есть конструктор и все такое. С QGraphicsItem до сих пор ни разу не работал - по сему даже представить не могу, какова логика при создании спрайта. Таймер вроде как нужен. Но как его туда вживить. Или его надо где-то снаружи оставить. И как там с Pixmap работать? Возможно там использовать такие конструкции? Код: pixmap->fill(QColor("transparent")); Буду рад всем советам, примерам и замечаниям для понимая логики работы с QGraphicsItem. Спасибо. Название: Re: Анимированный спрайт от QGraphicsItem Отправлено: Bepec от Июнь 19, 2013, 17:36 Наследоваться от итема и делать что душе угодно в paintEvent.
Название: Re: Анимированный спрайт от QGraphicsItem Отправлено: Hrundel от Июнь 19, 2013, 21:24 Да, я , собственно, поэтому тему и открыл, что не все так просто.
Ладно конструктор там использовать можно, но так как QGraphicsItem наследуется не от QObject то присобачить таймер к нему не получается. Метода paintEvent у него тоже нет, есть только paint Код: paint(QPainter* painter, const QStyleOptionGraphicsItem*, QWidget*) Опять как-то, не совсем стандартно. В варианте с Qwidget я реализовал это просто: Код: #include "animatedsprite.h" Но здесь так не получается. Нужен другой подход. А какой я не знаю. Кстати, есть еще класс QGraphicsPixmapItem Он, наверное, подходит еще лучше для спрайта. Но по своей архитектуре он такой же как и QGraphicsItem. Название: Re: Анимированный спрайт от QGraphicsItem Отправлено: Bepec от Июнь 19, 2013, 22:01 Что вы бред несёте. Он наследник QObject. QTimer в руки и погнали картинки отрисовывать, а не темы на форуме калякать ;)
Название: Re: Анимированный спрайт от QGraphicsItem Отправлено: Old от Июнь 19, 2013, 22:12 Что вы бред несёте. Он наследник QObject. QTimer в руки и погнали картинки отрисовывать, а не темы на форуме калякать ;) Да ладно. :)Ладно конструктор там использовать можно, но так как QGraphicsItem наследуется не от QObject то присобачить таймер к нему не получается. А QGraphicsObject наследуется.Название: Re: Анимированный спрайт от QGraphicsItem Отправлено: Hrundel от Июнь 19, 2013, 22:47 Что вы бред несёте. Он наследник QObject. QTimer в руки и погнали картинки отрисовывать, а не темы на форуме калякать ;) Ну ладно, сегодня я уже винца выпил, а завтра продолжим ;) Название: Re: Анимированный спрайт от QGraphicsItem Отправлено: Bepec от Июнь 19, 2013, 23:27 А мож и ошибаюсь :) Надо уточнить :D Завтра :D
Название: Re: Анимированный спрайт от QGraphicsItem Отправлено: Hrundel от Июнь 20, 2013, 11:08 Ну, вот нашел всю иерархию классов можешь глянуть http://doc.qt.nokia.com/extras/qt43-class-chart.pdf
QGraphicsItem стоит отдельно но его некоторые потомки роднятся и с QObject тоже. Но прямые потомки как QGraphicsPixmapItem - не роднятся Так что Bepec учи матчасть и не калякай в форумах :D ;) А если серьезно - идеи какие-нибудь есть? Old, спасибо за наводку на QGraphicsObject. Буду разбираться Название: Re: Анимированный спрайт от QGraphicsItem Отправлено: Bepec от Июнь 20, 2013, 12:15 Хей, с благодарностью приму данную информацию :)
Название: Re: Анимированный спрайт от QGraphicsItem Отправлено: Hrundel от Июнь 21, 2013, 23:38 Ок, написал!
В общем ситуация выглядит так: 1. Наследуемся от QGraphicsItem 2. Таймер должен быть с наружи 3. У наследника надо переписать Код: protected:void advance(int phase); 4. advance ловиться не самим объектом а сценой, то есть выглядеть будет так: Код: timer = new QTimer(); Вывод: Таймер один ДЛЯ ВСЕХ АНМИРОВАННЫХ ЭЛЕМЕНТОВ СЦЕНЫ!!! Так что анимацию всех спрайтов необходимо делать на одинаковой частоте. Всем спасибо! |