“收到这个警告”;NSWindow检测到过多的活动窗口计数为101“;在Xcode C++; 我试图用SDL2在C++中与Xcode进行一个游戏。我一直有不同的错误,但这是最新的

“收到这个警告”;NSWindow检测到过多的活动窗口计数为101“;在Xcode C++; 我试图用SDL2在C++中与Xcode进行一个游戏。我一直有不同的错误,但这是最新的,c++,xcode,nswindow,C++,Xcode,Nswindow,[窗口]警告:NSWindow检测到101个活动窗口计数过多。通过阈值100后创建的类“SDLWindow”的窗口0x5679。此窗口不一定是原因,每个窗口类仅显示一次此警告。( 0应用套件0x00007fff2d5a821c-[NSWindow\u设置窗口编号:][800 1个应用套件0x00007fff2d5d5bbe(带不透明形状2+435的创建窗口) 2应用套件0x00007fff2d5d40b8-[NSWindow\u commonAwake]+1121 3 AppKit 0x0000

[窗口]警告:NSWindow检测到101个活动窗口计数过多。通过阈值100后创建的类“SDLWindow”的窗口0x5679。此窗口不一定是原因,每个窗口类仅显示一次此警告。( 0应用套件0x00007fff2d5a821c-[NSWindow\u设置窗口编号:][800 1个应用套件0x00007fff2d5d5bbe(带不透明形状2+435的创建窗口) 2应用套件0x00007fff2d5d40b8-[NSWindow\u commonAwake]+1121 3 AppKit 0x00007fff2d5a72f8-[NSWindow\u commonInitFrame:styleMask:backing:defer:+800 4 AppKit 0x00007fff2d5a6ae2-[NSWindow\u initContent:styleMask:backing:defer:contentView:+1193 5 AppKit 0x00007fff2d5a6633-[NSWindow initWithContentRect:styleMask:backing:defer:+42 6 AppKit 0x00007fff2d8390d8-[NSWindow initWithContentRect:styleMask:backing:defer:screen:+52 7 SDL2 0x00000001003d9de7 SDL2+237031 8 SDL2 0x000000010043d65a SDL2+644698 9 BTLB 0x00000001000019e9_ZN4Game4initEv+73 10 BTLB 0x0000000100001672干管+82 11 libdyld.dylib 0x00007fff678032e5启动+1 )

这是我的密码

main.cpp

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

Game *game = 0;

int main(int argc, const char * argv[])
{

    game = new Game;

    while(game->init())
    {
        game->run();
    }

    delete game;
    return 0;
}
Game.cpp

#include <stdio.h>
#include <iostream>
#include "Game.h"

Game::Game()
{
    window = 0;
    renderer = 0;
}


bool Game::init()
{
    SDL_Init(SDL_INIT_VIDEO);

    window = SDL_CreateWindow("Big Trouble in Little Birthday", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL);

    if(!window)
    {
        std::cout << "Error creating window:" << SDL_GetError() << std::endl;
        return false;
    }

    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);

    if(!renderer)
    {
        std::cout << "Error creating renderer:" << SDL_GetError() << std::endl;
        return false;
    }

    SDL_Surface* surface = IMG_Load("FILL");
    texture = SDL_CreateTextureFromSurface(renderer, surface);
    SDL_FreeSurface(surface);

    lastTick = SDL_GetTicks();
    fpsTick = lastTick;
    fps = 0;
    frameCount = 0;

    return true;
}

void Game::run()
{
    robin = new Robin(renderer);


    while(running)
    {
        handleEvents();

        unsigned int curTick = SDL_GetTicks();
        float delta = (curTick - lastTick) / 1000.0f;

        if(curTick - fpsTick >= FPS_DELAY)
        {
            fps = frameCount * (1000.0f / (curTick - fpsTick));
            fpsTick = curTick;
            frameCount = 0;
            char buf[100];
            std::snprintf(buf, 100, "Big Trouble in Little Birthday (fps: %u)", fps);

            SDL_SetWindowTitle(window, buf);
        }
        else
        {
            frameCount++;
        }
        lastTick = curTick;

        update(delta);
        render(delta);
    }

    delete robin;

    clean();
    SDL_Quit();

}

void Game::handleEvents()
{
    SDL_Event event;

    if(SDL_PollEvent(&event))
    {
        switch(event.type)
        {
            case SDL_QUIT:
                SDL_Quit();
                break;
            default:
                break;
        }
    }
}

void Game::update(float delta)
{
    robin->update(delta);
}

void Game::render(float delta)
{
    SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);

    SDL_RenderClear(renderer);

    robin->update(delta);

    SDL_RenderPresent(renderer);
}

void Game::clean()
{
    SDL_DestroyWindow(window);
    SDL_DestroyRenderer(renderer);
    SDL_Quit();
}

void Game::NewGame()
{

}
Entity.cpp

#include <stdio.h>
#include "Entity.h"

Entity::Entity(SDL_Renderer* renderer)
{
    this->renderer = renderer;

    x = 0;
    y = 0;
    width = 1;
    height = 1;
}

void Entity::update(float delta)
{

}

void Entity::render(float delta)
{

}

bool Entity::Collides(Entity* other)
{
    if(x + width > other ->x && x < other->x + other->width && y + height > other->y && y < other->y + other->height)
    {
        return true;
    }

    return false;
}
Robin.cpp

#include <stdio.h>

#include "Robin.h"

Robin::Robin(SDL_Renderer* renderer) : Entity(renderer)
{
    SDL_Surface* surface = IMG_Load("/Users/noah/Desktop/BTLB/assets/Robin.png");
    texture = SDL_CreateTextureFromSurface(renderer, surface);
    SDL_FreeSurface(surface);

    width = 16;
    height = 16;

}

Robin::~Robin()
{
    SDL_DestroyTexture(texture);
}

void Robin::update(float delta)
{

}

void Robin::render(float delta)
{
    SDL_Rect rect;
    rect.x = (int)(x + 0.5f);
    rect.y = (int)(y + 0.5f);
    rect.w = width;
    rect.h = height;
    SDL_RenderCopy(renderer, texture, 0, &rect);
}
#包括
#包括“Robin.h”
Robin::Robin(SDL_渲染器*渲染器):实体(渲染器)
{
SDL_Surface*Surface=IMG_Load(“/Users/noah/Desktop/BTLB/assets/Robin.png”);
纹理=SDL_CreateTextureFromSurface(渲染器,曲面);
SDL_自由曲面(曲面);
宽度=16;
高度=16;
}
罗宾::~Robin()
{
SDL_破坏纹理(纹理);
}
void Robin::更新(浮点增量)
{
}
void Robin::渲染(浮点增量)
{
SDL_Rect;
矩形x=(int)(x+0.5f);
矩形y=(int)(y+0.5f);
矩形w=宽度;
矩形h=高度;
SDL_渲染复制(渲染器、纹理、0和矩形);
}

主while循环调用
game->init()
作为循环条件。这是在创建一个新的游戏窗口。那么它应该调用什么呢?所以我将main中的while语句更改为if语句,它修复了错误,但窗口没有弹出
#include <stdio.h>
#include "Entity.h"

Entity::Entity(SDL_Renderer* renderer)
{
    this->renderer = renderer;

    x = 0;
    y = 0;
    width = 1;
    height = 1;
}

void Entity::update(float delta)
{

}

void Entity::render(float delta)
{

}

bool Entity::Collides(Entity* other)
{
    if(x + width > other ->x && x < other->x + other->width && y + height > other->y && y < other->y + other->height)
    {
        return true;
    }

    return false;
}
#ifndef Robin_h
#define Robin_h
#include "Entity.h"

class Robin : public Entity
{
public:
    Robin(SDL_Renderer* renderer);
    ~Robin();

    void update(float delta);
    void render(float delta);

private:
    SDL_Texture* texture;

};
#endif /* Robin_h */
#include <stdio.h>

#include "Robin.h"

Robin::Robin(SDL_Renderer* renderer) : Entity(renderer)
{
    SDL_Surface* surface = IMG_Load("/Users/noah/Desktop/BTLB/assets/Robin.png");
    texture = SDL_CreateTextureFromSurface(renderer, surface);
    SDL_FreeSurface(surface);

    width = 16;
    height = 16;

}

Robin::~Robin()
{
    SDL_DestroyTexture(texture);
}

void Robin::update(float delta)
{

}

void Robin::render(float delta)
{
    SDL_Rect rect;
    rect.x = (int)(x + 0.5f);
    rect.y = (int)(y + 0.5f);
    rect.w = width;
    rect.h = height;
    SDL_RenderCopy(renderer, texture, 0, &rect);
}