问题描述
所以Iam试图在Qt中模拟Packman的运动,现在我要集中精力于他的移动和面对他移动的拖累。运动效果很好,但Iam在更新月食起始角度时遇到麻烦(这将代表他的前锋)。
我不明白为什么它没有被更新,或者也许是它被那个起始值覆盖了。 如何使其更新/不覆盖自身?
多数民众赞成:
#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include "movement.h"
using namespace std;
#include "player.h"
int main(int argc,char *argv[])
{
QApplication a(argc,argv);
QGraphicsScene *scene = new QGraphicsScene();
movement *ellipse = new movement();
ellipse->setStartAngle(ellipse->getSA());
ellipse->setSpanAngle(4800);
QBrush yellowBrush(Qt::yellow);
QPen blackPen(Qt::black);
blackPen.setWidth(3);
ellipse->setPen(blackPen);
ellipse->setBrush(yellowBrush);
ellipse->setRect(0,50,50);
scene->addItem(ellipse);
scene->update();
ellipse->setFlag(QGraphicsItem::ItemIsFocusable);
ellipse->setFocus();
QGraphicsView * view = new QGraphicsView(scene);
view->show();
return a.exec();
}
这是Movement.cpp :(玩家类暂时为空)
#include "movement.h"
#include <QDebug>
#include <QKeyEvent>
using namespace std;
void movement::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_Left){
setSA(1920);
qDebug() << sa;
setPos(x()-10,y());
}
else if (event->key() == Qt::Key_Right){
setSA(480);
setPos(x()+10,y());
}
else if (event->key() == Qt::Key_Up){
setSA(960);
setPos(x(),y()-10);
}
else if (event->key() == Qt::Key_Down){
setSA(3360);
setPos(x(),y()+10);
}
}
void movement::setSA(int setterSa)
{
sa = setterSa;
}
int movement::getSA()
{
return sa;
}
Movement.h
#ifndef MOVEMENT_H
#define MOVEMENT_H
#include <QGraphicsEllipseItem>
using namespace std;
class movement : public QGraphicsEllipseItem{
public:
void keyPressEvent(QKeyEvent * event);
void setSA(int setterSa); //sets Start Angle
int getSA(); // gets Start Angle
private:
int sa = 480;
};
#endif // MOVEMENT_H
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)