J'ai créé cette fonction pour déplacer une unité le long des points de route enregistrés dans list_
. Chaque unité a son propre list_
. move()
est initialement appelé avec la vitesse (distance/étape) chaque étape. Ensuite, en fonction de la distance jusqu'au prochain point, trois actions possibles sont prises.Déplacer un objet le long des waypoints en 2D
Pouvez-vous suggérer des améliorations?
void Unit::move(qreal maxDistance)
{
// Construct a line that goes from current position to next waypoint
QLineF line = QLineF(pos(), list_.firstElement().toPointF());
// Calculate the part of this line that can be "walked" during this step.
qreal part = maxDistance/line.length();
// This step's distance is exactly the distance to next waypoint.
if (part == 1) {
moveBy(line.dx(), line.dy());
path_.removeFirst();
}
// This step's distance is bigger than the distance to the next waypoint.
// So we can continue from next waypoint in this step.
else if (part > 1)
{
moveBy(line.dx() , line.dy());
path_.removeFirst();
if (!path_.isEmpty())
{
move(maxDistance - line.length());
}
}
// This step's distance is not enough to reach next waypoint.
// Walk the appropriate part of the length.
else /* part < 1 */
{
moveBy(line.dx() * part, line.dy() * part);
}
}
Si vous essayez d'animer des objets, le nouveau cadre d'animation peut être intéressant à lire: http://doc.trolltech.com/latest/animation-overview.html –