【问题标题】:SDL_Texture is not being set未设置 SDL_Texture
【发布时间】: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

标签: c++ sdl sdl-2


【解决方案1】:

如果你有时间,我建议你花点时间浏览一下Lazyfoo tutorials,它们太棒了。他在第二个教程“在屏幕上获取图像”中提到了这个问题。

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

【讨论】:

  • 这对我帮助很大!感谢您的帮助!
  • 没问题,如果这似乎是您问题的解决方案,请随时检查左侧投票按钮下的小检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
  • 2018-07-20
相关资源
最近更新 更多