Создавал игру, вышла ошибка. Код ошибки :
The program has unexpectedly finished.
The process was ended forcefully.
build-SpaceRangers-Desktop_Qt_5_15_1_MSVC2015_64bit-Debug\debug\SpaceRangers.exe crashed.
Код игры :
View.h
#pragma once
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QObject>
#include "player.h"
#include "virus.h"
#include "laserbullet.h"
class View :public QGraphicsView
{
public:
View();
void view_elements();
QList<QGraphicsItem*> Viruses;
void viruspodMoving(QGraphicsItem *virus);
void deleteVirus(QGraphicsItem *virus);
public slots:
void addVirus();
void virusMov();
void PlayerAttack();
private:
QGraphicsScene mainScene;
Player pl;
Virus vir;
LaserBullet lb;
View *v;
QTimer *timer; // Таймер
QTimer *createVirus;
QTimer *vm;
Virus *vc;
};
View.cpp
#include "view.h"
#include "player.h"
#include <QObject>
#include <QTimer>
#include <QtGlobal>
View::View()
{
setWindowTitle("Space Rangers");
setRenderHint(QPainter::Antialiasing);
setFrameStyle(0);
setSceneRect(0, 0, 600,700);
setFixedSize(600, 700);
mainScene.setItemIndexMethod(QGraphicsScene::NoIndex);
setScene(&mainScene);
connect(&pl, &Player::IS_IT_Attack, this, &View::PlayerAttack);
timer = new QTimer(this);
connect(timer, &QTimer::timeout, &pl, &Player::actions);
timer->start(1000 / 50);
view_elements();
vm = new QTimer(this);
connect(vm, &QTimer::timeout, this, &View::virusMov);
createVirus = new QTimer(this);
connect(createVirus, &QTimer::timeout, this, &View::addVirus);
createVirus->start(30000);
}
void View::view_elements(){
pl.setPos(205, 400);
mainScene.addItem(&pl);
}
void View::addVirus(){
Virus *virus = new Virus();
vc = virus;
mainScene.addItem(virus);
virus->x = ((int)rand()/(420));
virus->setPos(vir.x, 0);
Viruses.append(virus);
viruspodMoving(virus);
}
void View::deleteVirus(QGraphicsItem *virus){
foreach(QGraphicsItem *v, Viruses){
if(v == virus){
mainScene.removeItem(v);
Viruses.removeOne(v);
delete vc;
vir.y = 0;
}
}
createVirus->start(30000);
}
void View::viruspodMoving(QGraphicsItem *virus){
if(vir.y < 671){
emit vm->start(100);
}
if(vir.y >= 670){
deleteVirus(virus);
}
}
void View::virusMov(){
if(vir.y < 671){
vir.y = vir.y + 4;
vc->setPos(vir.x, vir.y);
viruspodMoving(vc);
}
}
void View::PlayerAttack(){
LaserBullet *bullet = new LaserBullet();
LaserBullet *bullet2 = new LaserBullet();
lb.x = pl.x + 41;
lb.y = pl.y - 32;
lb.x2 = pl.x + 25;
lb.y2 = pl.y - 32;
bullet->setPos(lb.x, lb.y);
mainScene.addItem(bullet);
bullet2->setPos(lb.x2, lb.y2);
mainScene.addItem(bullet2);
}
Virus.h
#pragma once
#include <QtWidgets>
#include <QGraphicsItem>
class Virus: public QObject, public QGraphicsItem
{
Q_OBJECT
public:
Virus(QObject *parent = 0);
~Virus();
int vWidth = 70;
int vHeigth = 55;
int x = 0;
int y = 0;
signals:
void checkVirus(QGraphicsItem *item);
private:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,QWidget *widget) override;
QRectF boundingRect() const override;
QPixmap *VirusImage;
};
Virus.cpp
+
#include "virus.h"
#include "view.h"
Virus::Virus(QObject *parent):QObject(parent), QGraphicsItem()
{
VirusImage = new QPixmap();
VirusImage->load(":/Virus.png");
}
Virus::~Virus(){
}
QRectF Virus::boundingRect() const{
return QRectF(0, 0, vWidth, vHeigth);
}
void Virus::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,QWidget *widget){
painter->drawPixmap(0, 0, vWidth, vHeigth, *VirusImage);
Q_UNUSED(option);
Q_UNUSED(widget);
}