我正在尝试返回 SDL Mix_Music 数据类型,但遇到问题

发布于 2024-07-27 17:32:42 字数 565 浏览 2 评论 0原文

我知道我可以将所有 Mix_Musics 公开,而不用担心问题,但我仍然想了解如何做到这一点。

   //header.h

    class Music
    {
        private:

            Mix_Music * BGMusic, * fall, * reset, * teleport, * win, * singleCubeWin;

        public:

            Music();

            bool loadMusic();
            void clean_up();

            Mix_Music * getSound( Mix_Music * m ) { return m; }
    };


   //program.cpp

    Music Sound;

    int main( int argc, char* args[] )
    {
        ...

        Mix_PlayMusic( Sound.getSound( "BGMusic" ), -1 );

        ...
    }

I know I could just make all the Mix_Musics public, and not worry about the problem, but I'd still like to understand how to do it.

   //header.h

    class Music
    {
        private:

            Mix_Music * BGMusic, * fall, * reset, * teleport, * win, * singleCubeWin;

        public:

            Music();

            bool loadMusic();
            void clean_up();

            Mix_Music * getSound( Mix_Music * m ) { return m; }
    };


   //program.cpp

    Music Sound;

    int main( int argc, char* args[] )
    {
        ...

        Mix_PlayMusic( Sound.getSound( "BGMusic" ), -1 );

        ...
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

傲鸠 2024-08-03 17:32:42

从上面的代码我不能完全确定你想要做什么。 函数“getSound”采用 Mix_Music 对象作为参数并返回相同的对象。 现在,根据一些推论,我假设您正在尝试通过字符串请求 BGMusic 对象。 有几种方法可以做到这一点,通过每个 Mix_Music 对象的 ID,按 ID 请求:

... // Somewhere above:

enum MixMusicID {
    BGMUSIC,
    FALL,
    RESET,
    TELEPORT,
    WIN,
    SINGLECUBEWIN
};

... // In the class:

Mix_Music * getMusic ( MixMusicID id )
{
    switch (id)
    {
    case BGMUSIC:
        return BGMusic;
        ...
    default:
        return NULL;
    }
}

... // In main:
Mix_PlayMusic( Sound.getSound( BGMUSIC ), -1 );

您可以使用每个对象的字符串标识符进行类似的操作。 归根结底,变量名和字符串标识符之间没有内置关系。 因此,您可以通过枚举(上面)或字符串标识符来实现这种关系。

希望这有帮助,再次不确定问题是什么。

From your code above I'm not absolutely certain what you are trying to do. The function 'getSound' takes a Mix_Music object as the parameter and returns the same object. Now from some deduction I assume that you are trying to request the BGMusic object via a string. There a few ways to do this, via IDs for each of Mix_Music objects, request by ID.:

... // Somewhere above:

enum MixMusicID {
    BGMUSIC,
    FALL,
    RESET,
    TELEPORT,
    WIN,
    SINGLECUBEWIN
};

... // In the class:

Mix_Music * getMusic ( MixMusicID id )
{
    switch (id)
    {
    case BGMUSIC:
        return BGMusic;
        ...
    default:
        return NULL;
    }
}

... // In main:
Mix_PlayMusic( Sound.getSound( BGMUSIC ), -1 );

You could do it similarly with string identifiers for each object. What it really comes down to is there is no built in relationship between a variable's name and a string identifier. So its up to you to implement this relationship either via an enum (above) or string identifiers.

Hope this helped, again not sure exactly what the question was.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文