【问题标题】:I'm trying to return a SDL Mix_Music data type, but I'm having problems我正在尝试返回 SDL Mix_Music 数据类型,但我遇到了问题
【发布时间】:2010-11-09 14:48:26
【问题描述】:

我知道我可以将所有 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 );

        ...
    }

【问题讨论】:

    标签: c++ user-interface sdl


    【解决方案1】:

    根据您上面的代码,我不确定您要做什么。函数 '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 );
    

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

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

    【讨论】:

    • 是的,这就是我想要做的就是通过它的名称(字符串)请求一个声音,并让函数返回那个声音。我会尝试那个枚举,但我从来没有使用过枚举。我把它放在哪里?在 main() 中?
    • 好吧,我在 Music 类的公共声明中添加了枚举,当我尝试 Mix_PlayMusic( Sound.getSound( BGMUSIC ), -1 );从 main 中,它说 BGMUSIC 是一个未声明的标识符
    • 没关系,我只是把它放在头文件( enum )顶部的 Music 类之上,它就可以工作了。感谢您的帮助。
    • 是的,枚举真的可以去任何地方,只要在你实际使用它之前定义它。上面的类定义就好了。
    猜你喜欢
    • 2013-09-02
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    相关资源
    最近更新 更多