2011-05-18 86 views
2

我正在研究一个小型塔防游戏以学习Qt。我正在使用QGraphicsScene来保存游戏的所有对象。为了让它们移动,我没有使用动画框架,但我正在调用advance()方法和QTimer。QGraphicsItem绘图问题

我想让我的射弹在击中敌人时发生爆炸。问题是,当我试图绘制一个椭圆来模拟爆炸时,它无法正确绘制。

您可以在this video中看到问题。

我试图玩Z指标,但它没有改变任何东西。

这是我用来绘制弹丸代码:

void Projectile::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) 
{ 
    if(!isExploding) { 
     painter->drawPixmap(boundingRect().toRect(), image); 
    } else { 
     if(cnt < 50) { 
      painter->setBrush(QBrush(explosion)); 
      painter->drawEllipse(-cnt, -cnt, 2.0*cnt, 2.0*cnt); 
      cnt++; 
     } else { 
      this->isFinished = 1; 
     } 
    } 
} 

QRectF Projectile::boundingRect() const 
{ 
    // Taille de l'image de l'insecte 
    return QRectF(0, 0, 6, 6); 
} 

你有关于如何解决这个问题的任何线索?

谢谢。

+0

很难说没有看到你的代码;但在我的经验中,工件和怪异的剪裁可能是由于错误地指定了图形项目的boundingRect而导致的。 – grayDad 2011-05-18 17:20:32

回答

1

说CNT是3 您正在绘制的椭圆与

painter->drawEllipse(-3,-3,6,6) 

这将需要一个boundingRect具有至少为9
的宽度和高度也将boundingRect使用内部项目坐标指定系统。您正在从(-3,-3)绘制到(6,6),它位于boundingRect之外。

+0

nitpick:'drawEllipse(-3,-3,6,6)'从'(-3,-3)'绘制到'(+ 3,+ 3)',因此它适合于7×7边界矩形。 – 2011-05-18 18:45:57