Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
1分钟22秒后无法加载图像 我用SDL2制作了一个简单的空间侵略者,如C++中的游戏。事情进展得非常顺利。游戏运行良好,直到我注意到SDL在大约1分钟22秒后无法加载我的任何PNG。不管什么原因,它都会停止工作。我花了几个小时试图找到类似的问题,但没有任何运气。(一般来说,我对游戏开发和图形编程都很陌生)_C++_Image_Load_Sdl - Fatal编程技术网

1分钟22秒后无法加载图像 我用SDL2制作了一个简单的空间侵略者,如C++中的游戏。事情进展得非常顺利。游戏运行良好,直到我注意到SDL在大约1分钟22秒后无法加载我的任何PNG。不管什么原因,它都会停止工作。我花了几个小时试图找到类似的问题,但没有任何运气。(一般来说,我对游戏开发和图形编程都很陌生)

1分钟22秒后无法加载图像 我用SDL2制作了一个简单的空间侵略者,如C++中的游戏。事情进展得非常顺利。游戏运行良好,直到我注意到SDL在大约1分钟22秒后无法加载我的任何PNG。不管什么原因,它都会停止工作。我花了几个小时试图找到类似的问题,但没有任何运气。(一般来说,我对游戏开发和图形编程都很陌生),c++,image,load,sdl,C++,Image,Load,Sdl,main.cpp: #include "SpaceInv.h" int main(int argc, char* args[]) { SpaceInv si; si.StartGame(); return 0; } #pragma once #ifndef SPACEINV #define SPACEINV #include <SDL_mixer.h> #include "Ship.h" #include "SpaceContainer.h" #inc

main.cpp:

 #include "SpaceInv.h"


int main(int argc, char* args[]) {
    SpaceInv si;
    si.StartGame();
    return 0;
}
#pragma once
#ifndef SPACEINV
#define SPACEINV
#include <SDL_mixer.h>
#include "Ship.h"
#include "SpaceContainer.h"
#include "ScoreBoard.h"

class SpaceInv {
public:
    SpaceInv();
    ~SpaceInv();
    void StartGame();
    void Close();
    bool Initialize();
    SDL_Texture* LoadTexture(std::string file);
    void generateEnemy();
    void generateAsteroid();
    bool checkCollitions(SDL_Rect& a, SDL_Rect& b);
    int randNum(int min, int max);
private:
    const int SCREEN_WIDTH = 720;
    const int SCREEN_HEIGHT = 480;
    SDL_Window* window = NULL;
    SDL_Surface* screen = NULL;
    SDL_Renderer* renderer = NULL;
    SDL_Texture* background = NULL;
    Ship ship;
    ScoreBoard score;
    int frameWidth, frameHeight;
    int textureWidth, textureHeight;
    SpaceContainer lazers;
    SpaceContainer explosions;
    SpaceContainer enemyLazers;
    SpaceContainer asteroids;
    SpaceContainer enemyShips;  

};

#endif
    #include "SpaceInv.h"
#include "Asteroid.h"
#include <SDL_ttf.h>
#include <random>


SpaceInv::SpaceInv(){
}
SpaceInv::~SpaceInv(){}

void SpaceInv::StartGame() {
    if (!Initialize()) {
        printf("Could not initialize!\n");
        return;
    }

    //load background music
    Mix_Chunk *bgm = Mix_LoadWAV("bgm.wav");
    Mix_Chunk *lazerBeam = Mix_LoadWAV("Lazerbeam.wav");

    if (!bgm) {
        std::cout << "no music found..." << std::endl;
    }
    Mix_PlayChannel(0, bgm, 0);

    if (bgm==NULL) {
        std::cout << "no music found..." << std::endl;
    }

    background = LoadTexture("img.png");
    ship.setSpriteName("ship.png");
    ship.setTexture(renderer);

    score.setTexture(renderer, "Score: 0");


    int points = 0;
    const int FPS = 60;
    int frameTime = 0;

    bool exit = false;


    while (!exit) {

        SDL_Event e;
        while (SDL_PollEvent(&e) != 0) {

            if (e.type == SDL_QUIT || e.key.keysym.sym == SDLK_ESCAPE) {
                exit =  true;
            }

            if (e.type == SDL_KEYDOWN) {


                if (e.key.keysym.sym==SDLK_LEFT){
                    ship.moveX(-1); //std::cout << "left";
                }
                if (e.key.keysym.sym == SDLK_RIGHT){
                    ship.moveX(1); //std::cout << "Right";

                }
                if (e.key.keysym.sym == SDLK_UP){
                    ship.moveY(-1); //std::cout << "UP";
                }
                if (e.key.keysym.sym == SDLK_DOWN){
                    ship.moveY(1); //std::cout << "DOWN";
                }
                if (e.key.keysym.sym == SDLK_SPACE && e.key.repeat==0) {
                    //skapa laser om input = SPACE 
                    SpaceObject lazer("lazer.png", ship.getPos(), 5, 10);
                    lazer.setSpriteName("lazer.png");

                    int x = ship.getPos().x;
                    int y = ship.getPos().y - 20;

                    lazer.setPos(x , y);
                    lazer.setTexture(renderer);
                    lazers.pushBack(lazer);
                    Mix_PlayChannel(1, lazerBeam, 0);
                    //std::cout << "SPACE";
                }
            }

        }

        frameTime++;
        if (FPS / frameTime == 4) {
            frameTime = 0;

            //animate ship
            ship.animate();

            //animate lazers
            for (size_t i = 0; i < lazers.size(); i++) {
                lazers.getObject(i).animate();
            }

            //animate asteroids
            for (size_t i = 0; i < asteroids.size(); i++) {
                asteroids.getObject(i).animate();
            }

            //animate enemy lazers
            for (size_t i = 0; i < enemyLazers.size(); i++) {
                enemyLazers.getObject(i).animate();
            }

            //animate enemy ships
            for (size_t i = 0; i < enemyShips.size(); i++) {
                enemyShips.getObject(i).animate();
            }

            //animate explosions
            for (size_t i = 0; i < explosions.size(); i++){
                explosions.getObject(i).animate();
            }

        }

        //random generate asteroids
        if (randNum(1, 100) >= 99) {
            generateAsteroid();
        }
        //random generate enemy ships
        if (randNum(-200, 200) >= 199) {
            generateEnemy();
        }

        //make enemy ships fire at random
        for (size_t i = 0; i < enemyShips.size(); i++){
            if (randNum(0, 200) >= 199) {
                SpaceObject enemyLazer("lazer.png", enemyShips.getObject(i).getPos(), 5, -10);
                enemyLazer.setSpriteName("lazer.png");
                enemyLazer.setTexture(renderer);
                enemyLazers.pushBack(enemyLazer);
                Mix_PlayChannel(i+2, lazerBeam, 0);
            }
        }
        //clear the renderer
        SDL_RenderClear(renderer);

        //render ship and background image
        SDL_RenderCopy(renderer, background, NULL, NULL);
        SDL_RenderCopy(renderer, ship.getTexture(), &ship.getRect(), &ship.getPos());

        //rendrer scoreboard
        SDL_RenderCopy(renderer, score.getTexture(), NULL, &score.getPos());

        //uppdate and render lazers
        for (size_t i = 0; i < lazers.size(); i++) {

            lazers.getObject(i).moveY();
            SDL_RenderCopy(renderer, lazers.getObject(i).getTexture(), &lazers.getObject(i).getRect(),
                &lazers.getObject(i).getPos());
        }

        //uppdate and render asteroids
        for (size_t i = 0; i < asteroids.size(); i++) {
            asteroids.getObject(i).moveY();
            SDL_RenderCopy(renderer, asteroids.getObject(i).getTexture(), &asteroids.getObject(i).getRect(),
                &asteroids.getObject(i).getPos());
        }

        //uppdate and render enemy lazers
        for (size_t i = 0; i < enemyLazers.size(); i++) {
            enemyLazers.getObject(i).moveY();
            SDL_RenderCopy(renderer, enemyLazers.getObject(i).getTexture(), &enemyLazers.getObject(i).getRect(),
                &enemyLazers.getObject(i).getPos());
        }

        //uppdate and render enemy ships
        for (size_t i = 0; i < enemyShips.size(); i++) {
            enemyShips.getObject(i).moveY();
            SDL_RenderCopy(renderer, enemyShips.getObject(i).getTexture(), &enemyShips.getObject(i).getRect(),
                &enemyShips.getObject(i).getPos());
        }

        //render explosions
        for (size_t i = 0; i < explosions.size(); i++) {

            SDL_RenderCopy(renderer, explosions.getObject(i).getTexture(), &explosions.getObject(i).getRect(),
                &explosions.getObject(i).getPos());
        }

        //look for collisions between lazers and enemy ships
        for (size_t i = 0; i < lazers.size(); i++) {

            for (size_t j = 0; j < enemyShips.size(); j++) {
                if (checkCollitions(lazers.getObject(i).getPos(), enemyShips.getObject(j).getPos())) {

                    //std::cout << "collision!!" << std::endl;
                    lazers.getObject(i).setTimeToLive(0);
                    enemyShips.getObject(j).setTimeToLive(0);

                    SpaceObject explosion("explosion.png", enemyShips.getObject(j).getPos(), 1, 0);
                    explosion.setSpriteName("explosion.png");
                    //lazer.setPos(ship.getPos());
                    explosion.setTexture(renderer);
                    explosions.pushBack(explosion);

                    points += 10;
                }
            }
        }

        ////look for collisions between lazers and asteroids
        for (size_t i = 0; i < lazers.size(); i++) {

            for (size_t j = 0; j < asteroids.size(); j++) {
                if (checkCollitions(lazers.getObject(i).getPos(), asteroids.getObject(j).getPos())) {

                    //std::cout << "collision!!" << std::endl;
                    lazers.getObject(i).setTimeToLive(0);
                    asteroids.getObject(j).setTimeToLive(0);

                    SpaceObject explosion("explosion.png", asteroids.getObject(j).getPos(), 1, 0);
                    explosion.setSpriteName("explosion.png");
                    //lazer.setPos(ship.getPos());
                    explosion.setTexture(renderer);
                    explosions.pushBack(explosion);

                    points += 2;
                }
            }
        }
        ////look for collisions between ship and asteroids
        for (size_t i = 0; i < asteroids.size(); i++) {

            if (checkCollitions(ship.getPos(), asteroids.getObject(i).getPos())) {

                //exit = true;

            }
        }

        ////look for collisions between ship and enemy lazers
        for (size_t i = 0; i < enemyLazers.size(); i++) {

            if (checkCollitions(ship.getPos(), enemyLazers.getObject(i).getPos())) {

                //exit = true;

            }
        }

        //check the lifetime of every object on the screen.
        enemyShips.checkLifetime();
        enemyLazers.checkLifetime();
        asteroids.checkLifetime();
        lazers.checkLifetime();
        explosions.checkLifetime();

        //update score
        score.setTexture(renderer, "Score: " + std::to_string(points));

        SDL_RenderPresent(renderer);

    }
    Close();

    return;
}

bool SpaceInv::Initialize() {
    if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO)) {
        printf("SDL could not be initialized! SDL Error %s\n", SDL_GetError);
        return false;
    }
    window = SDL_CreateWindow("Super Space Wars Extreme",
        SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
        SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);

    if (window == NULL) {
        printf("Window could not be created! SDL Error %s\n", SDL_GetError);
        return false;
    }
    //screen = SDL_GetWindowSurface(window);
    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    if (renderer == NULL) {
        printf("Not able to create renderer! SDL Error %s\n", SDL_GetError);
        return false;
    }

    SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);

    int imgFlags = IMG_INIT_PNG;
    if (!IMG_Init(imgFlags & imgFlags)) {

        printf("SDL_image could not be initialized! SDL_image Error %s\n", IMG_GetError);
        return false;
    }

    if (TTF_Init() == -1)
    {
        std::cout << "Init TTF  failt : " << SDL_GetError() << std::endl;
        return false;
    }

    /*if (Mix_Init() == -1) {
        std::cout << "Audio Error : " << Mix_GetError() << std::endl;
    }*/

    if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 2048) < 0){
        std::cout << "Audio Error : " << Mix_GetError() << std::endl;
    }

    return true;

}
SDL_Texture* SpaceInv::LoadTexture(std::string file) {

    SDL_Texture* newTexture = NULL;
    SDL_Surface* loadedSurface = IMG_Load(file.c_str());
    if (loadedSurface == NULL) {
        printf("Unable to load image! SDL_image Error %s\n", file.c_str(), IMG_GetError);
    }
    else {
        newTexture = SDL_CreateTextureFromSurface(renderer, loadedSurface);
        if (newTexture == NULL) {
            printf("Unable to create the texture from %s! SDL_image Error %s\n", SDL_GetError);

            SDL_FreeSurface(loadedSurface);
        }
    }
    return newTexture;

}

void SpaceInv::generateAsteroid() {
    SpaceObject asteroid(20, -randNum(1,5));  //TODO kolla livslängd
    asteroid.setSpriteName("asteroid.png");

    asteroid.setTexture(renderer);

    asteroid.setPos(randNum(0, SCREEN_WIDTH) , -200);
    asteroid.makeEnemy();
    asteroid.changeSpriteSize(8, 8, 128);

    asteroids.pushBack(asteroid);
}

void SpaceInv::generateEnemy() {
    SpaceObject enemy(20, -2);  //TODO kolla livslängd
    enemy.setSpriteName("enemyship.png");

    enemy.setTexture(renderer);

    enemy.setPos(randNum(0, SCREEN_WIDTH), -200);
    enemy.makeEnemy();


    enemyShips.pushBack(enemy);
}

int SpaceInv::randNum(int min, int max) {
    int output = min + (rand() % static_cast<int>(max - min + 1));

    return output;
}


bool SpaceInv::checkCollitions(SDL_Rect& a, SDL_Rect& b) {
    //The sides of the rectangles
    int leftA, leftB;
    int rightA, rightB;
    int topA, topB;
    int bottomA, bottomB;

    leftA = a.x;
    rightA = a.x + a.w;
    topA = a.y;
    bottomA = a.y + a.h;

    leftB = b.x;
    rightB = b.x + b.w;
    topB = b.y;
    bottomB = b.y + b.h;
    if (bottomA <= topB) {
        return false;
    }

    if (topA >= bottomB) {
        return false;
    }

    if (rightA <= leftB) {
        return false;
    }

    if (leftA >= rightB) {
        return false;
    }

    //If none of the sides from A are outside B
    return true;
}

void SpaceInv::Close() {
    SDL_DestroyWindow(window);
    window = NULL;

    Mix_Quit();
    SDL_Quit();
}
SpaceInv.h:

 #include "SpaceInv.h"


int main(int argc, char* args[]) {
    SpaceInv si;
    si.StartGame();
    return 0;
}
#pragma once
#ifndef SPACEINV
#define SPACEINV
#include <SDL_mixer.h>
#include "Ship.h"
#include "SpaceContainer.h"
#include "ScoreBoard.h"

class SpaceInv {
public:
    SpaceInv();
    ~SpaceInv();
    void StartGame();
    void Close();
    bool Initialize();
    SDL_Texture* LoadTexture(std::string file);
    void generateEnemy();
    void generateAsteroid();
    bool checkCollitions(SDL_Rect& a, SDL_Rect& b);
    int randNum(int min, int max);
private:
    const int SCREEN_WIDTH = 720;
    const int SCREEN_HEIGHT = 480;
    SDL_Window* window = NULL;
    SDL_Surface* screen = NULL;
    SDL_Renderer* renderer = NULL;
    SDL_Texture* background = NULL;
    Ship ship;
    ScoreBoard score;
    int frameWidth, frameHeight;
    int textureWidth, textureHeight;
    SpaceContainer lazers;
    SpaceContainer explosions;
    SpaceContainer enemyLazers;
    SpaceContainer asteroids;
    SpaceContainer enemyShips;  

};

#endif
    #include "SpaceInv.h"
#include "Asteroid.h"
#include <SDL_ttf.h>
#include <random>


SpaceInv::SpaceInv(){
}
SpaceInv::~SpaceInv(){}

void SpaceInv::StartGame() {
    if (!Initialize()) {
        printf("Could not initialize!\n");
        return;
    }

    //load background music
    Mix_Chunk *bgm = Mix_LoadWAV("bgm.wav");
    Mix_Chunk *lazerBeam = Mix_LoadWAV("Lazerbeam.wav");

    if (!bgm) {
        std::cout << "no music found..." << std::endl;
    }
    Mix_PlayChannel(0, bgm, 0);

    if (bgm==NULL) {
        std::cout << "no music found..." << std::endl;
    }

    background = LoadTexture("img.png");
    ship.setSpriteName("ship.png");
    ship.setTexture(renderer);

    score.setTexture(renderer, "Score: 0");


    int points = 0;
    const int FPS = 60;
    int frameTime = 0;

    bool exit = false;


    while (!exit) {

        SDL_Event e;
        while (SDL_PollEvent(&e) != 0) {

            if (e.type == SDL_QUIT || e.key.keysym.sym == SDLK_ESCAPE) {
                exit =  true;
            }

            if (e.type == SDL_KEYDOWN) {


                if (e.key.keysym.sym==SDLK_LEFT){
                    ship.moveX(-1); //std::cout << "left";
                }
                if (e.key.keysym.sym == SDLK_RIGHT){
                    ship.moveX(1); //std::cout << "Right";

                }
                if (e.key.keysym.sym == SDLK_UP){
                    ship.moveY(-1); //std::cout << "UP";
                }
                if (e.key.keysym.sym == SDLK_DOWN){
                    ship.moveY(1); //std::cout << "DOWN";
                }
                if (e.key.keysym.sym == SDLK_SPACE && e.key.repeat==0) {
                    //skapa laser om input = SPACE 
                    SpaceObject lazer("lazer.png", ship.getPos(), 5, 10);
                    lazer.setSpriteName("lazer.png");

                    int x = ship.getPos().x;
                    int y = ship.getPos().y - 20;

                    lazer.setPos(x , y);
                    lazer.setTexture(renderer);
                    lazers.pushBack(lazer);
                    Mix_PlayChannel(1, lazerBeam, 0);
                    //std::cout << "SPACE";
                }
            }

        }

        frameTime++;
        if (FPS / frameTime == 4) {
            frameTime = 0;

            //animate ship
            ship.animate();

            //animate lazers
            for (size_t i = 0; i < lazers.size(); i++) {
                lazers.getObject(i).animate();
            }

            //animate asteroids
            for (size_t i = 0; i < asteroids.size(); i++) {
                asteroids.getObject(i).animate();
            }

            //animate enemy lazers
            for (size_t i = 0; i < enemyLazers.size(); i++) {
                enemyLazers.getObject(i).animate();
            }

            //animate enemy ships
            for (size_t i = 0; i < enemyShips.size(); i++) {
                enemyShips.getObject(i).animate();
            }

            //animate explosions
            for (size_t i = 0; i < explosions.size(); i++){
                explosions.getObject(i).animate();
            }

        }

        //random generate asteroids
        if (randNum(1, 100) >= 99) {
            generateAsteroid();
        }
        //random generate enemy ships
        if (randNum(-200, 200) >= 199) {
            generateEnemy();
        }

        //make enemy ships fire at random
        for (size_t i = 0; i < enemyShips.size(); i++){
            if (randNum(0, 200) >= 199) {
                SpaceObject enemyLazer("lazer.png", enemyShips.getObject(i).getPos(), 5, -10);
                enemyLazer.setSpriteName("lazer.png");
                enemyLazer.setTexture(renderer);
                enemyLazers.pushBack(enemyLazer);
                Mix_PlayChannel(i+2, lazerBeam, 0);
            }
        }
        //clear the renderer
        SDL_RenderClear(renderer);

        //render ship and background image
        SDL_RenderCopy(renderer, background, NULL, NULL);
        SDL_RenderCopy(renderer, ship.getTexture(), &ship.getRect(), &ship.getPos());

        //rendrer scoreboard
        SDL_RenderCopy(renderer, score.getTexture(), NULL, &score.getPos());

        //uppdate and render lazers
        for (size_t i = 0; i < lazers.size(); i++) {

            lazers.getObject(i).moveY();
            SDL_RenderCopy(renderer, lazers.getObject(i).getTexture(), &lazers.getObject(i).getRect(),
                &lazers.getObject(i).getPos());
        }

        //uppdate and render asteroids
        for (size_t i = 0; i < asteroids.size(); i++) {
            asteroids.getObject(i).moveY();
            SDL_RenderCopy(renderer, asteroids.getObject(i).getTexture(), &asteroids.getObject(i).getRect(),
                &asteroids.getObject(i).getPos());
        }

        //uppdate and render enemy lazers
        for (size_t i = 0; i < enemyLazers.size(); i++) {
            enemyLazers.getObject(i).moveY();
            SDL_RenderCopy(renderer, enemyLazers.getObject(i).getTexture(), &enemyLazers.getObject(i).getRect(),
                &enemyLazers.getObject(i).getPos());
        }

        //uppdate and render enemy ships
        for (size_t i = 0; i < enemyShips.size(); i++) {
            enemyShips.getObject(i).moveY();
            SDL_RenderCopy(renderer, enemyShips.getObject(i).getTexture(), &enemyShips.getObject(i).getRect(),
                &enemyShips.getObject(i).getPos());
        }

        //render explosions
        for (size_t i = 0; i < explosions.size(); i++) {

            SDL_RenderCopy(renderer, explosions.getObject(i).getTexture(), &explosions.getObject(i).getRect(),
                &explosions.getObject(i).getPos());
        }

        //look for collisions between lazers and enemy ships
        for (size_t i = 0; i < lazers.size(); i++) {

            for (size_t j = 0; j < enemyShips.size(); j++) {
                if (checkCollitions(lazers.getObject(i).getPos(), enemyShips.getObject(j).getPos())) {

                    //std::cout << "collision!!" << std::endl;
                    lazers.getObject(i).setTimeToLive(0);
                    enemyShips.getObject(j).setTimeToLive(0);

                    SpaceObject explosion("explosion.png", enemyShips.getObject(j).getPos(), 1, 0);
                    explosion.setSpriteName("explosion.png");
                    //lazer.setPos(ship.getPos());
                    explosion.setTexture(renderer);
                    explosions.pushBack(explosion);

                    points += 10;
                }
            }
        }

        ////look for collisions between lazers and asteroids
        for (size_t i = 0; i < lazers.size(); i++) {

            for (size_t j = 0; j < asteroids.size(); j++) {
                if (checkCollitions(lazers.getObject(i).getPos(), asteroids.getObject(j).getPos())) {

                    //std::cout << "collision!!" << std::endl;
                    lazers.getObject(i).setTimeToLive(0);
                    asteroids.getObject(j).setTimeToLive(0);

                    SpaceObject explosion("explosion.png", asteroids.getObject(j).getPos(), 1, 0);
                    explosion.setSpriteName("explosion.png");
                    //lazer.setPos(ship.getPos());
                    explosion.setTexture(renderer);
                    explosions.pushBack(explosion);

                    points += 2;
                }
            }
        }
        ////look for collisions between ship and asteroids
        for (size_t i = 0; i < asteroids.size(); i++) {

            if (checkCollitions(ship.getPos(), asteroids.getObject(i).getPos())) {

                //exit = true;

            }
        }

        ////look for collisions between ship and enemy lazers
        for (size_t i = 0; i < enemyLazers.size(); i++) {

            if (checkCollitions(ship.getPos(), enemyLazers.getObject(i).getPos())) {

                //exit = true;

            }
        }

        //check the lifetime of every object on the screen.
        enemyShips.checkLifetime();
        enemyLazers.checkLifetime();
        asteroids.checkLifetime();
        lazers.checkLifetime();
        explosions.checkLifetime();

        //update score
        score.setTexture(renderer, "Score: " + std::to_string(points));

        SDL_RenderPresent(renderer);

    }
    Close();

    return;
}

bool SpaceInv::Initialize() {
    if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO)) {
        printf("SDL could not be initialized! SDL Error %s\n", SDL_GetError);
        return false;
    }
    window = SDL_CreateWindow("Super Space Wars Extreme",
        SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
        SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);

    if (window == NULL) {
        printf("Window could not be created! SDL Error %s\n", SDL_GetError);
        return false;
    }
    //screen = SDL_GetWindowSurface(window);
    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    if (renderer == NULL) {
        printf("Not able to create renderer! SDL Error %s\n", SDL_GetError);
        return false;
    }

    SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);

    int imgFlags = IMG_INIT_PNG;
    if (!IMG_Init(imgFlags & imgFlags)) {

        printf("SDL_image could not be initialized! SDL_image Error %s\n", IMG_GetError);
        return false;
    }

    if (TTF_Init() == -1)
    {
        std::cout << "Init TTF  failt : " << SDL_GetError() << std::endl;
        return false;
    }

    /*if (Mix_Init() == -1) {
        std::cout << "Audio Error : " << Mix_GetError() << std::endl;
    }*/

    if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 2048) < 0){
        std::cout << "Audio Error : " << Mix_GetError() << std::endl;
    }

    return true;

}
SDL_Texture* SpaceInv::LoadTexture(std::string file) {

    SDL_Texture* newTexture = NULL;
    SDL_Surface* loadedSurface = IMG_Load(file.c_str());
    if (loadedSurface == NULL) {
        printf("Unable to load image! SDL_image Error %s\n", file.c_str(), IMG_GetError);
    }
    else {
        newTexture = SDL_CreateTextureFromSurface(renderer, loadedSurface);
        if (newTexture == NULL) {
            printf("Unable to create the texture from %s! SDL_image Error %s\n", SDL_GetError);

            SDL_FreeSurface(loadedSurface);
        }
    }
    return newTexture;

}

void SpaceInv::generateAsteroid() {
    SpaceObject asteroid(20, -randNum(1,5));  //TODO kolla livslängd
    asteroid.setSpriteName("asteroid.png");

    asteroid.setTexture(renderer);

    asteroid.setPos(randNum(0, SCREEN_WIDTH) , -200);
    asteroid.makeEnemy();
    asteroid.changeSpriteSize(8, 8, 128);

    asteroids.pushBack(asteroid);
}

void SpaceInv::generateEnemy() {
    SpaceObject enemy(20, -2);  //TODO kolla livslängd
    enemy.setSpriteName("enemyship.png");

    enemy.setTexture(renderer);

    enemy.setPos(randNum(0, SCREEN_WIDTH), -200);
    enemy.makeEnemy();


    enemyShips.pushBack(enemy);
}

int SpaceInv::randNum(int min, int max) {
    int output = min + (rand() % static_cast<int>(max - min + 1));

    return output;
}


bool SpaceInv::checkCollitions(SDL_Rect& a, SDL_Rect& b) {
    //The sides of the rectangles
    int leftA, leftB;
    int rightA, rightB;
    int topA, topB;
    int bottomA, bottomB;

    leftA = a.x;
    rightA = a.x + a.w;
    topA = a.y;
    bottomA = a.y + a.h;

    leftB = b.x;
    rightB = b.x + b.w;
    topB = b.y;
    bottomB = b.y + b.h;
    if (bottomA <= topB) {
        return false;
    }

    if (topA >= bottomB) {
        return false;
    }

    if (rightA <= leftB) {
        return false;
    }

    if (leftA >= rightB) {
        return false;
    }

    //If none of the sides from A are outside B
    return true;
}

void SpaceInv::Close() {
    SDL_DestroyWindow(window);
    window = NULL;

    Mix_Quit();
    SDL_Quit();
}
#pragma一次
#ifndef SPACEINV
#定义SPACEINV
#包括
#包括“Ship.h”
#包括“SpaceContainer.h”
#包括“ScoreBoard.h”
类SpaceInv{
公众:
SpaceInv();
~SpaceInv();
void StartGame();
无效关闭();
bool初始化();
SDL_纹理*加载纹理(std::字符串文件);
void generateEnemy();
void generateroid();
布尔检查碰撞(SDL纠正与a、SDL纠正与b);
int randNum(int min,int max);
私人:
屏幕宽度=720;
屏幕上的常数=480;
SDL_Window*Window=NULL;
SDL_表面*屏幕=空;
SDL_渲染器*渲染器=NULL;
SDL_纹理*背景=空;
船舶;
记分牌得分;
int frameWidth,frameHeight;
int-textureWidth,textureHeight;
太空容器激光器;
空间容器爆炸;
太空集装箱电子激光器;
太空容器小行星;
太空容器敌人;
};
#恩迪夫
SpaceInv.cpp:

 #include "SpaceInv.h"


int main(int argc, char* args[]) {
    SpaceInv si;
    si.StartGame();
    return 0;
}
#pragma once
#ifndef SPACEINV
#define SPACEINV
#include <SDL_mixer.h>
#include "Ship.h"
#include "SpaceContainer.h"
#include "ScoreBoard.h"

class SpaceInv {
public:
    SpaceInv();
    ~SpaceInv();
    void StartGame();
    void Close();
    bool Initialize();
    SDL_Texture* LoadTexture(std::string file);
    void generateEnemy();
    void generateAsteroid();
    bool checkCollitions(SDL_Rect& a, SDL_Rect& b);
    int randNum(int min, int max);
private:
    const int SCREEN_WIDTH = 720;
    const int SCREEN_HEIGHT = 480;
    SDL_Window* window = NULL;
    SDL_Surface* screen = NULL;
    SDL_Renderer* renderer = NULL;
    SDL_Texture* background = NULL;
    Ship ship;
    ScoreBoard score;
    int frameWidth, frameHeight;
    int textureWidth, textureHeight;
    SpaceContainer lazers;
    SpaceContainer explosions;
    SpaceContainer enemyLazers;
    SpaceContainer asteroids;
    SpaceContainer enemyShips;  

};

#endif
    #include "SpaceInv.h"
#include "Asteroid.h"
#include <SDL_ttf.h>
#include <random>


SpaceInv::SpaceInv(){
}
SpaceInv::~SpaceInv(){}

void SpaceInv::StartGame() {
    if (!Initialize()) {
        printf("Could not initialize!\n");
        return;
    }

    //load background music
    Mix_Chunk *bgm = Mix_LoadWAV("bgm.wav");
    Mix_Chunk *lazerBeam = Mix_LoadWAV("Lazerbeam.wav");

    if (!bgm) {
        std::cout << "no music found..." << std::endl;
    }
    Mix_PlayChannel(0, bgm, 0);

    if (bgm==NULL) {
        std::cout << "no music found..." << std::endl;
    }

    background = LoadTexture("img.png");
    ship.setSpriteName("ship.png");
    ship.setTexture(renderer);

    score.setTexture(renderer, "Score: 0");


    int points = 0;
    const int FPS = 60;
    int frameTime = 0;

    bool exit = false;


    while (!exit) {

        SDL_Event e;
        while (SDL_PollEvent(&e) != 0) {

            if (e.type == SDL_QUIT || e.key.keysym.sym == SDLK_ESCAPE) {
                exit =  true;
            }

            if (e.type == SDL_KEYDOWN) {


                if (e.key.keysym.sym==SDLK_LEFT){
                    ship.moveX(-1); //std::cout << "left";
                }
                if (e.key.keysym.sym == SDLK_RIGHT){
                    ship.moveX(1); //std::cout << "Right";

                }
                if (e.key.keysym.sym == SDLK_UP){
                    ship.moveY(-1); //std::cout << "UP";
                }
                if (e.key.keysym.sym == SDLK_DOWN){
                    ship.moveY(1); //std::cout << "DOWN";
                }
                if (e.key.keysym.sym == SDLK_SPACE && e.key.repeat==0) {
                    //skapa laser om input = SPACE 
                    SpaceObject lazer("lazer.png", ship.getPos(), 5, 10);
                    lazer.setSpriteName("lazer.png");

                    int x = ship.getPos().x;
                    int y = ship.getPos().y - 20;

                    lazer.setPos(x , y);
                    lazer.setTexture(renderer);
                    lazers.pushBack(lazer);
                    Mix_PlayChannel(1, lazerBeam, 0);
                    //std::cout << "SPACE";
                }
            }

        }

        frameTime++;
        if (FPS / frameTime == 4) {
            frameTime = 0;

            //animate ship
            ship.animate();

            //animate lazers
            for (size_t i = 0; i < lazers.size(); i++) {
                lazers.getObject(i).animate();
            }

            //animate asteroids
            for (size_t i = 0; i < asteroids.size(); i++) {
                asteroids.getObject(i).animate();
            }

            //animate enemy lazers
            for (size_t i = 0; i < enemyLazers.size(); i++) {
                enemyLazers.getObject(i).animate();
            }

            //animate enemy ships
            for (size_t i = 0; i < enemyShips.size(); i++) {
                enemyShips.getObject(i).animate();
            }

            //animate explosions
            for (size_t i = 0; i < explosions.size(); i++){
                explosions.getObject(i).animate();
            }

        }

        //random generate asteroids
        if (randNum(1, 100) >= 99) {
            generateAsteroid();
        }
        //random generate enemy ships
        if (randNum(-200, 200) >= 199) {
            generateEnemy();
        }

        //make enemy ships fire at random
        for (size_t i = 0; i < enemyShips.size(); i++){
            if (randNum(0, 200) >= 199) {
                SpaceObject enemyLazer("lazer.png", enemyShips.getObject(i).getPos(), 5, -10);
                enemyLazer.setSpriteName("lazer.png");
                enemyLazer.setTexture(renderer);
                enemyLazers.pushBack(enemyLazer);
                Mix_PlayChannel(i+2, lazerBeam, 0);
            }
        }
        //clear the renderer
        SDL_RenderClear(renderer);

        //render ship and background image
        SDL_RenderCopy(renderer, background, NULL, NULL);
        SDL_RenderCopy(renderer, ship.getTexture(), &ship.getRect(), &ship.getPos());

        //rendrer scoreboard
        SDL_RenderCopy(renderer, score.getTexture(), NULL, &score.getPos());

        //uppdate and render lazers
        for (size_t i = 0; i < lazers.size(); i++) {

            lazers.getObject(i).moveY();
            SDL_RenderCopy(renderer, lazers.getObject(i).getTexture(), &lazers.getObject(i).getRect(),
                &lazers.getObject(i).getPos());
        }

        //uppdate and render asteroids
        for (size_t i = 0; i < asteroids.size(); i++) {
            asteroids.getObject(i).moveY();
            SDL_RenderCopy(renderer, asteroids.getObject(i).getTexture(), &asteroids.getObject(i).getRect(),
                &asteroids.getObject(i).getPos());
        }

        //uppdate and render enemy lazers
        for (size_t i = 0; i < enemyLazers.size(); i++) {
            enemyLazers.getObject(i).moveY();
            SDL_RenderCopy(renderer, enemyLazers.getObject(i).getTexture(), &enemyLazers.getObject(i).getRect(),
                &enemyLazers.getObject(i).getPos());
        }

        //uppdate and render enemy ships
        for (size_t i = 0; i < enemyShips.size(); i++) {
            enemyShips.getObject(i).moveY();
            SDL_RenderCopy(renderer, enemyShips.getObject(i).getTexture(), &enemyShips.getObject(i).getRect(),
                &enemyShips.getObject(i).getPos());
        }

        //render explosions
        for (size_t i = 0; i < explosions.size(); i++) {

            SDL_RenderCopy(renderer, explosions.getObject(i).getTexture(), &explosions.getObject(i).getRect(),
                &explosions.getObject(i).getPos());
        }

        //look for collisions between lazers and enemy ships
        for (size_t i = 0; i < lazers.size(); i++) {

            for (size_t j = 0; j < enemyShips.size(); j++) {
                if (checkCollitions(lazers.getObject(i).getPos(), enemyShips.getObject(j).getPos())) {

                    //std::cout << "collision!!" << std::endl;
                    lazers.getObject(i).setTimeToLive(0);
                    enemyShips.getObject(j).setTimeToLive(0);

                    SpaceObject explosion("explosion.png", enemyShips.getObject(j).getPos(), 1, 0);
                    explosion.setSpriteName("explosion.png");
                    //lazer.setPos(ship.getPos());
                    explosion.setTexture(renderer);
                    explosions.pushBack(explosion);

                    points += 10;
                }
            }
        }

        ////look for collisions between lazers and asteroids
        for (size_t i = 0; i < lazers.size(); i++) {

            for (size_t j = 0; j < asteroids.size(); j++) {
                if (checkCollitions(lazers.getObject(i).getPos(), asteroids.getObject(j).getPos())) {

                    //std::cout << "collision!!" << std::endl;
                    lazers.getObject(i).setTimeToLive(0);
                    asteroids.getObject(j).setTimeToLive(0);

                    SpaceObject explosion("explosion.png", asteroids.getObject(j).getPos(), 1, 0);
                    explosion.setSpriteName("explosion.png");
                    //lazer.setPos(ship.getPos());
                    explosion.setTexture(renderer);
                    explosions.pushBack(explosion);

                    points += 2;
                }
            }
        }
        ////look for collisions between ship and asteroids
        for (size_t i = 0; i < asteroids.size(); i++) {

            if (checkCollitions(ship.getPos(), asteroids.getObject(i).getPos())) {

                //exit = true;

            }
        }

        ////look for collisions between ship and enemy lazers
        for (size_t i = 0; i < enemyLazers.size(); i++) {

            if (checkCollitions(ship.getPos(), enemyLazers.getObject(i).getPos())) {

                //exit = true;

            }
        }

        //check the lifetime of every object on the screen.
        enemyShips.checkLifetime();
        enemyLazers.checkLifetime();
        asteroids.checkLifetime();
        lazers.checkLifetime();
        explosions.checkLifetime();

        //update score
        score.setTexture(renderer, "Score: " + std::to_string(points));

        SDL_RenderPresent(renderer);

    }
    Close();

    return;
}

bool SpaceInv::Initialize() {
    if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO)) {
        printf("SDL could not be initialized! SDL Error %s\n", SDL_GetError);
        return false;
    }
    window = SDL_CreateWindow("Super Space Wars Extreme",
        SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
        SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);

    if (window == NULL) {
        printf("Window could not be created! SDL Error %s\n", SDL_GetError);
        return false;
    }
    //screen = SDL_GetWindowSurface(window);
    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    if (renderer == NULL) {
        printf("Not able to create renderer! SDL Error %s\n", SDL_GetError);
        return false;
    }

    SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);

    int imgFlags = IMG_INIT_PNG;
    if (!IMG_Init(imgFlags & imgFlags)) {

        printf("SDL_image could not be initialized! SDL_image Error %s\n", IMG_GetError);
        return false;
    }

    if (TTF_Init() == -1)
    {
        std::cout << "Init TTF  failt : " << SDL_GetError() << std::endl;
        return false;
    }

    /*if (Mix_Init() == -1) {
        std::cout << "Audio Error : " << Mix_GetError() << std::endl;
    }*/

    if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 2048) < 0){
        std::cout << "Audio Error : " << Mix_GetError() << std::endl;
    }

    return true;

}
SDL_Texture* SpaceInv::LoadTexture(std::string file) {

    SDL_Texture* newTexture = NULL;
    SDL_Surface* loadedSurface = IMG_Load(file.c_str());
    if (loadedSurface == NULL) {
        printf("Unable to load image! SDL_image Error %s\n", file.c_str(), IMG_GetError);
    }
    else {
        newTexture = SDL_CreateTextureFromSurface(renderer, loadedSurface);
        if (newTexture == NULL) {
            printf("Unable to create the texture from %s! SDL_image Error %s\n", SDL_GetError);

            SDL_FreeSurface(loadedSurface);
        }
    }
    return newTexture;

}

void SpaceInv::generateAsteroid() {
    SpaceObject asteroid(20, -randNum(1,5));  //TODO kolla livslängd
    asteroid.setSpriteName("asteroid.png");

    asteroid.setTexture(renderer);

    asteroid.setPos(randNum(0, SCREEN_WIDTH) , -200);
    asteroid.makeEnemy();
    asteroid.changeSpriteSize(8, 8, 128);

    asteroids.pushBack(asteroid);
}

void SpaceInv::generateEnemy() {
    SpaceObject enemy(20, -2);  //TODO kolla livslängd
    enemy.setSpriteName("enemyship.png");

    enemy.setTexture(renderer);

    enemy.setPos(randNum(0, SCREEN_WIDTH), -200);
    enemy.makeEnemy();


    enemyShips.pushBack(enemy);
}

int SpaceInv::randNum(int min, int max) {
    int output = min + (rand() % static_cast<int>(max - min + 1));

    return output;
}


bool SpaceInv::checkCollitions(SDL_Rect& a, SDL_Rect& b) {
    //The sides of the rectangles
    int leftA, leftB;
    int rightA, rightB;
    int topA, topB;
    int bottomA, bottomB;

    leftA = a.x;
    rightA = a.x + a.w;
    topA = a.y;
    bottomA = a.y + a.h;

    leftB = b.x;
    rightB = b.x + b.w;
    topB = b.y;
    bottomB = b.y + b.h;
    if (bottomA <= topB) {
        return false;
    }

    if (topA >= bottomB) {
        return false;
    }

    if (rightA <= leftB) {
        return false;
    }

    if (leftA >= rightB) {
        return false;
    }

    //If none of the sides from A are outside B
    return true;
}

void SpaceInv::Close() {
    SDL_DestroyWindow(window);
    window = NULL;

    Mix_Quit();
    SDL_Quit();
}
#包括“SpaceInv.h”
#包括“小行星h”
#包括
#包括
SpaceInv::SpaceInv(){
}
SpaceInv::~SpaceInv(){}
void SpaceInv::StartGame(){
如果(!Initialize()){
printf(“无法初始化!\n”);
返回;
}
//加载背景音乐
Mix_Chunk*bgm=Mix_LoadWAV(“bgm.wav”);
Mix_Chunk*lazerBeam=Mix_LoadWAV(“lazerBeam.wav”);
如果(!bgm){

std::cout多亏了nwp 3的评论,我解决了它!问题确实是我的程序需要太多的资源。通过调用“SDL_DestroyTexture(SDL_Texture*Texture)”,在我的SpaceContainer类中,每次空间对象被销毁时,问题都得到了解决

SpaceContainer.cpp

 #include "SpaceObject.h"
    #include <iostream>

SpaceObject::SpaceObject(){}

SpaceObject::SpaceObject(double t, int sp):timeToLive(t), speed(sp) {
    start = std::clock();
    enemy = false;
}

SpaceObject::SpaceObject(std::string s, SDL_Rect startPos, double t, int sp) : spriteName(s), timeToLive(t), pos(startPos), speed(sp) {
    //pos.y = pos.y - 27;
    start = std::clock();
    enemy = false;
}
SDL_Rect* SpaceObject::getRectP() {
    return &sprite;
}
void SpaceObject::makeEnemy() {

    enemy = true;
}
void SpaceObject::changeSpriteSize(int a, int b, int c){
    frameWidth = textureWidth / a;
    frameHeight = textureHeight / b;
    sprite.w = frameWidth;
    sprite.h = frameHeight;

    sprite.h = sprite.w = c;
}
bool SpaceObject::isEnemy() {
    //enemy = false;
    ////std::cout.setf(std::ios::boolalpha);
    ////std::cout << enemy << std::endl;
    return enemy;
}
void SpaceObject::setTimeToLive(int i) {
    timeToLive = i;
}
void SpaceObject::setPos(int x, int y) {
    pos.x = x;
    pos.y = y;
}

SDL_Rect SpaceObject::getPos() {
    //pos.y = pos.y - 5;
    return pos;
}

double SpaceObject::getTimeToLive() { return timeToLive; }
std::string SpaceObject::getSpriteName() { return spriteName; }

void SpaceObject::setSpriteName(std::string s) {
    spriteName = s;
}



void SpaceObject::setTexture(SDL_Renderer* &renderer) {
    ////std::cout << spriteName << std::endl;
    SDL_Texture* newTexture = NULL;
    SDL_Surface* loadedSurface = IMG_Load(spriteName.c_str());
    if (loadedSurface == NULL) {
        printf("Unable to load image! SDL_image Error %s\n", spriteName.c_str(), IMG_GetError);
    }
    else {
        newTexture = SDL_CreateTextureFromSurface(renderer, loadedSurface);
        if (newTexture == NULL) {
            printf("Unable to create the texture from %s! SDL_image Error %s\n", SDL_GetError);

            SDL_FreeSurface(loadedSurface);
        }
    }
    texture = newTexture;
    SDL_QueryTexture(texture, NULL, NULL, &textureWidth, &textureHeight);

    frameWidth = textureWidth /2;
    frameHeight = textureHeight /2;
    //sprite.x = 0;
    //sprite.y = 0;
    sprite.w = frameWidth;
    sprite.h = frameHeight;

    pos.w = pos.h = 64;



}

SDL_Rect SpaceObject::getRect() {
    return sprite;
}

void SpaceObject::animate() {
    sprite.x += frameWidth;

    if (sprite.x >= textureWidth) {

        sprite.x = 0;
        sprite.y += frameHeight;

        if (sprite.y >= textureWidth) {
            sprite.y = 0;
        }
    }
}



void SpaceObject::moveY() {
    pos.y = pos.y - speed;
}


double SpaceObject::getDuration() {
    duration = (std::clock() - start) / (double)CLOCKS_PER_SEC;
    return duration;
}
SDL_Texture*& SpaceObject::getTexture() { return texture; }
SpaceObject::~SpaceObject() { ////std::cout << "Rymdobjekt borttaget" << std::endl; 
}
#include "Ship.h"
//#include "Lazer.h"
Ship::Ship(){}

Ship::Ship(std::string s):spriteName(s){}


std::string Ship::getSpriteName() { return spriteName; }

void Ship::setSpriteName(std::string s) {
    spriteName = s;
}

SDL_Texture*& Ship::getTexture(){ return texture; }

void Ship::setTexture(SDL_Renderer* &renderer) {

    SDL_Texture* newTexture = NULL;
    SDL_Surface* loadedSurface = IMG_Load(spriteName.c_str());
    if (loadedSurface == NULL) {
        printf("Unable to load image! SDL_image Error %s\n", spriteName.c_str(), IMG_GetError);
    }
    else {
        newTexture = SDL_CreateTextureFromSurface(renderer, loadedSurface);
        if (newTexture == NULL) {
            printf("Unable to create the texture from %s! SDL_image Error %s\n", SDL_GetError);

            SDL_FreeSurface(loadedSurface);
        }
    }
    texture = newTexture;

    SDL_QueryTexture(texture, NULL, NULL, &textureWidth, &textureHeight);


    pos.w = pos.h = 64;
    pos.x = 340;
    pos.y = 255;

    frameWidth = 192 / 2;
    frameHeight = 192 / 2;
    sprite.x = 0;
    sprite.y = 0;
    sprite.w = frameWidth;
    sprite.h = frameHeight;
}

SDL_Rect Ship::getRect() {
    return sprite;
}

SDL_Rect Ship::getPos() {
    return pos;
}

void Ship::moveX(int speed){
    if ((pos.x <= 0 && speed<0) || (pos.x >= SCREEN_WIDTH && speed>0)) {
        //std:://std:://std::cout << "/n";
        return;
    }
    pos.x = pos.x +speed*(SCREEN_WIDTH/20);
}

void Ship::moveY(int speed) {
    if ((pos.y <= 0 && speed<0) || (pos.y >= SCREEN_HEIGHT && speed>0)) {
        return;
    }
    pos.y = pos.y + speed*(SCREEN_WIDTH / 20);
}

void Ship::animate() {
    sprite.x += frameWidth;

    if (sprite.x >= textureWidth) {

        sprite.x = 0;
        sprite.y += frameHeight;

        if (sprite.y >= textureWidth) {
            sprite.y = 0;
        }
    }
}
/*
SDL_Texture*& Ship::fire(int speed, SDL_Rect start, SDL_Renderer* &renderer) {
    Lazer lazer("lazer.png", start);
    lazer.setTexture(renderer);
    return lazer.getTexture();

}*/

Ship::~Ship() {}
#include "SpaceContainer.h"

SpaceContainer::SpaceContainer(){}

void SpaceContainer::checkLifetime(){
    if (vec.empty()) {
        return;
    }
    for (size_t i = 0; i < vec.size(); i++)
        {
            ////std::cout << vec[i].getDuration() << std::endl;
            if (vec[i].getDuration() >= vec[i].getTimeToLive()) {
                vec.erase(vec.begin() + i);
            //  delete &vec[i];
                ////std::cout << "Object destroyed " << std::endl;
            }
        }
}

void SpaceContainer::popAt(int i) {
    vec.erase(vec.begin() + i);
}

void SpaceContainer::pushBack(SpaceObject o) {
    vec.push_back(o);
}

SpaceObject& SpaceContainer::getObject(int i) {
    return vec.at(i);
}
std::vector<SpaceObject>& SpaceContainer::getVec() {
    return vec;
}


size_t SpaceContainer::size(){
    return vec.size();
}

SpaceContainer::~SpaceContainer(){}
#include "ScoreBoard.h"
#include <SDL_ttf.h>
#include <SDL_mixer.h>
ScoreBoard::ScoreBoard(){}

SDL_Texture*& ScoreBoard::getTexture() { return texture; }

SDL_Rect ScoreBoard::getRect() {
    return sprite;
}

SDL_Rect ScoreBoard::getPos() {
    return pos;
}

void ScoreBoard::setTexture(SDL_Renderer* &renderer, std::string mes) {
    TTF_Font* Sans = TTF_OpenFont("FreeSansBold.ttf", 24); 
    SDL_Color White = { 255, 255, 255 };  

    if (!Sans) {
        std::cout << "font not found..." << std::endl;
        return;
    }


    const char * c = mes.c_str();
    SDL_Surface* surfaceMessage = TTF_RenderText_Solid(Sans, c, White);

    texture = SDL_CreateTextureFromSurface(renderer, surfaceMessage);

    pos.w = 128;
    pos.h = 64;
    pos.x = 15;
    pos.y = 5;

}

ScoreBoard::~ScoreBoard(){};
#include "SpaceContainer.h"

SpaceContainer::SpaceContainer(){}

void SpaceContainer::checkLifetime(){
    if (vec.empty()) {
        return;
    }
    for (size_t i = 0; i < vec.size(); i++)
        {
            if (vec[i].getDuration() >= vec[i].getTimeToLive()) {

                //here was the issue!!
                SDL_DestroyTexture(vec[i].getTexture());
                vec.erase(vec.begin() + i);

            }
        }
}

void SpaceContainer::popAt(int i) {
    vec.erase(vec.begin() + i);
}

void SpaceContainer::pushBack(SpaceObject o) {
    vec.push_back(o);
}

SpaceObject& SpaceContainer::getObject(int i) {
    return vec.at(i);
}
std::vector<SpaceObject>& SpaceContainer::getVec() {
    return vec;
}


size_t SpaceContainer::size(){
    return vec.size();
}

SpaceContainer::~SpaceContainer(){}
#包括“SpaceContainer.h”
SpaceContainer::SpaceContainer(){}
void SpaceContainer::checklifety(){
if(vec.empty()){
返回;
}
对于(size_t i=0;i=vec[i].getTimeOlive()){
//问题就在这里!!
SDL_销毁纹理(vec[i].getTexture());
向量擦除(向量开始()+i);
}
}
}
void SpaceContainer::popAt(int i){
向量擦除(向量开始()+i);
}
void SpaceContainer::推回(SpaceObject o){
向量推回(o);
}
SpaceObject和SpaceContainer::getObject(int i){
返回向量(i);
}
std::vector和SpaceContainer::getVec(){
返回向量;
}
size\u t SpaceContainer::size(){
返回向量大小();
}
SpaceContainer::~SpaceContainer(){}

您可能正在泄漏资源,例如打开文件而不关闭文件,或在不释放文件的情况下加载每帧纹理。最终,操作系统不会让您拥有更多资源。请尝试创建一个漏洞,以提高有人正确阅读代码的机会。谢谢!我对此进行了调查!问题是..我不知道问题的原因,所以我我想我需要发布整个项目!