- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在播放样本 Allegro 5 时遇到了问题。当我播放样本时,我无法再次播放该样本,直到它完成播放。有时,如果另一个不同的样本正在播放,它也不会播放样本。
无论如何要解决这个问题?
我用“声音”类播放音频,它只有一个播放功能。剩下的就是构造函数和成员变量,都是在play函数中使用的。
void Sound::play()
{
al_play_sample(
pSample, // ALLEGRO_SAMPLE
mGain, // float
mPan, // float
mSpeed, // float
getPlaymode(mPlaymode), // I use my own non-AL playmode enums. This is a private function that returns the AL version.
NULL); // ALLEGRO_SAMPLE_ID
}
class ContentManager;
enum Playmode
{
BiDir,
Loop,
Once,
StreamOnce,
StreamOneDir
};
class Sound : public Trackable
{
private:
/* Variables
* * * * * * * * * * * * */
ALLEGRO_SAMPLE* pSample;
float
mGain,
mPan,
mSpeed;
Playmode mPlaymode;
std::string
mAssetPath,
mAssetName;
/* Private Functions
* * * * * * * * * * * * */
ALLEGRO_PLAYMODE getPlaymode(Playmode playmode)
{
switch (playmode)
{
case BiDir:
return ALLEGRO_PLAYMODE::ALLEGRO_PLAYMODE_BIDIR;
case Loop:
return ALLEGRO_PLAYMODE::ALLEGRO_PLAYMODE_LOOP;
case Once:
return ALLEGRO_PLAYMODE::ALLEGRO_PLAYMODE_ONCE;
case StreamOnce:
return ALLEGRO_PLAYMODE::_ALLEGRO_PLAYMODE_STREAM_ONCE;
case StreamOneDir:
return ALLEGRO_PLAYMODE::_ALLEGRO_PLAYMODE_STREAM_ONEDIR;
// Default to once
default:
return ALLEGRO_PLAYMODE::ALLEGRO_PLAYMODE_ONCE;
}
}
public:
/* Constructors/Destructor
* * * * * * * * * * * * */
Sound();
Sound(
// assetPath, assetName, gain, pan, speed, playmode
std::string assetPath,
std::string assetName,
float gain = 1.0f,
float pan = 0.0f,
float speed = 1.0f,
Playmode playmode = Once);
Sound(const Sound& other);
~Sound();
friend class ContentManager; // My content system.
void play();
};
#include "Sound.h"
/* Constructors/Destructor
* * * * * * * * * * * * */
Sound::Sound()
{
this->mAssetPath = "";
this->mAssetName = "";
this->mGain = 1.0f;
this->mPan = 0.0f;
this->mSpeed = 1.0f;
this->mPlaymode = Once;
this->pSample = NULL;
}
Sound::Sound(std::string assetPath, std::string assetName, float gain, float pan, float speed, Playmode playmode)
{
this->mAssetPath = assetPath;
this->mAssetName = assetName;
this->mGain = gain;
this->mPan = pan;
this->mSpeed = speed;
this->mPlaymode = playmode;
this->pSample = al_load_sample((assetPath + assetName).c_str());
}
Sound::Sound(const Sound& other)
{
this->mAssetPath = other.mAssetPath;
this->mAssetName = other.mAssetName;
this->mGain = other.mGain;
this->mPan = other.mPan;
this->mSpeed = other.mSpeed;
this->mPlaymode = other.mPlaymode;
this->pSample = al_load_sample((mAssetPath + mAssetName).c_str());
}
Sound::~Sound()
{
al_destroy_sample(pSample);
}
void Sound::play()
{
al_play_sample(
pSample,
mGain,
mPan,
mSpeed,
getPlaymode(mPlaymode),
NULL);
}
// Game->ContentManager->Sound->play()
Game::instance()->content()->getSound("somesound.wav")->play();
最佳答案
我可能错了,但听起来您必须使用 al_reserve_samples(number_of_samples);
保留更多样本
关于c++ - Allegro 5 一次播放多个样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35763079/
此功能的 allegro 5 版本是什么? texture_number = allegro_gl_make_texture_ex(AGL_TEXTURE_MASKED, my_bitmap, GL_
我得到了 Allegro 开发库,编写并编译了一个简单的应用程序,然后在我的计算机上运行它,它运行良好。我有一个 friend 测试过它,但是当双击它时它没有做任何事情。我认为问题是他没有安装Alle
我正在制作一款游戏,我不希望我的用户下载游戏文件夹以外的任何内容,只需双击即可运行。我可以在没有 Xcode 的情况下在 OSX 中编译我的代码,但当我尝试在另一台使用 OSX 的计算机上运行游戏时,
我想知道是否有人可以为这个错误指出正确的方向。 我正在学习使用Visual Studio 2010中安装的Allegro 5进行2D游戏编程。 我一直在关注一个教程系列,直到上一课为止,一切都很好。
我正在编写MOD播放器,尝试使用Allegro5原始流功能播放样本,但我无法弄清该流的确切初始化参数,以播放从mod文件加载的样本数据。 这就是我所拥有的: xf::ModLoader ml; ml.
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
我正在使用 Allegro 5 用 C 语言开发 2D 游戏,其中敌人从固定位置向玩家当前位置发射射弹。我知道我必须根据玩家的位置和敌人的位置来计算假想三角形的正切。但是,如何让射弹根据该值沿着直线运
我正在按照命令使用 Allegro 做我的类(class)作业。 我需要捕获键盘上的按键事件,为此我使用了以下代码: al_wait_for_event(evento, &ev); if(ev.typ
我的一个 friend 试图在 Allegro 中重载一个用于比较颜色的相等运算符,但是它不起作用,他收到错误“运算符不匹配==”这是在 Color 类/结构之外重载的,重载的运算符函数如下所示: t
我正在制作一个程序,可以绘制在屏幕上弹跳的球。我目前正在研究绘制球的部分。 我的代码包括以下内容: BallEngine 类 - 管理所有 Allegro 函数/对象 BallManager 类 -
例如,如果我使用 Allegro 函数 ALLEGRO_DISPLAY *display=al_create_display(660, 660); 创建的屏幕上的 (100 , 100) 像素是红色或
谁能告诉我如何在 allegro 5 中打开一个浏览窗口,用户可以在其中选择文件,程序将使用该文件作为输入? 最佳答案 Allegro 5 具有这种文件对话框功能。 How to create dia
我是 allegro 和 c++ 的初学者。我正在尝试使用位图命令。我用这个简单的程序来测试它: #include BITMAP *red; int main(){ allegro_init
除了不断调用 remove_joystick() 然后 install_joystick 之外,有没有办法更新运行时插入的操纵杆数量?这被证明是非常慢的(从 60 FPS 到大约 5)。 只请 All
我正在接受有关将 allegro 库与 C++ 结合使用的培训,但我遇到了一个问题,在将大图像用于视差背景时,我会在屏幕上向下滚动时出现持续的负载/故障,使我所有的图像都闪烁了一下,有没有办法加载背景
我想在图形窗口中打印出我的鼠标坐标,当用户点击它时,应该会出现一条消息“clicked”。但问题是当用户点击它时,我收到了大约 5-10 条消息,而不是 1 条消息。我知道这可能是因为我松开按钮的速度
我正在学习面向对象编程和 allegro 库,所以我开始编写一个简单的菜单,但代码显示黑屏然后崩溃。 对于有关类外观、使用 header 拆分代码、代码的一般语法以及最重要的是找到代码无法解决的问题的
在 Allegro 中,我可以通过运行 将窗口设置为可调整大小 al_set_new_display_flags(ALLEGRO_RESIZABLE); 之前 display = al_create_
大家好,我正在制作一个 C++ 游戏,我试图将位图加载到我的游戏屏幕上,但是当我这样做时,图像没有出现,只有一个黑色的正方形,如下所示: 我目前正在使用以下代码: BITMAP *buffer = c
我在播放样本 Allegro 5 时遇到了问题。当我播放样本时,我无法再次播放该样本,直到它完成播放。有时,如果另一个不同的样本正在播放,它也不会播放样本。 无论如何要解决这个问题? 我用“声音”类播
我是一名优秀的程序员,十分优秀!