2015-10-18 64 views
0

我有麻烦与SDL_TextureSDL_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> 

我有Grass.bmp在RPGTutorial-> RPGTutorial - > Grass.bmp 当我编译它时,它是成功的。它贯穿代码,直到我检查它是否检查(草== NULL)并通过它并退出的部分。有人可以帮助我知道为什么我的草没有被设置为图像时,我有图像在.cpp文件所在的同一文件夹中?我甚至尝试添加一个图像文件夹来保存它,但它也没有工作。

+0

Heya,这取决于您的环境 - 有些将设置当前的工作目录到exe的位置,有些会将它设置为项目文件。如果您使用的是正确的code :: blocks。您可以通过将路径设置为绝对路径来测试机制(如'c:\ users \ you \ programming \ .... blahblah') – wizebin

+0

我正在使用Visual Studio 2013.将(c:\ users \ you \编程\ .... blahblah)工作,如果我把文件发送给别人,所以他们会测试我做了什么? –

+0

否定的,如果您要分发应用程序,则需要使用相对文件名。您可以使用'getcwd()'函数找到您当前的工作目录。然后把你的资源放在那里。当您分发您的exe文件时,请将这些资源放在同一个文件夹(或一个子文件夹)中。 – wizebin

回答

1

如果你有时间,我建议你花一些时间去通过Lazyfoo tutorials他们太棒了。他在第二个教程“在屏幕上显示图像”中提到了这个问题。

Visual Studio将您当前的工作目录更改为.vcxproj文件所在的位置。这将是您想要放置资源的目录。如果您不确定它的位置,可以使用direct.h头文件中的_getcwd()函数MSDN Source For getcwd

+0

这帮了我很多!谢谢您的帮助! –

+0

没问题,如果这似乎是你的问题的解决方案随时检查在这里左边的投票按钮下的小检查。 – wizebin