torpedo.cpp Example File
demos/sub-attaq/torpedo.cpp
#include "torpedo.h"
#include "pixmapitem.h"
#include "boat.h"
#include "graphicsscene.h"
#include "animationmanager.h"
#include "qanimationstate.h"
#include <QtCore/QPropertyAnimation>
#include <QtCore/QStateMachine>
#include <QtCore/QFinalState>
Torpedo::Torpedo(QGraphicsItem * parent, Qt::WindowFlags wFlags)
: QGraphicsWidget(parent,wFlags), currentSpeed(0), launchAnimation(0)
{
pixmapItem = new PixmapItem(QString::fromLatin1("torpedo"),GraphicsScene::Big, this);
setZValue(2);
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
setFlags(QGraphicsItem::ItemIsMovable);
resize(pixmapItem->boundingRect().size());
}
void Torpedo::launch()
{
launchAnimation = new QPropertyAnimation(this, "pos");
AnimationManager::self()->registerAnimation(launchAnimation);
launchAnimation->setEndValue(QPointF(x(),qobject_cast<GraphicsScene *>(scene())->sealLevel() - 15));
launchAnimation->setEasingCurve(QEasingCurve::InQuad);
launchAnimation->setDuration(y()/currentSpeed*10);
connect(launchAnimation,SIGNAL(valueChanged(const QVariant &)),this,SLOT(onAnimationLaunchValueChanged(const QVariant &)));
QStateMachine *machine = new QStateMachine(this);
QAnimationState *launched = new QAnimationState(machine);
launched->setAnimation(launchAnimation);
QFinalState *final = new QFinalState(machine);
machine->setInitialState(launched);
launched->addTransition(this, SIGNAL(torpedoExplosed()),final);
launched->addTransition(launched, SIGNAL(animationFinished()), final);
connect(machine,SIGNAL(finished()),this, SIGNAL(torpedoExecutionFinished()));
machine->start();
}
void Torpedo::setCurrentSpeed(int speed)
{
if (speed < 0) {
qWarning("Torpedo::setCurrentSpeed : The speed is invalid");
return;
}
currentSpeed = speed;
}
void Torpedo::onAnimationLaunchValueChanged(const QVariant &)
{
foreach (QGraphicsItem *item , collidingItems(Qt::IntersectsItemBoundingRect)) {
if (item->type() == Boat::Type) {
Boat *b = static_cast<Boat *>(item);
b->destroy();
}
}
}
void Torpedo::destroy()
{
launchAnimation->stop();
emit torpedoExplosed();
}
| Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies) |
Trademarks |
Qt 4.6.0-tp1 |