《SDL Game Developer》中的示例程序的问题:使用书中给的singleton方法写TextureManager类,但画不出图

youhou4333 2015-12-21 01:33:26
书中给出的代码如下:

上面是类代码,下面给出实现代码:


我在测试的时候发现无法读出书中代码给出的精灵表
我的TextureManager的头文件如下:

#include<iostream>
#include<string>
#include<SDL.h>
#include<SDL_image.h>
#include<map>
using namespace std;


#ifndef THISISOURMANAGER
#define THISISOURMANAGER

class TextureManager
{
public:
bool load(string fileName, string id, SDL_Renderer* pRenderer);

void drawFrame(string id, int x, int y, int w, int h, int currentFrame,
int currentRow, SDL_Renderer* pRenderer, SDL_RendererFlip flip = SDL_FLIP_NONE);

void draw(string id, int x, int y, int w, int h, SDL_Renderer* pRenderer, SDL_RendererFlip flip = SDL_FLIP_NONE);

static TextureManager* Instance();

private:
map<string, SDL_Texture*> m_textureMap;
TextureManager(){}
static TextureManager* s_pInstance;
};

#endif

我的Instance函数定义如下:

TextureManager* TextureManager::Instance()
{
if(s_pInstance == 0)
{
s_pInstance = new TextureManager();
return s_pInstance;
}
return s_pInstance;
}

我的s_pInstance变量也已经在类外初始化过。
我的调用Instance函数的方法是这样的:

if(!TextureManager::Instance()->load("assets/animate.png","animate",m_pRenderer))
{
return false;
}
TextureManager::Instance()->draw("animate",0,0,128,82,m_pRenderer);

最终我的屏幕上应该有一个画在屏幕左上角,宽128像素,高82像素的"animate.png"图,但最后的结果是这样的:

原谅我的背景是鲜红色,因为书里有个测试把背景做成了鲜红色,我还没有改。

之后我也调试过,产生了这样的错误:

我不知道这个错误是如何产生的,还有为什么画不出我想要的图片。请大家解答一下。谢谢。
...全文
57 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-12-21
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧