C# WinForms节奏游戏跨窗体BGM开关按钮实现问题求助
节奏游戏BGM开关按钮失效问题排查与修复
问题点及修复方案
Form1构造函数名称错误
原代码中构造函数名为SplashScreen(),但类名是Form1,导致播放器初始化代码(设置BGM路径、音量等)完全未执行。需将构造函数名改为与类名一致的Form1()。Form2实例未显示
Form1_Load方法中仅创建了Form2实例,但未调用Show()或ShowDialog()显示窗口,Form2根本无法打开,按钮点击事件自然无法触发。需添加窗口显示代码。Form2语法错误
bool BGM = true语句末尾缺少分号,会导致编译失败,程序无法正常运行。补充分号即可。播放器初始化逻辑问题
原代码初始化时设置volume = 0并调用Ctlcontrols.stop(),即使取消静音也听不到声音。需调整初始化时的播放状态,比如设置合适音量并调用play()启动BGM。
修正后的代码
Form1代码
public partial class Form1 : Form { public Form1() // 修正构造函数名称 { InitializeComponent(); string path= System.Reflection.Assembly.GetEntryAssembly().Location; axWindowsMediaPlayer1.URL = path.Remove(path.Length - 44) + "\\assets\\main.wav"; axWindowsMediaPlayer1.settings.volume = 50; // 设置合适初始音量 axWindowsMediaPlayer1.Ctlcontrols.play(); // 初始化时启动BGM } void BGMoff() { axWindowsMediaPlayer1.settings.mute = true; } void BGMon() { axWindowsMediaPlayer1.settings.mute = false; } private void Form1_Load(object sender, EventArgs e) { Form2 main = new Form2(); main.BGM_off += BGMoff; main.BGM_on += BGMon; main.Show(); // 显示Form2窗口 } }
Form2代码
public partial class Form2 : Form { public delegate void ClickButton(); public event ClickButton BGM_off; public event ClickButton BGM_on; bool BGM = true; // 补充分号 public void button4_Click_1(object sender, EventArgs e) { if (BGM) { button4.BackgroundImage = Properties.Resources.BGMoff; BGM = false; BGM_off?.Invoke(); } else { button4.BackgroundImage = Properties.Resources.BGMon; BGM = true; BGM_on?.Invoke(); } } }
内容的提问来源于stack exchange,提问作者Piece - kun
相关产品推荐
相关产品推荐

