gpt4 book ai didi

c++ - 在 Xcode 中使用带有相对路径的 SDL_LoadBMP 有困难

转载 作者:搜寻专家 更新时间:2023-10-31 01:43:45 27 4
gpt4 key购买 nike

首先,我知道这个问题已经被问过很多很多次了;我已经阅读了至少五到十种变体,但给出的答案没有一个适用于我的情况。我有这条线:

helloWorld = SDL_LoadBMP("helloworld.bmp");

在我的 Xcode 5 项目的 main.cpp 文件中。目录结构如下:

TestProject1
main.cpp
Resources
helloworld.bmp
TestProject1.1
TestProject1.xcodeproj

当然,我尝试了不同的路径,即Resources/helloworld.bmp,是的,Resources文件夹被导入到项目中。但是,该语句返回 NULL,因为(根据 SDL_Error)它找不到该文件。现在,行:

helloWorld = SDL_LoadBMP("/fully/qualified/path/to/helloworld.bmp");

工作正常,所以这不是我的代码的问题。让 Xcode 使用资源的相对路径的普遍接受的方法是什么?我正在寻找一种方法,当我做一个更大的项目时,它可以移植(到 SDL 支持的平台,在不同的计算机/设备上),并且如果 Xcode 不能制作可移植的 C++ 项目,我愿意使用不同的 IDE。阅读其他问题后我尝试过的其他杂项:

helloworld.bmp 添加到构建阶段 > 复制文件。

添加代码:

// ----------------------------------------------------------------------------
// This makes relative paths work in C++ in Xcode by changing directory to the Resources folder inside the .app bundle
#ifdef __APPLE__
CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL(mainBundle);
char path[PATH_MAX];
if (!CFURLGetFileSystemRepresentation(resourcesURL, TRUE, (UInt8 *)path, PATH_MAX))
{
// error!
}
CFRelease(resourcesURL);

chdir(path);
std::cout << "Current Path: " << path << std::endl;
#endif
// ----------------------------------------------------------------------------

main.cpp 的开头(在 if (!CFURL...) 行返回“Expected unqualified-id”编译器错误)。

使用绝对路径 - 正如我所说,这可行,但我想要可移植性。

调用getcwd:这是C++代码。我在这里缺少什么吗? getcwd 似乎不是 C++ 函数。

最佳答案

在您的Build Phases 中,您需要创建一个类型为Copy Files 的新构建阶段。

Destination 设置为 'Resources' 并将 Subpath 留空,除非你想在你的资源中有一个子文件夹(当你有很多并且想要分开例如字体,纹理,声音时这很有用等等)

保留仅在安装时复制 未勾选

然后只需将资源添加到该构建阶段,在您的情况下为 helloworld.bmp

然后您应该能够通过执行以下操作来加载:

helloWorld = SDL_LoadBMP("helloworld.bmp");

或者如果您使用了子路径:

helloWorld = SDL_LoadBMP("textures/helloworld.bmp");

这与您可以将 SDL2.framework 与您的应用程序捆绑在一起的方式相同。这里有一个教程 - http://zamma.co.uk/setup-sdl2-in-xcode-osx/在第 3 部分中,它描述了如何捆绑框架(如果您有兴趣的话)。

总的来说,进行完全可移植构建的最佳方式是使用 CMake 或 Gradle。

关于c++ - 在 Xcode 中使用带有相对路径的 SDL_LoadBMP 有困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24619147/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com