目前,我正在使用C++环境开发非常基础的游戏。游戏曾经是学校的项目,但是现在我完成了编程类的学习,所以我想扩展自己的技能,并在这个旧任务上多做点事情。

我已经做了很多令我满意的更改。我已经将所有数据集中到文件夹层次结构中,并且已经获得了读取这些位置的代码。

但是,我的问题源于一个非常根本的缺陷,一直困扰着我。

为了访问我正在使用的图像数据,我使用了以下代码:

string imageLocation = "..\\DATA\\Images\\";

string bowImage = imageLocation + "bow.png";

问题是,当玩家在游戏板上捡起一个物品时,我的代码应该使用该代码:
hud.addLine("You picked up a " + (*itt)->name() + "!");

打印到命令行“您捡起弓!”。而是显示“您选择了.. \ DATA \ Images \!”。

在集中数据之前,我曾经使用过:
name_(item_name.substr(0, item_name.find('.')))

在我的Item类构造函数中,将项目名称砍成弓或蜡烛之类的名称。在更改了数据的结构之后,我意识到我必须更改将名称切成相同的简单“弓”或“蜡烛”的方式。

我已经更改了上面的代码以反射(reflect)我对数据结构的更改是:
name_(item_name.substr(item_name.find("..\\DATA\\Images\\"), item_name.find(".png")))

但是不幸的是,正如我之前提到的那样,这种代码更改无法按我的计划进行。

因此,既然我已经对我的问题进行了冗长的介绍,这就是我的问题。

如何提取不需要的两个部分之间的字符串中间?而且,作为目标的中间部分的长度未知。

非常感谢你们提供的任何帮助。如果您需要更多信息,请询问;我很乐意上传部分甚至全部代码以获得更多帮助。再次非常感谢您。

最佳答案

坦白地说,您可能是从错误的 Angular 来解决这个问题。

您的项目类的私有(private)成员中应具有字符串“bow”。函数Item::GetFilePath然后(在运行时)执行“.. \ DATA \ Images \” + this-> name +“.png”。

“bow”项对象的基本属性不是文件名bow.png,而是“bow”这一事实。文件名只是一个派生属性。

07-28 04:13