gpt4 book ai didi

c++ - 使用 QGraphicsScene 平滑动画

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:31:20 26 4
gpt4 key购买 nike

我希望我的问题不总是同一个问题。我有一个 QGraphicsScene。它的项目是一些 QGraphicsPixmaps。我用一个计时器移动它们,每秒执行一次 SetX +10。我设置了 +10,因为窗口很大 100。使用此解决方案,我的动画效果不流畅。我想我可以通过将 +10 设置为 +1...+10 来使它们更平滑。但它没有用。

你能建议我一个方法吗?非常感谢。

void GameGui::updateScene()
{

for (int y = 0; y < game->getHeight(); ++y) {
for (int x = 0; x < game->getWidth(); ++x) {
Actor* a = game->get(y, x);

if (sceneItems[a] != 0) {
sceneItems[a]->setX(x*SIZE);
sceneItems[a]->setY(y*SIZE);
}
}
}
}

在我的程序的核心部分,每个 Actor 都是我的游戏角色(在他的功能中,例如移动 ecc)。 sceneItems 是一张 map ,我将每个 Actor 关联到他的像素图。 x, y 是抽象场景中的位置,x*SIZE 是图形场景中的位置。这些位置在抽象场景中更新,我在图形场景中表示它们。

最佳答案

我用这种方法为我的 QGraphicItems 设置了动画:

“QGraphicsItemAnimation 类为 QGraphicsItem 提供了简单的动画支持。” http://doc.qt.io/qt-4.8/qgraphicsitemanimation.html

来自链接站点的示例:

 QGraphicsItem *ball = new QGraphicsEllipseItem(0, 0, 20, 20);

QTimeLine *timer = new QTimeLine(5000);
timer->setFrameRange(0, 100);

QGraphicsItemAnimation *animation = new QGraphicsItemAnimation;
animation->setItem(ball);
animation->setTimeLine(timer);

for (int i = 0; i < 200; ++i)
animation->setPosAt(i / 200.0, QPointF(i, i));

QGraphicsScene *scene = new QGraphicsScene();
scene->setSceneRect(0, 0, 250, 250);
scene->addItem(ball);

QGraphicsView *view = new QGraphicsView(scene);
view->show();

timer->start();

关于c++ - 使用 QGraphicsScene 平滑动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8533499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com