Название: Вопросы по архитектуре приложения ... 2D графика. Отправлено: patison от Май 29, 2010, 00:49 Всем привет!
В Qt я, пока, отсносительный нуб. Сейчас очень хочется соорудить простенькое игровое приложение. В данный момент хочу просто на поле передвигать кнопками объект. Сначала начал ориентироваться по примеру Colliding Mice (кажется так называется), сейчас просматриваю Ported Asteroids, но тут всё немного сложно для меня. Итак, сейчас у меня имеются файлы main.cpp, mainview.cpp (+mainview.h), stick.cpp (+stick.h). mainview - это класс унаследованный от QGraphicsView, который собсна представляет собой игровое поле. stick - класс от QGraphicsItem, объект которого представляет собой "палку", которую я хочу передвигать по экрану. main.cpp Код: #include <QtGui/QApplication> mainview.h Код: #ifndef MAINVIEW_H mainview.cpp Код: #include <QMessageBox> stick.h Код: #ifndef STICK_H stick.cpp Код: #include <QPainter> Примерно так. Как видно из комментов в последнем файле - не понял толком зачем функции boundingRect и shape. Второй вопрос - относительно обработки нажатия клавиш. Не уверен что подход который я тут использовал - правильный, но как сделать обработку нажатия клавиши на прямую в классе Stick - я не разобрался. Ну и третий вопрос, как сделать так что-бы графический объект Stick полностью передвигался по экрану. В данный момент, при нажатии на клавишу, от палки как-бы откалывается кусок прямоугольника, и двигается только он. Заранее спасибо. Буду благодарен ответам на вопросы выше, плюс интересно услышать мнения относительно архитектуры предложения в целом. Догадываюсь что в моём случае она не совсем правильная. Название: Re: Вопросы по архитектуре приложения ... 2D графика. Отправлено: Lostinnet от Май 31, 2010, 11:16 все очень просто!
boundingRect - задает прямоугольную область в которой отображается твой элемент. Из-за того что ты ее не правильно задаешь, то и палка у тебя плохо стирается/отрисовывается shape - задает область в которой элемент получает события мыши. Название: Re: Вопросы по архитектуре приложения ... 2D графика. Отправлено: ieroglif от Май 31, 2010, 15:20 я бы сделал такую архитектуру.
1. классы. 1.1 класс окна (О). умеет ловить события мыши-клавы и отправлять их другим игровым объектам. умеет перерисовываться. 1.2 класс игрового поля (ИП). умеет отрисовывать себя на QPainter и отдавать команду отрисовки своим "детям". 1.3 класс фигурки (Ф). умеет себя рисовать на QPainter. умеет ловить команды "вверх, вниз, влево, вправо" и пересчитывать свои собственные координаты. связываться это будет такими цепочками: 1. О.paintEvent -> QPainter p; -> ИП.draw(&p) -> Ф.draw(&p); - получили отрисовку всего чего надо. 2. О.keyEvent -> switch (key ) -> Ф.moveUp/Down/Left/Right -> Ф.x++ / y++ / x-- / y --; -> О.update(); вроде вот так. таким образом всё у нас красиво и очевидно =) добавляем рисование через буффер - получаем картинку без подёргиваний. хотим перерисовывать в OpenGL - просто добавляем функции drawGL в которых определяем нужные оглу отрисовки. Название: Re: Вопросы по архитектуре приложения ... 2D графика. Отправлено: patison от Июнь 01, 2010, 20:41 Спасибо. многое прояснилось с вашими ответами.
Пока ждал эти ответы, взялся основательно за литературу :) |