- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
首先,我知道这个问题已经被问过很多很多次了;我已经阅读了至少五到十种变体,但给出的答案没有一个适用于我的情况。我有这条线:
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/
如果这个问题已经被问到,我深表歉意,但我已经研究了大约一个星期,但在任何地方都找不到答案。 我遇到的问题是,当 SDL_LoadBMP() 成功加载图像时,窗口根本不渲染图像,而是渲染一个全黑的屏幕。
我对 SDL1.2 的经验非常有限,我也在尝试迁移到 SDL2.0。这是一个简单的井字游戏,下面的类在初始化时加载我的图像。我无法准确指出我的问题,但我得到了代码为 -1 的退出,因为它无法加载我的位
我一直在关注 this tutorial ,我已经到了指示我们如何加载和使用位图的地步。这是当前代码: #include "SDL/SDL.h" #include int main (int arg
我在做了一些研究后才开始使用 SDL。我从本教程开始 http://lazyfoo.net/SDL_tutorials/lesson01/index2.php << 使用完全相同的代码和 bmp 图像
首先,我知道这个问题已经被问过很多很多次了;我已经阅读了至少五到十种变体,但给出的答案没有一个适用于我的情况。我有这条线: helloWorld = SDL_LoadBMP("helloworld.b
我正在遵循 LazyFoo 的 SDL2.0 教程,使用 Code::Blocks 16.01。我无法使用 SDL_LoadBMP() 加载图像。 这是我第一次在这里提问。我在 Google 上寻找答
我是一名优秀的程序员,十分优秀!