Mashkovd
Гость
|
|
« : Октябрь 08, 2010, 14:14 » |
|
Здравствуйте, Необходимо написать программу а-ля рыбки. Управление рыбкой джойстиком в углу экрана.
Попробовал сделать при помощи QGraphicsView FrameWork. Наследую класс QGraphicsScene для своей сцены, переопределяю методы mousePressEvent и timerEvent.
Соответственно по таймеру происходит движение рыбки, но с заметными рывками(
вот переопределенный класс сцены -
fishscene::fishscene(QObject *parent) : QGraphicsScene(parent) { setItemIndexMethod(QGraphicsScene::NoIndex);
//add MainFish to (0, 0) MainFish = (fish *)addPixmap(QPixmap("C:/MyQT/fish/fish_1.png")); MainFish->setData(0, "MainFish"); MainFish->translate(0, 0);
//add joystick to (485, 205) joystick = addPixmap(QPixmap("C:/MyQT/fish/joystick.PNG"));
joystick->moveBy(320, 180);; joystick->setData(0, "joystick");
//set Background and startTimer setBackgroundBrush(QBrush(QColor(125,50,100))); startTimer(1000/33); }
void fishscene::mousePressEvent(QGraphicsSceneMouseEvent * mouseEvent) { QGraphicsItem * item = fishscene::itemAt(mouseEvent->scenePos()); if (item->data(0) == "joystick") { dr =item->mapFromScene(mouseEvent->scenePos()); dr.operator +=(JSdr); BoolTimer = true; } }
void fishscene::timerEvent(QTimerEvent *) {
if (BoolTimer) { QPointF drTEMP(qRound((dr.x()/20)), qRound(dr.y()/20)); MainFish->moveBy(drTEMP.x(), drTEMP.y()); update(); }
}
|