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?
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
Mein genauer Google-Suchbegriff war "qt bug qtimeline". –
Oh, OK. Ich sollte das nächste Mal so einfach versuchen;) – ovg