我在看这个系列= https://www.youtube.com/watch?v=2NVgHrOFneg 由于某种原因,视频中的人可以使用代码,但对我来说它编译得很好,但不会加载图像。我真的不知道该怎么办。
#include "SDL.h"
#include <iostream>
#include "SDL_image.h"
SDL_Texture *LoadTexture(std::string filePath, SDL_Renderer *renderTarget) //texture optimization function
{
SDL_Texture *texture = nullptr;
SDL_Surface *surface = IMG_Load(filePath.c_str());
if (surface == NULL)
std::cout << "Error 1" << std::endl;
else
{
texture = SDL_CreateTextureFromSurface(renderTarget, surface);
if (texture == NULL)
std::cout << "Error 2" << std::endl;
}
SDL_FreeSurface(surface);
return texture;
}
int main(int, char *argv[])
{
const int FPS = 144;
int frameTime = 0;
SDL_Window *window = nullptr;
SDL_Texture *currentImage= nullptr;
SDL_Renderer *renderTarget = nullptr;
SDL_Rect playerRect;
int frameWidth, frameHeight;
int textureWidth, textureHeight;
SDL_Init(SDL_INIT_VIDEO );
int imgFlags = IMG_INIT_PNG | IMG_INIT_JPG;
if (!(IMG_Init(imgFlags) != imgFlags))
{
std::cout << "Error: " << IMG_GetError() << std::endl;
}
window = SDL_CreateWindow("SDL Pong", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1024, 720, SDL_WINDOW_SHOWN);
renderTarget = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
currentImage = LoadTexture("Untitled.jpg", renderTarget);
SDL_QueryTexture(currentImage, NULL, NULL, &textureWidth, &textureHeight);
SDL_SetRenderDrawColor(renderTarget, 0xFF, 0, 0, 0xFF);
frameWidth = textureWidth / 3;
frameHeight = textureHeight / 4;
playerRect.x = playerRect.y = 0;
playerRect.y = frameWidth;
playerRect.h = frameHeight;
bool isRunning = true; //game loop
SDL_Event ev;
while (isRunning)
{
while (SDL_PollEvent(&ev) != 0)
{
if (ev.type == SDL_QUIT)
isRunning = false;
}
frameTime++;
if (FPS / frameTime == 4)
{
frameTime = 0;
playerRect.x += frameWidth;
if (playerRect.x >= textureWidth)
playerRect.x =0;
}
SDL_RenderClear(renderTarget);
SDL_RenderCopy(renderTarget, currentImage, &playerRect, NULL);
SDL_RenderPresent(renderTarget);
}
SDL_DestroyWindow(window);
SDL_DestroyTexture(currentImage);
SDL_DestroyRenderer(renderTarget);
window = nullptr;
renderTarget = nullptr;
currentImage = nullptr;
SDL_Quit();
return 0;
}
这是错误消息:http://imgur.com/LHMdt5F
答案 0 :(得分:0)
(我没有足够的声誉对您的主要帖子发表评论,所以我只是在这里发帖:)
下载SDL_image时,您会获得多个.dll&#39;(http://i.imgur.com/tT9yxUW.png)。
由于您收到了特定错误,我认为您没有将libjpeg dll删除到您的目录中。
我相当肯定SDL_image需要那些读取这些特定文件类型。
答案 1 :(得分:0)
IMG_Init
返回已初始化的格式的位域。如果结果位域不包含flags
中请求的每种格式,则会出错。
if (!(IMG_Init(imgFlags) != imgFlags))
检查是否存在否错误。然后,您尝试收到错误消息,但没有错误。删除否定运算符。
答案 2 :(得分:0)
当您创建.exe并从IDE运行它时,它通常将可执行文件存储在../bin/ ..目录中。如果Untitled.jpg与源文件位于同一目录中,则无法找到它。
SDL_GetBasePath();将返回您的文件的基本路径。看看它的文档。
来自SDL_GetBasePath()+“Untitled.jpg”的字符串将找到并打开该文件。