旋转QGraphicsItem并找到它的新位置

时间:2017-08-15 13:30:55

标签: qt qt5

我正在进行塔防游戏并试图从炮塔射击弹丸。炮塔的精灵我看起来像这样

enter image description here

此外,子弹看起来像这样 enter image description here

我想做的是让炮塔击中子弹到某一点(例如attackDestination = QPointF(1000, 500);

为此,我有一个类Bullet,插槽move

void Bullet::move()
{

    int stepSize = 20; // how fast the bullet moves
    double angle = rotation();

    double dy = stepSize * qSin(qDegreesToRadians(angle)); // The X that needs to be moved
    double dx = stepSize * qCos(qDegreesToRadians(angle)); // The Y that needs to be moved

    setPos(x() + dx, y() + dy);
}

由QTimer触发。

我在Tower类中也有一个插槽(代表炮塔)

void Tower::attackTarget()
{
    Bullet *bullet = new Bullet();
    //getWidthMap() returns the width of the tower
    //getHeightMap() returns the height of the tower

    bullet->setPos(x() + getWidthMap() /2, y());

    QLineF line(QPointF(x() + getWidthMap() /2, y()), attackDestination);
    double angle =(-1) *  line.angle();

    bullet->setRotation(angle);

    this->setRotation(90 + angle);

    game->scene->addItem(bullet);

}

我将炮塔旋转了+90度,因为它的初始位置是垂直的,它需要与子弹一样形成一个角度(与oX一致的角度)。顺时针旋转。

问题在于攻击时子弹相对于炮塔的位置。

没有行this->setRotation(90 + angle);(第一张图片),有了它(第二张图片)

enter image description here

enter image description here

如您所见,子弹从炮塔的初始位置开始(当它没有旋转时),因为pos()函数保持初始X和Y.我该如何解决?

0 个答案:

没有答案