Ich bin ein Tutorial auf SDL_net und bin ziemlich verwirrt, warum mein Programm abstürzt. Sie können das Tutorial finden here. Mein Client stürzt ab, nachdem es bei geöffnetem Server ausgeführt wurde.SDL_net kein OpenGL-Kontext wurde gemacht
frage ich mich, was gerade diese Fehlermittel (mit SDLNet_GetError()):
no opengl context has been made
I Kern SDL mit SDL_ttf sind nur abarbeiten und haben keine Ahnung, was das bedeutet. Das Tutorial-Beispiel, dem ich folgte, verwendete OpenGL. Wenn ich also rate, dass der Fehler damit zu tun hat, dass ich ihn nicht verwende? Ich nahm nur an, dass es nur SDL benötigt.
Wenn Sie einen Blick auf den Code möchten, können Sie die client code here finden, und die server code here. Ich werde nicht alles in diese Frage schreiben, da es ziemlich lang ist und mir nur eine einfache Erklärung des Fehlers gut tun würde. Ich möchte nicht nach einer vollständigen Erklärung fragen, was mit meinem Code nicht stimmt.
Okay, so meine Initialisierungscode wird durch einen Screen getan:
#include "ScreenManager.h"
ScreenManager &ScreenManager::GetInstance(){
static ScreenManager instance;
return instance;
}
void ScreenManager::init(){
SDL_Init(SDL_INIT_EVERYTHING);
TTF_Init();
SDLNet_Init();
window = SDL_CreateWindow("Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1920, 1080, SDL_WINDOW_BORDERLESS);
renderer = SDL_CreateRenderer(window, 0, SDL_RENDERER_ACCELERATED);
running = true;
ResourceManager::GetInstance().loadTexture(renderer, "res/Human.bmp", "player");
ResourceManager::GetInstance().loadTexture(renderer, "res/space.bmp", "background");
ResourceManager::GetInstance().loadTexture(renderer, "res/ship.bmp", "ship");
ResourceManager::GetInstance().loadTexture(renderer, "res/interior.bmp", "interior");
SDL_GL_SetSwapInterval(1);
GameManager::GetInstance().init();
currentScreen = new MainScreen();
currentScreen->init();
}
void ScreenManager::close(){
ResourceManager::GetInstance().close();
currentScreen->close();
SDL_DestroyWindow(window);
SDL_DestroyRenderer(renderer);
SDL_Quit();
SDLNet_Quit();
TTF_Quit();
}
void ScreenManager::update(){
currentScreen->update();
}
void ScreenManager::render(){
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
SDL_RenderClear(renderer);
currentScreen->render(renderer);
SDL_RenderPresent(renderer);
}
void ScreenManager::setScreen(GameScreen *screenToSet){
currentScreen->close();
currentScreen = screenToSet;
currentScreen->init();
}
void ScreenManager::handleEvents(){
SDL_Event e;
while(SDL_PollEvent(&e) > 0){
switch(e.type){
case SDL_QUIT:
running = false;
break;
}
}
}
bool ScreenManager::isRunning(){
return running;
}
, die einen Bildschirm ausgeführt wird, ist dies, wenn die Netzwerk-Läufe:
#include "MainScreen.h"
void MainScreen::init(){
Network = new network();
Network->init();
player = new Player((1920/2) - 32, (1080/2) - 32);
background = new Background();
entity_vector.push_back(new Ship(30, 30, 699*4, 444*4, 0, "ship", "interior"));
}
void MainScreen::close(){
Network->close();
for(unsigned i = 0; i < entity_vector.size(); i++){
entity_vector[i]->close();
}
player->close();
}
void MainScreen::update(){
for(unsigned i = 0; i < entity_vector.size(); i++){
entity_vector[i]->update();
}
player->update((1920/2) - 32, (1080/2) - 32);
GameManager::GetInstance().update();
Network->recv(enemies, player);
Network->send(player);
}
void MainScreen::render(SDL_Renderer *renderer){
for(unsigned i = 0; i < entity_vector.size(); i++){
entity_vector[i]->render(renderer);
}
for(unsigned i = 0; i < enemies.size(); i++){
enemies[i]->render(renderer);
}
background->render(renderer);
player->render(renderer);
}
Es wäre hilfreich, wenn Sie angeben könnten, welches Programm abstürzt (Server oder Client?) Und in welcher Zeile. –
Es ist mein Client, meine Frage in einer Bearbeitung behoben. – genfy