游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1312|回复: 2

关于在游戏中播放MIDI

[复制链接]

3

主题

12

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2006-3-11 23:03:00 | 显示全部楼层 |阅读模式
    最近我写了个俄罗斯方块的程序,在播放背景音乐时遇到了一个奇怪的问题:
    先给出播放音乐的代码:
if(playmusic)
{
    int temp=rand()%8;      //一共有8个MID音乐,随机播放
    DMusic_Play(music_id[temp]);
    if(DMusic_Status_MIDI(music_id[temp]==MIDI_PLAYING))
      playmusic=0;
    else
      playmusic=1;
}
    为了把问题说清楚,先来说说我的程序,游戏分为Game_Init(),Game_Sutdown(),Game_Main(),WinMain()还有WinPorc(),游戏主循环在Game_Main()中,是一个switch结构,判断GameStatus的值,分GAME_STATUS_MENU,GAME_STATUS_RUN,GAME_STATUS_OVER,GAME_STATUS_DEBUG,GAME_STATUS_RESTART,当我将上面那段代码放在GAME_STATUS_RUN里时,音乐播放就不正常了,就像是不断的从头播放,完全无视playmusic的值,而且放的好像都是同一个曲子(我明明是随机播放的)....也有可能是因为不断重头放的缘故导致不同的MIDI听起来都一样...但是当我把代码放在GAME_STATUS_MENU里时却能正常播放,而放在或者switch结构的外面时在标题画面时(GAME_STATUS_MENU)能正常播放,进入游戏(GAME_STATUS_RUN)就又出现问题了,真是郁闷了.
希望大家帮帮忙,看看是哪里出了问题...谢谢啦.

P.S.完整的代码在下面

sf_200631123256.rar

195.29 KB, 下载次数:

50

主题

244

帖子

319

积分

中级会员

Rank: 3Rank: 3

积分
319
QQ
发表于 2006-3-12 18:55:00 | 显示全部楼层

Re:关于在游戏中播放MIDI

if(playmusic)
{
    int temp=rand()%8;      //一共有8个MID音乐,随机播放
    DMusic_Play(music_id[temp]);
    if(DMusic_Status_MIDI(music_id[temp]==MIDI_PLAYING))
      playmusic=0;
    else
      playmusic=1;
}

if(DMusic_Status_MIDI(music_id[temp]==MIDI_PLAYING))
晕,这句写错了。
应该是:if(DMusic_Status_MIDI(music_id[temp])==MIDI_PLAYING)

我将你的程序改了部分,iPlayMusicId是全局变量。定义在这个文件里就可以了(别忘了设初始值,用0到音乐数组的上限的即可
if(DMusic_Status_MIDI(music_id[iPlayMusicId])!=MIDI_PLAYING)
{
      iPlayMusicId=rand()%8;
      DMusic_Play(music_id[iPlayMusicId]);
}

3

主题

12

帖子

18

积分

新手上路

Rank: 1

积分
18
 楼主| 发表于 2006-3-12 22:52:00 | 显示全部楼层

Re: Re:关于在游戏中播放MIDI

雨落寒星: Re:关于在游戏中播放MIDI

if(playmusic)
{
    int temp=rand()%8;      //一共有8个MID音乐,随机播放
    DMusic_Play(music_id[...


问题解决了,哈哈,谢谢了.
不过把我原来的代码改正还是不行,而用楼上重新写的代码反而可以...难道我的代码存在逻辑错误?...
[em3]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-23 21:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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