我不知道';我不知道如何用SDL2管理我的班级结构 我尝试用SDL-2创建一些C++的“类流氓”游戏。为此,我遵循Lazy foo的教程来了解如何使用SDL

我不知道';我不知道如何用SDL2管理我的班级结构 我尝试用SDL-2创建一些C++的“类流氓”游戏。为此,我遵循Lazy foo的教程来了解如何使用SDL,c++,sdl-2,roguelike,C++,Sdl 2,Roguelike,我已经学习C++/C#3年了,但现在我学习项目管理,没有更多的IT课程 下面是代码的github: 我创建了两个类:LTexture来帮助管理图片的加载和渲染,以及Glyph来管理图片的动画/缩放和定位 现在,我想创建一个实体类,由一个Glyph对象组成,我将用它来表示一堵墙、一个怪物、一个物品等等。。。但是,我想如果我这样做,我会使用太多的内存 也许我应该通过初始化Glyph指针数组并将其与实体的对象关联来使用聚合。。。我不知道,我迷路了 你能帮我吗?还有,您有什么提示或建议可以帮助我正确构建

我已经学习C++/C#3年了,但现在我学习项目管理,没有更多的IT课程

下面是代码的github:

我创建了两个类:
LTexture
来帮助管理图片的加载和渲染,以及
Glyph
来管理图片的动画/缩放和定位

现在,我想创建一个实体类,由一个
Glyph
对象组成,我将用它来表示一堵墙、一个怪物、一个物品等等。。。但是,我想如果我这样做,我会使用太多的内存

也许我应该通过初始化Glyph指针数组并将其与实体的对象关联来使用聚合。。。我不知道,我迷路了


你能帮我吗?还有,您有什么提示或建议可以帮助我正确构建结构吗?

实际上,您的问题可以在不直接参考SDL的情况下得到回答,任何库(如sfml)都可能出现相同的问题,解决方案都是一样的: 答案是单例设计模式 既然你的性格,我为什么说单身? 我们来谈谈墙砖吧。您可能有数千块甚至更多的墙砖 所有的都有相同的纹理,你真的想在每面墙上一次又一次地加载它吗?不。它是相同的纹理,您希望每个给定纹理都有一个实例,甚至更多:如果您使用包含所有内容的sprite工作表或有3个工作表,则可以节省资源:这里是sfml中的一个示例,但SDL中的想法应该是相同的。

下面是一个sfml实现,但其背后的思想应该清晰且易于实现:

class Resources {
 sf::Clock m_clock; //holds clock
 sf::Texture m_soma,m_lvl,m_enemies; //holds hero,lvl &enemies textures respectively
 sf::Font m_font; //holds game font
 Resources();
public:

 ~Resources() {}
 Resources(const Resources &) = delete;
 Resources& operator=(const Resources &) = delete;


 static Resources& instance();
 sf::Texture& texture();
 sf::Texture& lvlTexture();
 sf::Texture& Enemies();
 sf::Clock& clock();
 sf::Font & Font();
};
cpp文件:注意,我可以使用一个向量而不是3个纹理

Resources::Resources()
{
  //loading textures(hero,lvls,enemies)
   if (!m_soma.loadFromFile("..\\resources\\sprites\\soma.png"))
   {
       std::cerr << "problem loading texture\n";
       throw ResourceExceptions("couldn't load player sprites!: must have    ..\\resources\\sprites\\soma.png");
   }

   if (!m_lvl.loadFromFile("..\\resources\\sprites\\lv.png"))
   {
    std::cerr << "problem loading texture\n";
    throw ResourceExceptions("couldn't load level sprites!: must have ..\\resources\\sprites\\lv.png");
   }

   if (!m_enemies.loadFromFile("..\\resources\\sprites\\enemies.png"))
   {
       std::cerr << "problem loading texture\n";
       throw ResourceExceptions("couldn't load enemies sprites!: must have ..\\resources\\sprites\\enemies.png");
   }
 //loading font once
   if (!m_font.loadFromFile("..\\resources\\font\\gothic.otf"))
   {
       std::cerr << "problem loading font\n";
       throw ResourceExceptions("couldn't load game Font: must have ..\\resources\\font\\gothic.otf");
   }

 }

 Resources & Resources::instance()
 {
    static Resources resource;
    return resource;
 }

sf::Texture & Resources::texture()
{
    return m_soma;
}

sf::Texture & Resources::lvlTexture()
{
     return m_lvl;
}

sf::Texture & Resources::Enemies()
{
     return m_enemies;
}

sf::Clock & Resources::clock()
{
    return m_clock;
}

sf::Font & Resources::Font()
{
  return m_font;
}
Resources::Resources()
{
//加载纹理(英雄、等级、敌人)
如果(!m_soma.loadFromFile(“..\\resources\\sprites\\soma.png”))
{

看看这本书。你将看到如何为游戏创建和管理类。谢谢!我已经看到有很多关于SDL的编程书,但这本看起来不错!哇,谢谢!我不知道单例模式!这种结构将对我帮助很大!我已经看到切换是一个问题(我讨厌切换,但它让事情更容易开始)…谢谢书中的建议!更多在游戏设计中非常有用的设计模式包括:策略(例如定义各种敌人行为)、状态模式(避免同时跳跃和躲闪或在菜单之间切换)即使是command也能帮到你很多,这些书不一定要从头读到尾,但我建议你这样做,它会通过里程碑式的学习来提高你的编程技能。