【发布时间】:2015-10-19 09:14:03
【问题描述】:
我在使用 SDL_Texture 时遇到问题
RPGTutorial.cpp
#include "stdafx.h"
int main(int argc, char *argv[])
{
bool quit = false;
SDL_Init(SDL_INIT_VIDEO);
SDL_Window* window = NULL;
window = SDL_CreateWindow("RPG Tutorial!", 100, 100, 600, 400, SDL_WINDOW_SHOWN);
if (window == NULL)
{
std::cout << "Window couldn't be created" << std::endl;
return 0;
}
SDL_Renderer* renderer = NULL;
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (renderer == NULL)
{
std::cout << "Renderer is not being created!" << std::endl;
SDL_DestroyWindow(window);
system("PAUSE");
return 0;
}
SDL_Event* mainEvent = new SDL_Event();
SDL_Texture* grass = NULL;
grass = IMG_LoadTexture(renderer, "Grass.bmp");
if (grass == NULL)
{
std::cout << "Grass Image was not found!" << std::endl;
SDL_DestroyWindow(window);
SDL_DestroyRenderer(renderer);
delete mainEvent;
system("PAUSE");
return 0;
}
SDL_Rect grass_rect;
grass_rect.x = 0;
grass_rect.y = 0;
grass_rect.w = 64 * 2;
grass_rect.h = 64 * 2;
while (!quit && mainEvent->type != SDL_QUIT)
{
SDL_PollEvent(mainEvent);
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, grass, NULL, &grass_rect);
SDL_RenderPresent(renderer);
}
SDL_DestroyWindow(window);
SDL_DestroyRenderer(renderer);
delete mainEvent;
return 0;
}
stdafx.h
#include <SDL.h>
#include <SDL_image.h>
#include <SDL_mixer.h>
#include <iostream>
我在 RPGTutorial->RPGTutorial->Grass.bmp 中有 Grass.bmp 当我编译它时,它是成功的。它运行代码,直到我到达它检查 if(grass == NULL) 的部分,然后它通过它并退出。当我将图像放在 .cpp 文件所在的同一文件夹中时,有人可以帮我知道为什么我的草没有设置为图像吗?我什至尝试添加一个 Image 文件夹来保存它,但它也不起作用。
【问题讨论】:
-
嘿嘿,这取决于您的环境-有些会将当前工作目录设置为exe的位置,有些会将其设置为项目文件。如果您使用的 code::blocks 应该是正确的。您可以通过将路径设置为绝对路径(如
c:\users\you\programming\....blahblah)来测试机制 -
我正在使用 Visual Studio 2013。如果我将文件发送给其他人以便他们测试我所做的, (c:\users\you\programming\....blahblah) 会起作用吗?
-
否定的,如果你分发你的应用程序,你会想要使用相对文件名。您可以使用
getcwd()函数找到您当前的工作目录。然后把你的资源放在那里。分发 exe 时,请将资源放在同一文件夹(或子文件夹)中。 -
我尝试使用 getcwd() 函数,但我似乎不知道如何找到它。是否有我需要添加的包含?
-
是的,当然有。 Check This MSDN Page