Russian Qt Forum
Май 20, 2024, 20:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: 2d Game  (Прочитано 1663 раз)
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();
    }


}

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.038 секунд. Запросов: 17.