#c #sdl #sdl-image
Вопрос:
Вещи, которые я пробовал:
- Переустановка libpng и zlib
- Переустановка SDL_image-dev и всех других библиотек SDL2
- Повторный импорт библиотеки SDL_image.a
- Изменил все параметры компоновщика и по-прежнему ничего
- Изменил каталоги поиска
Ничего не получалось, я все еще здесь, выясняю это…
Код настроек компоновщика::Блоки
-lSDL2 -lSDL2main -lSDL2_image
Link Libraries: /usr/local/lib/libSDL2_image.a /usr/local/lib/libBox2D.a
Search Directories: /usr/include/SDL2
Фрагмент кода, который выдает мне ошибку:
int flags1=IMG_INIT_JPG|IMG_INIT_PNG;
int initted=IMG_Init(flags1);
if((inittedamp;flags1) != flags1) {
printf("IMG_Init: Failed to init required jpg and png support!n");
printf("IMG_Init: %sn", IMG_GetError());
// handle error
}
//SDL_Surface* tmpSurface = SDL_LoadBMP("ball.bmp");
SDL_Surface* tmpSurface = IMG_Load("ball.png");
std::cout<<IMG_GetError()<<"n";
std::cout<<"Errors above for image"<<"n";
ballspr = SDL_CreateTextureFromSurface(renderer,tmpSurface);
SDL_FreeSurface(tmpSurface);
Полный код Game.cpp:
#include "Game.hpp"
SDL_Texture* ballspr;
Game::Game()
{}
Game::~Game()
{}
void Game::init(const char *title, int xpos, int ypos,int width, int height, bool fullscreen)
{
if(SDL_Init(SDL_INIT_EVERYTHING) == 0)
{
int flags=0;
if(fullscreen)
{
flags = SDL_WINDOW_FULLSCREEN;
}
std::cout<<"SDL2 Lib initialised correctly...n";
window = SDL_CreateWindow(title,xpos,ypos,width,height,flags);
if(window)
{
std::cout<<"SDL Window initialised correctly...n";
}
renderer = SDL_CreateRenderer(window,-1,0);
if(renderer)
{
SDL_SetRenderDrawColor(renderer, 36,36,36,255);
std::cout<<"SDL Renderer initialized correctly...n";
}
int flags1=IMG_INIT_JPG|IMG_INIT_PNG;
int initted=IMG_Init(flags1);
if((inittedamp;flags1) != flags1) {
printf("IMG_Init: Failed to init required jpg and png support!n");
printf("IMG_Init: %sn", IMG_GetError());
// handle error
}
//SDL_Surface* tmpSurface = SDL_LoadBMP("ball.bmp");
SDL_Surface* tmpSurface = IMG_Load("ball.png");
std::cout<<IMG_GetError()<<"n";
std::cout<<"Errors above for image"<<"n";
ballspr = SDL_CreateTextureFromSurface(renderer,tmpSurface);
SDL_FreeSurface(tmpSurface);
isRunning=true;
} else {
isRunning=false;
}
}
void Game::handleEvent()
{
SDL_Event event;
SDL_PollEvent(amp;event);
switch(event.type) {
case SDL_QUIT:
isRunning = false;
break;
default:
break;
}
}
void Game::update()
{}
void Game::render()
{
SDL_Rect rect;
rect.x = 100; //Extreme left of the window
rect.y = 100; //Very bottom of the window
rect.w = 100; //100 pixels width
rect.h = 100; //100 pixels height
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, ballspr, NULL, amp;rect);
SDL_RenderPresent(renderer);
}
void Game::clean()
{
SDL_DestroyWindow(window);
SDL_DestroyRenderer(renderer);
SDL_Quit();
std::cout << "Game Cleaned!n";
}
Full code of Game.hpp
#ifndef Game_hpp
#define Game_hpp
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <iostream>
//#include <Box2D/Box2D.h>
class Game
{
public:
Game();
~Game();
void init(const char *title, int xpos, int ypos, int width, int height, bool fullscreen);
void handleEvent(); // handle all the events like movement and so on
void update(); // update screen
void render(); // render scene
void clean();
bool running() { return isRunning; } // Is game running?
private:
bool isRunning;
SDL_Window *window;
SDL_Renderer *renderer;
};
#endif /* Game_hpp */
Полный код Main.cpp
#include "Game.hpp"
Game *game = nullptr;
int main(int argc, char *argv[]){ //Setting up main game function
game = new Game();
game->init("MazeGame (powered by NeedleEngine 2D)", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 500 , 500, false);
while (game->running())
{
game->handleEvent();
game->update();
game->render();
}
game->clean();
return 0; //Exit main()
}
Я попытался удалить SDL2/ в include, но все равно ничего.
В настоящее время работает последняя версия Linux Mint
Комментарии:
1. В каком каталоге вы запускаете программу ? Есть
ball.png
в этом каталоге ? Допустимо ли изображение, например, является ли оно png ?2. Итак, проверка гласит: Не удалось инициализировать требуемую поддержку png и jpg. Изображения в формате PNG не поддерживаются. Проблема остается той же самой, хотя.
3. Почему бы не попробовать другие форматы, такие как jpg, gif или даже bmp ?
4. Импорт bmp по умолчанию работает,но мне нужна прозрачность, так как на заднем плане будет шарик. По-прежнему jpg не работает
5. Вероятно, вам необходимо установить библиотеку PNG dev перед настройкой библиотеки изображений SDL и ее переустановкой