1

我正在写一个玩家挑选硬币的游戏。捡硬币应该有声音,我用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--;    
  }
4

0 回答 0