我正在写一个玩家挑选硬币的游戏。捡硬币应该有声音,我用PlaySound播放*.wav文件。有用。但有时(7/10 次尝试)应用程序会崩溃。我不知道为什么有时有效,有时无效。
有趣的是,当我在调试模式下运行应用程序时,它可以完美运行
什么可能导致问题以及如何解决?
你能推荐另一种播放wav的方法吗?(就这么简单(使用一二功能))
我尝试使用 PlaySoundA、sndPlaySound 的所有变体 - 结果相同
试图直接从文件中读取 wav 并将其保存在内存中 - 结果相同
//This sample checks if there a coin on the right
void Player::step_right() {
if (check_right()) {
sndPlaySound(TEXT("D:\\projects\\s.wav"), SND_FILENAME | SND_ASYNC);
//PlaySoundA(TEXT("D:\\projects\\s.wav"), nullptr, SND_FILENAME | SND_ASYNC);
//sndPlaySound(buffer, SND_MEMORY || SND_ASYNC);
netWorth++;
steps+=10;
}
cur->X++;
}
更新:我使用 MinGW
粉碎后的控制台输出:进程以退出代码 -1073741819 (0xC0000005) 完成
这是 Player 类规范:
class Player {
private:
Point* cur; // Current coords
Point post; // Last coords
int steps; // Remaining steps
int netWorth; // Picked coins
void (Player::*m[4])(); // Array of movement functions pointers
// Movement
void step_right();
void step_left();
void step_up();
void step_down();
// Coins checking
bool check_right();
bool check_left();
bool check_up();
bool check_down();
public:
Player();
Point* Getcur() { return cur; }
void Move(void (Player::*t)());
bool isOutofSteps();
auto ReturnSomeArray() { return m; }
int GetNet(); //Networth
void display_player_info();
};
我也有 Action_Listener 类
map<int, void (Player::*)()> m;
根据键码,我将函数指针发送到void Player::Move(void (Player::*t)())
这里:
if (m.find(event) != m.end() && !player->isOutofSteps()) {
void (Player::*t)() = m[event];
player->Move(t);
unsigned int (Drawer::*y)() = drawhandlers[event];
drawer->Draw_Hero(y);
player->display_player_info();
} else if(player->isOutofSteps()){
terminal_print(2, 2, "You're out of steps");
return;
}
移动功能:
void Player ::Move(void (Player::*t)()) {
post = *cur;
(this->*t)();
steps--;
}