2017-02-25 4 views
0

Ich mache einen Spieler mit QTimeLine über den Bildschirm bewegen, um die Animation/Bewegung in der angegebenen Zeit zu behandeln.Qt QTimeLine überspringt den ersten Frame

In meinem Player Konstruktor:

timeLine = new QTimeLine(500); 
timeLine->setFrameRange(1, 4); 
timeLine->setCurveShape(QTimeLine::CurveShape::LinearCurve); 
QObject::connect(timeLine, SIGNAL(frameChanged(int)), this, SLOT(animatedMove(int))); 

ich die Animation Zeug entfernt zeigen nur das Problem:

void PlayerSprite::animatedMove(int frame) 
{ 
    qDebug() << "Frame: " << frame; 
} 

Der Timer gestartet wird in einen Schlitz, der auf Tastendruck aufgerufen wird:

void PlayerSprite::move(Direction direction) 
{ 
    timeLine->start(); 
} 

Der Ausgang ist:

GameView: Player is moving 
Frame: 2 
Frame: 3 
Frame: 4 
GameView: Player is moving 
Frame: 1 
Frame: 2 
Frame: 3 
Frame: 4 

Aber es sollte sein:

GameView: Player is moving 
Frame: 1 
Frame: 2 
Frame: 3 
Frame: 4 
GameView: Player is moving 
Frame: 1 
Frame: 2 
Frame: 3 
Frame: 4 

Während jedes Rahmens der Spieler bewegt sich z.B. 2 Schritte. Daher sollte 4x2 = 8 Schritte gehen ... aber im ersten Frame bewegt es sich nur 6 Schritte, was bedeutet, dass mein Charakter aus dem Spielraster fällt. Ich mache ein kleines 16-Bit-RPG;)

Ist dies, weil angenommen wird, dass mein Player bereits in seinem ersten Frame ist? Wenn ja, kann dies außer Kraft gesetzt werden?

Antwort

1

Dies scheint ein bekannter Fehler zu sein:

https://bugreports.qt.io/browse/QTBUG-41610

Die einfachste Work-around in Ihrem Fall ist die aktuelle Zeit von der Zeitlinie auf die Dauer bei der Erstellung festlegen:

timeLine = new QTimeLine(500); 
timeLine->setFrameRange(1, 4); 
timeLine->setCurveShape(QTimeLine::CurveShape::LinearCurve); 
// Add this line: 
timeLine->setCurrentTime(timeLine->duration()); 
+0

Ich fragte mich, aus welchem ​​Grund es sich so verhalten würde. Hat mir nicht viel Sinn gemacht. Vielen Dank für die einfache Arbeit. Für die Zukunft, wie haben Sie das aufgespürt? Google hat überhaupt nicht geholfen. – ovg

+0

Mein genauer Google-Suchbegriff war "qt bug qtimeline". –

+0

Oh, OK. Ich sollte das nächste Mal so einfach versuchen;) – ovg

Verwandte Themen