51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3152|回复: 1
打印 上一主题 下一主题

四个函数搞定游戏背景音乐

[复制链接]
  • TA的每日心情
    慵懒
    2015-1-8 08:46
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2008-1-11 11:25:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    不能出声的哑巴游戏总是不太爽。花了一点时间大致把游戏背景音乐封装了一下。这个封装基本是参照了DMUtil.h的几个类。原来的打算是自己做一个MySound的类,封装到自己的MySound.h和MySound.cpp里。但是我的Demo用到了SDK的FrameWork,不知道为什么,我封装好的简易音乐类无法和原来的Demo正常编译连接。于是只好老老实实按照FrameWork的封装好的DMUtil.h在进一步封装。     #include "DMUtil.h"
        先在类里面申明
        CMusicManager* g_pMusicManager;
        CMusicSegment* g_pMusicSegment;
        构造初始
        g_pMusicManager = NULL;
        g_pMusicSegment = NULL;
        封装的四个函数
        void InitMusic(HWND hWnd);                        // 初始化
        HRESULT LoadSegmentFile( HWND hDlg, TCHAR* strFileName); // 载入音乐文件
        void PlayMusic(HWND hDlg, BOOL bLooped);                // 播放,可控制是否循环播放
        void StopMusic();                              // 停止播放
        HRESULT CMyD3DApplication:oadSegmentFile( HWND hDlg, TCHAR* strFileName )
        {
            HRESULT hr;
            SAFE_DELETE( g_pMusicSegment );
            // Have the loader collect any garbage now that the old
            // segment has been released
            g_pMusicManager->CollectGarbage();
            // Set the media path based on the file name (something like C:\MEDIA)
            // to be used as the search directory for finding DirectMusic content
            // related to this file.
            TCHAR strMediaPath[MAX_PATH];
            GetCurrentDirectory(MAX_PATH, strMediaPath);
            g_pMusicManager->SetSearchDirectory(strMediaPath);
            BOOL bMidiFile = FALSE;
            // Load the file into a DirectMusic segment
            if( FAILED( g_pMusicManager->CreateSegmentFromFile( &g_pMusicSegment, strFileName,TRUE, bMidiFile ) ) )
            {
                MessageBox( NULL, "No find Music sound.", "", MB_OK | MB_ICONERROR );
                return S_FALSE;
            }
            return S_OK;
        }
        void CMyD3DApplication::InitMusic(HWND hWnd)
        {
            g_pMusicManager = new CMusicManager();
            g_pMusicManager->Initialize(m_hWnd );
            TCHAR strFileName[MAX_PATH];
            strcpy( strFileName, "sample.sgt" );
            LoadSegmentFile(m_hWnd, strFileName ) ;
        }
        void CMyD3DApplication:layMusic( HWND hDlg, BOOL bLooped )
        {
            if( bLooped )
            {
                // Set the segment to repeat many times
                g_pMusicSegment->SetRepeats( DMUS_SEG_REPEAT_INFINITE );
            }
            else
            {
                // Set the segment to not repeat
                g_pMusicSegment->SetRepeats( 0 );
            }
            g_pMusicSegment->lay( DMUS_SEGF_BEAT );
        }
        void CMyD3DApplication::StopMusic()
        {
            g_pMusicSegment->Stop( DMUS_SEGF_BEAT );
        }
        就这么简单。四个函数就搞定游戏背景音乐了。
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    该用户从未签到

    2#
    发表于 2008-4-1 13:24:08 | 只看该作者
    游戏没有音乐一点都不好玩,我们做的游戏里面的音乐很多,
    有时间玩玩
    www.novoking.com
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-25 21:52 , Processed in 0.075951 second(s), 33 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表