制作包含地图或场景信息的文件,例如要加载的资源、对象、位置、事件
Making files with map or scenario information, such as what resources to load, objects, locations, events
我正在用C++制作一个简单的图形引擎,使用Visual C++和DirectX,并测试不同的地图布局
目前,我只需制作一个C++源文件就可以构建"地图",并开始编写:
SHADOWENGINE ShadowEngine(&settings);
SPRITE_SETTINGS sset;
MODEL_SETTINGS mset;
sset.Name = "Sprite1";
sset.Pivot = TOPLEFT;
sset.Source = "sprite1.png";
sset.Type = STATIC;
sset.Movable = true;
sset.SoundSet = "sprite1.wav"
ShadowEngine->Sprites->Load(sset);
sset.Name = "Sprite2"
sset.Source = "sprite2.png";
sset.Parent = "Sprite1";
sset.Type = ANIMATED;
sset.Frames = 16;
sset.Interval = 1000;
sset.Position = D3DXVECTOR(0.0f, (ShadowEngine->Resolution->Height/2), 0.0f);
ShadowEngine->Sprites->Load(sset);
mset.Source = "character.sx";
mset.Collision = false;
mset.Type = DYNAMIC;
ShadowEngine->Models->Load(mset);
//Etc..
我希望能够做的是创建映射文件,这些文件被加载到引擎中,而不必将它们写入可执行文件中。这样,我就可以对地图进行更改,而不必每次都重新编译。
SHADOWENGINE ShadowEngine(&settings);
ShadowEngine->InitializeMap("Map1.sm");
我能想到的唯一方法是让它以文本形式读取文件,然后解析信息,但这听起来很麻烦。
我是不是想错了?我该怎么办?
我不介意解释一下其他人是怎么做的,比如《魔兽争霸III》、《星际争霸》、《帝国时代》、《强权英雄》和《魔法英雄》。。。
非常感谢您在这方面的帮助。
您没有想错,加载地图数据绝对是可取的。最常见的预构建解决方案是协议缓冲区和Lua。如果你还不知道Lua,我会使用协议缓冲区,因为它直接解决了你的问题,而Lua是一种脚本语言,它足够灵活,可以做你需要做的事情。
有些人将数据写成XML,但这只是部分解决方案,因为XML只是一种标记语言。加载XML后,您将有一个DOM树进行解析。
谷歌的CPP Protobuf教程
相关文章:
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- WinAPI C++如何从 64 位应用程序加载资源
- Qt QWebEngineView 不允许加载本地资源
- 为什么Qt资源被加载到Linux而不是Windows中?
- 如何从资源文件(.rc 文件)加载位图?
- 强制资源管理器重新加载注册表值
- QML:设置动画图像源,而不加载资源中的文件
- QWEBENGINEVIEW-从资源加载HTML
- 从电子项目运行的可执行文件未加载资源
- 无法在 SFML 2.4 中加载资源
- 尝试从资源加载位图返回NULL,错误代码为1813
- 有没有办法在不使用GDI+的情况下从我的资源加载.png
- MFC在加载资源时如何确定默认语言ID
- FindResource试图从资源加载字体时返回NULL
- Qt qrc 资源文件 - 无法加载图标
- CEGUI-从DLL加载资源
- Cstring无法从资源加载日语字符串
- 将 PNG 加载代码转换为使用 FILE 而不是本地资源
- 从函数c++ /SFML加载资源的问题
- 改变加载资源的方式