- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我遇到了一个奇怪的问题。我想在我的游戏中加入声音。这是一个有两个阶段的游戏。角色扮演游戏之一和战斗之一。在角色扮演游戏中,您可以在踩到怪物时发动战斗。在我的代码中,我使用了 3 次 SDL_mixer 来播放音乐(在菜单、角色扮演游戏和战斗中)。它在前两种情况下有效,但是当我发起战斗时没有音乐。音乐加载完毕,Mix_playingMusic返回true,但是打架时听不到任何音乐。我使用与角色扮演游戏和菜单中相同的音乐。关于SDL_Mixer 的代码到处都是一样的。部分战斗代码:
{
SDL_Event events;
Mix_Music *fightMusic;
enum actual_player actual = PLAYER;
int go = 1;
int action;
int monsterId = 0;
Uint32 t = SDL_GetTicks(), nt;
fightMusic = Mix_LoadMUS("data/Music/rpg.mp3"); // we loading the music
if(fightMusic == NULL){
printf("error loading fightMusic\n");
}
Mix_VolumeMusic(MIX_MAX_VOLUME);
if(Mix_PlayMusic(fightMusic, -1)<0){
printf("error playing fightMusic \n");
}
if (Mix_PlayingMusic() ){
printf("Music it's playing \n");
}
while(go){
if(isFinished(fightSdl->fight))
go = 0;
nt = SDL_GetTicks();
while (SDL_PollEvent(&events)){
action = inputKeyboard(events);
if(action == QUIT){
return -1;
go = 0;
}
if(action == -2){
clearBufferGame(fightSdl->buffer, CHARACTER);
}
if(actual == PLAYER) {
switch(action){
case MOVE_DOWNWARD:
addActionToBufferGame(fightSdl->buffer, DOWN);
break;
case MOVE_UPWARD:
addActionToBufferGame(fightSdl->buffer, UP);
break;
case MOVE_LEFT:
addActionToBufferGame(fightSdl->buffer, LEFT);
break;
case MOVE_RIGHT:
addActionToBufferGame(fightSdl->buffer, RIGHT);
break;
case ATTACK_1:
actionAttackSdl(fightSdl, ATTACK_1);
break;
case ATTACK_2:
if(Mix_PlayChannel(-1,fireSound,0)<0){
printf("error playing fire sound");
}
actionAttackSdl(fightSdl, ATTACK_2);
break;
case ATTACK_3:
actionAttackSdl(fightSdl, ATTACK_3);
break;
case NOTHING:
actual = ENNEMY;
break;
case -1:
setIsIdleCharacSdl(fightSdl->characSdl,1);
}
}
}
if (nt-t>300){
if(actual == ENNEMY){
hitNRunSdl(fightSdl, monsterId);
if(getMpEnnemyFight(fightSdl->fight) == 3 && getMpEnnemyFight(fightSdl->fight) == 3)
monsterId++;
if(monsterId >= fightSdl->nbMstrSdl){
actual = PLAYER;
setApPlayerFight(fightSdl->fight, 3);
setMpPlayerFight(fightSdl->fight, 3);
monsterId = 0;
}
}
t = nt;
}
// updatePlayerDisplay(fightSdl);
// updateMonsterDisplay(fightSdl);
updatePlayerActionFight(fightSdl);
updateSpellDisplay(fightSdl);
updateDisplay(fightSdl);
drawGame(fightSdl);
// SDL_RenderPresent(fightSdl->renderer);
}
if(getLifePointsCharacter(getCharacterFight(fightSdl->fight)) >= 0)
return 1;
return 0;
编辑:我添加了一个 printf("%s", Mix_GetError)
菜单和 rpg 中没有错误,但在战斗中它是 print : Invalid audio device ID
最佳答案
所以,我找到了解决我的问题的方法。显然 SDL_OpenAudio 的返回值总是成功或失败,而不是设备 ID,这意味着您只能使用此函数一次打开一个设备。在启动战斗时,我只是在重新打开之前关闭了音频,并且它有效。
关于c - SDL_Mixer 无法处理部分代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37361630/
我正在浏览 this tutorial使用 SDL_mixer 在音频上一切正常。 在那之后,我决定通过探索进行实验、玩耍和学习,所以我制作了一个非常相似的程序,有两个声道,让我播放一些视频游戏音乐,
我正在尝试获取一些开源C ++代码以在xcode中进行编译。它使用SDL库。我为OS X安装了downloaded SDL 2.0并安装了它,并且一切正常-但下载的文件似乎并未包含SDL_mixer.
基本信息: 编程语言 - C++ 平台 - Windows 音频格式 - wav 和 mid 我最近完成了一款游戏,并且正在四处寻找将其上传到文件托管站点的最佳方式。我最终决定使用 7zip 的自解压
如果某个点在范围内,我的程序需要停止播放声音,因为我有一个带有函数 run() 的类,它在单独的线程上运行并使用 SDL.hgetPos())) { print
好了,问题来了。我开始学习 SDL,并想为我为学校项目制作的这个“游戏”添加一些音频。音频无法从我的程序中播放,但我阅读和下载的教程代码中包含音频并可以播放。我真的很困惑为什么我的音频无法播放,但我知
我阅读并尝试了该主题的所有其他帖子,但没有任何帮助。当我尝试使用 Mix_PlayChannel() 播放音乐时,我没有收到错误消息,也没有听到任何声音!我现在尝试了几个小时,但没有任何帮助。程序愉快
我想知道 SDL_Mixer 库中是否有跳转到 wav 文件中特定位置的功能。我发现有一个名为 Mix_SetMusicPosition 的函数,但它不适用于 .wav 文件,也不允许您选择 chan
我遇到了一个奇怪的问题。我想在我的游戏中加入声音。这是一个有两个阶段的游戏。角色扮演游戏之一和战斗之一。在角色扮演游戏中,您可以在踩到怪物时发动战斗。在我的代码中,我使用了 3 次 SDL_mixer
嗨,我正在尝试在这里触发多个音乐播放,这里有一些代码。 Mix_Music *mix_list[MUSIC_COUNT] ; //init music with SDL int
我正在尝试获取一些开源 C++ 代码以在 xcode 中进行编译。它使用 SDL 库。我downloaded适用于 OS X 的 SDL 2.0 并安装了它,一切正常 - 但下载的文件似乎不包含文件
我有一个程序可以使用 SDL_mixer 库 ( http://www.libsdl.org/projects/SDL_mixer/ ) 播放一些声音。当我只使用 Mix_OpenAudio 打开与默
我有 4 个声音。我需要播放声音1,当它结束时,自动播放声音2;当声音 2 结束时,自动播放声音 3。声音 3 结束时,播放声音 4....我正在使用 SDL Mixer 2.0,没有 SDL Sou
我在使用 SDL_Mixer 时遇到了问题(我缺乏经验)。 block 和音乐播放得很好(使用 Mix_PlayChannel 和 Mix_PlayMusic),同时播放两个不同的 block 不是问
我正在使用 SDL 和 SDL_mixer 库,在编译时遇到以下错误: .... game.cpp:(.text+0x88f): undefined reference to `Mix_OpenAud
我想写一个简单的控制台音乐播放器,它支持 .mp3 和 .wav 音频格式。使用 SDL_mixer 播放 .wav 文件会降低声音质量,但使用 mp3 文件则不会。当 .wav 文件开始播放时,会发
我使用 SDL2_Mixer 在 Linux Ubuntu 16.04 上播放声音。 这是我的类(class)代码。 bool SoundPlayer::init() { if (SDL_In
我正在使用 SDL_Mixer 在我的 C++ 游戏中实现声音,但在 the manual 中找不到函数那会给我当前正在播放的 Mix_Music。我想我需要它来了解我是否可以释放 Mix_Music
目前SDL_Mixer有两种声音资源:chunk和music。 除了 API 和支持的格式限制外,是否有任何理由不将音乐作为 SDL_Chunk 和 channel 加载和播放? (内存、速度等) 最
我正在制作一个简单的游戏,当玩家接近正在玩的关卡结束时,它的音频速度应该会增加。所以现在我想知道是否有办法使用 SDL_Mixer 来做到这一点。如果 SDL_Mixer 不是要走的路,请告诉我如何在
我有一个使用 GLFW 进行窗口创建和输入的游戏。是否可以在没有 SDL 的情况下将 SDL_mixer 用于音频? 最佳答案 不,你不能。 因为它依赖于 SDL header 。在 SDL_mixe
我是一名优秀的程序员,十分优秀!