首页 > 解决方案 > 如何在 C++ 中有效地处理游戏的资源对象

问题描述

我正在尝试为我正在进行的性能模拟设置资源系统,并且我正在尝试找出最有效的方法来管理从 1,000 到 10,000 源的游戏内资源生产。

这是一个很难提出的问题,但我会尽我所能澄清,最好的开始方式可能是一个例子,所以我在这里给出一个例子:

一座建筑从多达 10 种不同的资源中转换或生产一种或多种类型的资源。我需要一种能够在理想情况下轻松获得建筑对象的总产量的方法,而无需检查许多成员变量(每种类型的资源一个)。我目前的解决方案是让 Building 返回一个 Resource 对象,其中包含所有不同的资源作为双成员变量。

class Building {
public:
    std::string name;
    int numJobs;
    std::vector<Pop> employedPops;
    Job job;
    Resource getTotalProduction();
    Resource getTotalUpkeep();
};

class Resource {
public:
    double energy;
    double minerals;
    double food;
    double consumerGoods;
    double alloys;
    double physicsResearch;
    double societyResearch;
    double engineeringResearch;
    double unity;
    double rareCrystals;
    double volatileMotes;
    double exoticGases;
    double zro;
    double darkMatter;
    double livingMetal;
    double nanites;
    double influence;
    double minorArtifacts;

    Resource getMultipliedBy(int factor);

    Resource(double energy,
        double minerals,
        double food,
        double consumerGoods,
        double alloys,
        double physicsResearch,
        double societyResearch,
        double engineeringResearch,
        double unity,
        double rareCrystals,
        double volatileMotes,
        double exoticGases,
        double zro,
        double darkMatter,
        double livingMetal,
        double nanites,
        double influence,
        double minorArtifacts) {
    }
};

我想不出更好的解决方案,但这似乎只是在解决问题。如果我或其他人想要添加或删除资源或添加功能,我担心这会导致性能问题并且从长远来看会很痛苦。

标签: c++performanceobject

解决方案


我认为使用 STL 对功能可能对此有用,至少对于组织而言。您可以使用数组/向量std::pair<string, double>来存储变量的名称和值。(建议使用枚举而不是字符串)


推荐阅读