无法在 macOS 上的 SDL 游戏中加载图像

Can't load image in SDL game on macOS

本文关键字:游戏 加载 图像 SDL 上的 macOS      更新时间:2023-10-16

我正在观看在SDL游戏中添加图像的教程,但作者使用Visual Studio。我在 XCode 上,我不确定在哪里添加资产文件夹。我尝试右键单击应用程序根目录>Add files to "Project">assets文件夹的目标,但窗口中未显示图像。

主.cpp

#include "Game.hpp"
Game *game = nullptr;
int main() {
game = new Game();
game->init("Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, false);
while (game->running()) {
game->handleEvents();
game->update();
game->render();
}
game->clean();
return 0;
}

这是我在函数末尾添加图像的初始化方法:

游戏.cpp

void Game::init(const char *title, int xpos, int ypos, int width, int height, bool fullscreen)
{
int flags = 0;
if (fullscreen) {
flags = SDL_WINDOW_FULLSCREEN;
}
if (SDL_Init(SDL_INIT_EVERYTHING) == 0) {
std::cout << "Subsystems initalized." << std::endl;
window = SDL_CreateWindow(title, xpos, ypos, width, height, fullscreen);
if (window)
{
std::cout << "Window created!" << std::endl;
}
renderer = SDL_CreateRenderer(window, -1, 0);
if (renderer)
{
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
std::cout << "Renderer created!" << std::endl;
}
isRunning = true;
} else {
isRunning = false;
}
SDL_Surface *tempSurface = IMG_Load("assets/player.png");
playerTexture = SDL_CreateTextureFromSurface(renderer, tempSurface);
SDL_FreeSurface(tempSurface);
}

这是渲染方法:

游戏.cpp

void Game::render()
{
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, playerTexture, NULL, NULL);
SDL_RenderPresent(renderer);
}

感谢 Botje 的评论和这个答案的帮助,我解决了这个问题。我必须设置工作目录以指向我的源文件夹。

如果您有同样的问题,请转到Product > Scheme > Edit Scheme... > Options,选中Use custom working directory,单击小文件夹图标并添加源目录。