“收到这个警告”;NSWindow检测到过多的活动窗口计数为101“;在Xcode C++; 我试图用SDL2在C++中与Xcode进行一个游戏。我一直有不同的错误,但这是最新的
[窗口]警告: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“收到这个警告”;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
#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);
}