如何在类中初始化地图数据结构?

How can I initialize a map data structure within a class?

提问人:mikmke 提问时间:10/20/2023 最后编辑:Mark Rotteveelmikmke 更新时间:10/21/2023 访问量:82

问:

我是 C++ 和 raylib 的新手,目标是模拟 Pacman 游戏。

如何在类中初始化地图数据结构?例如,当我编写一个吃豆人角色并需要更改其动画时(例如:死亡、攻击或移动),我必须获取 sprite 的 startX startY 和总帧数。

例:

struct AnimationData {
    std::string name;
    int startX;
    int startY;
    int totalFrame;
};
AnimationData[] animations = {
    {"die",1,2,3},{"attacking",1,2,3}
}

如何在类内初始化?

我尝试使用以下代码,但编译器正在生成错误。

class Pacman :public AnimateObject {
public:
    const static struct AnimationData {
        std::string name;
        int startX;
        int startY;
        int totalFrame;
    };
    AnimationData[] animations = {
        {"die",1,2,3},{"attacking",1,2,3}
    }
    AnimationData currentAnimationData;
    void setAnimation(AnimationData data)
}

我想使用“setAnimation”函数来更改角色的当前动画。或者我最初的想法是错误的?我应该用另一种方式来控制动画吗?

根据以下评论中的建议,我修改了代码如下。我不确定这是否正确。

在 pacman.h 中

struct AnimationData {
    std::string name;
    int startX;
    int startY;
    int totalFrame;
};
class Pacman{
public:
    const static std::array<AnimationData,2> animations;
    AnimationData currentAnimationData;
    void setAnimation(AnimationData data)
}

在 pacman.cpp 中

const std::array<AnimationData, 2> Pacman::animations =
{
 AnimationData{"die",1,2,3},  
 AnimationData{"moving",1,2,3} 
};

下面是一个最小的可重现示例

C++ 游戏引擎 pacman raylib

评论

3赞 463035818_is_not_an_ai 10/20/2023
有关编译器错误的问题应包括最小的可重现示例和编译器错误消息
1赞 463035818_is_not_an_ai 10/20/2023
您发布的代码片段中没有地图
2赞 463035818_is_not_an_ai 10/20/2023
const static struct AnimationData {不是 C++
4赞 Pepijn Kramer 10/20/2023
学习C++的好资源是一本好书(确保它是最新的,而不是教你“C”)。或者您可以使用 learncpp.com。此外,请确保检查 cppreference 以探索 C++ 必须提供的内容(容器/算法)。最后,请参阅 C++ 核心指南,了解如何使用 C++。
3赞 463035818_is_not_an_ai 10/20/2023
与类外部相比,数组成员的大小不能从其初始值设定项中推断出来,只是不允许,因为这会造成混淆(其他地方可能有其他初始值设定项)。使用 或 .C 数组不适合 C++ 初学者std::ararystd::vector

答: 暂无答案