在這個程序中,我已經建立了一個QPropertyanimation
並添加到它我的項目和pos()
財產。 我覆蓋KeyPressEvent
。並使用鍵組成Ĵ,˚F,的z項目去forward
,去back
和jump
。qpropretyanimation最好使用
根據項目跳躍應該下降的重力。爲此我稱down
函數。但只是一次跳的項目不會下降。我還有另一個問題:當第一次按下j和f(向前和向後)項目動畫令人滿意時,但是對於下一次項目前進並返回所有場景。
我的意思是它應該動畫例如40像素,但它動畫800像素。
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
QPoint start;
QPoint end;
~MainWindow();
private:
QGraphicsView* view;
QGraphicsScene* scene;
void keyPressEvent(QKeyEvent* k);
MyQgraphicsObject* m;
QPropertyAnimation* pr;
QElapsedTimer* timer;
int f;
int u;
int b;
void forward();
void up();
void back();
void down();
};
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
view=new QGraphicsView;
scene=new QGraphicsScene;
m=new MyQgraphicsObject;
pr=new QPropertyAnimation(m,"pos");
view->setScene(scene);
view->resize(800,800);
view->setFixedSize(800,800);
setCentralWidget(view);
scene->addItem(m);
start= QPoint(0,0);
f=30;
u=-30;
b=-30;
}
void MainWindow::keyPressEvent(QKeyEvent *k)
{
switch (k->key()) {
case Qt::Key_J: {
forward();
break;
}
case Qt::Key_Z: {
up();
down();
break;
}
case Qt::Key_F: {
back();
break;
}
default:
break;
}
}
void MainWindow::forward()
{
end.setX(f);
pr->setEndValue(end);
pr->setDuration(1000);
pr->setEasingCurve(QEasingCurve::Linear);
pr->start();
f+=40;
}
void MainWindow::up()
{
end.setY(u);
pr->setEndValue(end);
pr->setDuration(1000);
pr->setEasingCurve(QEasingCurve::Linear);
pr->start();
u-=30;
pr->pause();
}
void MainWindow::back()
{
end.setX(b);
pr->setEndValue(end);
pr->setDuration(1000);
pr->setEasingCurve(QEasingCurve::Linear);
pr->start();
b-=40;
}
void MainWindow::down()
{
u+=30;
end.setY(u);
pr->setEndValue(end);
pr->setDuration(1000);
pr->setEasingCurve(QEasingCurve::Linear);
pr->start();
}
代碼太低質量的。我無法猜測什麼是單字母變量。在up()之後立即調用'down()'也不會做你所需要的。動畫是異步的。如果對象需要掉下來,您需要設置一個'QTimer'並定期調用'down()'(例如每秒一次)。另外,如果用戶在動畫執行時按下某個鍵,則應該執行另一個動畫,但不會執行此操作,因爲如果動畫已經執行,則pr-> start()不執行任何操作。 –
對不起我的code.you說我應該使用[QTimer]。在哪裏我使用它?調用down()函數後up.if可能把示例代碼引導me.i真的需要這個program.i非常初學者特別是在[QGraphicsView]和動畫中。 – sarina