Вот данное окно :
Вот ошибка под Debug
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, 700,700);
setFixedSize(700, 700);
mainScene.setItemIndexMethod(QGraphicsScene::NoIndex);
setScene(&mainScene);
connect(&pl, &Player::IS_IT_Attack, this, &View::PlayerAttack);
startGame = new QTimer(this);
connect(startGame, &QTimer::timeout, &pl, &Player::actions);
startGame->start(1000 / 50);
view_elements();
create_type1_enemy = new QTimer(this);
connect(create_type1_enemy, &QTimer::timeout, this, &View::addType1Enemy);
create_type1_enemy->start(8000);
reload_virusmove = new QTimer(this);
connect(reload_virusmove, &QTimer::timeout, this, &View::virusMov);
T1_Enemy_Attack = new QTimer(this);
connect(T1_Enemy_Attack, &QTimer::timeout, this, &View::Type1_EnemyAttack);
T1_Enemy_bulletmove = new QTimer(this);
connect(T1_Enemy_bulletmove, &QTimer::timeout, this, &View::T1_E_BulletMov);
player_bulletmove = new QTimer(this);
connect(player_bulletmove, &QTimer::timeout, this, &View::p_bulletMov);
create_reload_Virus = new QTimer(this);
connect(create_reload_Virus, &QTimer::timeout, this, &View::addVirus);
create_reload_Virus->start(30000);
}
void View::view_elements(){
pl.setPos(205, 400);
mainScene.addItem(&pl);
}
void View::addVirus(){
reload_Virus *virus = new reload_Virus();
r_vir = new reload_Virus();
r_vir = virus;
virus->x = rand() % 630;
mainScene.addItem(virus);
virus->setPos(r_vir->x, r_vir->y);
Viruses.append(virus);
viruspodMoving(virus);
}
void View::delete_reload_Virus(QGraphicsItem *virus){
foreach(reload_Virus *v, Viruses){
if(v == virus){
mainScene.removeItem(v);
Viruses.removeOne(v);
delete virus;
r_vir->y = -70;
r_vir->x = 0;
}
}
}
void View::viruspodMoving(QGraphicsItem *virus){
if(r_vir->y < 700){
reload_virusmove->start(40);
}
else{
reload_virusmove->stop();
delete_reload_Virus(virus);
}
}
void View::virusMov(){
if(r_vir->y < 700){
r_vir->y = r_vir->y + 3;
r_vir->setPos(r_vir->x, r_vir->y);
viruspodMoving(r_vir);
}
}
void View::PlayerAttack(){
player_bullet = new p_LaserBullet();
player_bullet2 = new p_LaserBullet();
player_bullet->x = pl.x + 46;
player_bullet->y = pl.y - 33;
player_bullet2->x = pl.x + 28;
player_bullet2->y = pl.y - 33;
player_bullet->setPos(player_bullet->x, player_bullet->y);
mainScene.addItem(player_bullet);
player_bullet2->setPos(player_bullet2->x, player_bullet2->y);
mainScene.addItem(player_bullet2);
p_Bullets.append(player_bullet);
p_Bullets.append(player_bullet2);
p_bulletpodMoving(player_bullet, player_bullet2);
}
void View::p_bulletpodMoving(QGraphicsItem *bullet_1, QGraphicsItem *bullet_2){
if(player_bullet->y + 5 > 3 && player_bullet2->y + 5 > 3){
player_bulletmove->start(20);
}
else {
player_bulletmove->stop();
delete_player_bullet(bullet_1, bullet_2);
}
}
void View::p_bulletMov(){
if(player_bullet->y + 5 > 3 && player_bullet2->y + 5 > 3){
player_bullet->y = player_bullet->y - 5;
player_bullet2->y = player_bullet2->y - 5;
player_bullet->setPos(player_bullet->x, player_bullet->y);
player_bullet2->setPos(player_bullet2->x, player_bullet2->y);
p_bulletpodMoving(player_bullet, player_bullet2);
}
}
void View::delete_player_bullet(QGraphicsItem *bullet1, QGraphicsItem *bullet2){
foreach(QGraphicsItem *b, p_Bullets){
if(b == bullet1){
mainScene.removeItem(b);
delete bullet1;
p_Bullets.removeOne(b);
player_bullet->y = 0;
}
}
foreach(QGraphicsItem *b, p_Bullets){
if(b == bullet2){
mainScene.removeItem(b);
delete bullet2;
p_Bullets.removeOne(b);
player_bullet2->y = 0;
}
}
}
void View::addType1Enemy(){
Type1_Enemy *enemy_1type = new Type1_Enemy();
enemy_1type->setPos(enemy_1type->x, enemy_1type->y);
mainScene.addItem(enemy_1type);
T1_Enemy_Attack->start(1000);
}
void View::Type1_EnemyAttack(){
T1_Enemy_bullet = new Type1_EnemyBullet();
T1_Enemy_bullet2 = new Type1_EnemyBullet();
T1_Enemy_bullet->x = Type1_Enemy_res->x + 20;
T1_Enemy_bullet->y = Type1_Enemy_res->y + 105;
T1_Enemy_bullet->setPos(T1_Enemy_bullet->x, T1_Enemy_bullet->y);
T1_Enemy_bullet2->x = Type1_Enemy_res->x + 40;
T1_Enemy_bullet2->y = Type1_Enemy_res->y + 105;
T1_Enemy_bullet2->setPos(T1_Enemy_bullet2->x, T1_Enemy_bullet2->y);
mainScene.addItem(T1_Enemy_bullet);
mainScene.addItem(T1_Enemy_bullet2);
e1_Bullets.append(T1_Enemy_bullet);
e1_Bullets.append(T1_Enemy_bullet2);
T1_E_bulletpodMoving(T1_Enemy_bullet, T1_Enemy_bullet2);
}
void View::T1_E_bulletpodMoving(QGraphicsItem *bullet_1, QGraphicsItem *bullet_2){
if(T1_Enemy_bullet->y < 697 && T1_Enemy_bullet2->y < 697){
T1_Enemy_bulletmove->start(20);
}
else{
T1_Enemy_bulletmove->stop();
delete_T1_E_bullet(bullet_1, bullet_2);
}
}
void View:: T1_E_BulletMov(){
if(T1_Enemy_bullet->y < 697 && T1_Enemy_bullet2->y < 697){
T1_Enemy_bullet->y = T1_Enemy_bullet->y + 5;
T1_Enemy_bullet2->y = T1_Enemy_bullet2->y + 5;
T1_Enemy_bullet->setPos(T1_Enemy_bullet->x,T1_Enemy_bullet->y);
T1_Enemy_bullet2->setPos(T1_Enemy_bullet2->x, T1_Enemy_bullet2->y);
T1_E_bulletpodMoving(T1_Enemy_bullet, T1_Enemy_bullet2);
}
}
void View::delete_T1_E_bullet(QGraphicsItem *bullet_1, QGraphicsItem *bullet_2){
foreach(Type1_EnemyBullet *b, e1_Bullets){
if(b == bullet_1){
mainScene.removeItem(b);
delete bullet_1;
e1_Bullets.removeOne(b);
T1_Enemy_bullet->y = 0;
}
}
foreach(Type1_EnemyBullet *b, e1_Bullets){
if(b == bullet_2){
mainScene.removeItem(b);
delete bullet_2;
e1_Bullets.removeOne(b);
T1_Enemy_bullet->y = 0;
}
}
}
View.h :
#pragma once
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QObject>
#include "player.h"
#include "type1_enemy.h"
#include "reload_virus.h"
#include "p_laserbullet.h"
#include "type1_enemybullet.h"
class View :public QGraphicsView
{
public:
View();
void view_elements();
QList<reload_Virus*> Viruses;
QList<QGraphicsItem*> p_Bullets;
QList<Type1_EnemyBullet*> e1_Bullets;
void viruspodMoving(QGraphicsItem *virus);
void delete_reload_Virus(QGraphicsItem *virus);
void delete_player_bullet(QGraphicsItem *bullet1,QGraphicsItem *bullet2);
void p_bulletpodMoving(QGraphicsItem *bullet_1, QGraphicsItem *bullet_2);
void delete_T1_E_bullet(QGraphicsItem *bullet_1, QGraphicsItem *bullet_2);
void T1_E_bulletpodMoving(QGraphicsItem *bullet_1, QGraphicsItem *bullet_2);
reload_Virus *r_vir;
Player pl;
Type1_Enemy *Type1_Enemy_res;
public slots:
void addVirus();
void virusMov();
void p_bulletMov();
void T1_E_BulletMov();
void PlayerAttack();
void Type1_EnemyAttack();
void addType1Enemy();
private:
QGraphicsScene mainScene;
p_LaserBullet *player_bullet;
p_LaserBullet *player_bullet2;
Type1_EnemyBullet *T1_Enemy_bullet;
Type1_EnemyBullet *T1_Enemy_bullet2;
View *view;
QTimer *startGame; // Начало игры
QTimer *create_reload_Virus;
QTimer *reload_virusmove;
QTimer *player_bulletmove;
QTimer *T1_Enemy_bulletmove;
QTimer *T1_Enemy_Attack;
QTimer *create_type1_enemy;
};