cocos 打包web 键盘挡住输入框,ios不能自动播放声音

打包web时用editbox在ios手机上点击editbox出现

然后输入几个字点击屏幕外关闭软键盘,再次点击editbox就会出现挡住editbox ,ios无法自动播放声音要点击才有声音

第一个问题:可能是微信的版本或者手机机型导致的,之前你发过的帖子我并没有重现该问题
第二个问题:ios 本身是不支持自动播放声音的,需要用户第一次手动触发才行

第一个问题,你可以自己先排查一下,相关代码在 CCSGEditBox.js

ios无法播放声音白鹭引擎调用
if(typeof WeixinJSBridge != ‘undefined’){
WeixinJSBridge.invoke(‘getNetworkType’, {}, function (e) {
return cc.audioEngine.play(audioUrl,Loop,this.sfxVolume);
});
}

在回调函数里可以播放但cocos就无法播放

IOS 浏览器以及系统的 webview 第一次无法通过代码播放音频。
你是说白鹭可以么?那就神奇了,难道是他接入了微信的 sdk ?

之前测试的时候的效果是:
IOS 系统限制 webAudio 必须是第一次点击事件播放启动音频以后,才能够用 js 代码主动播放。
而 dom 方式播放的音频,每次都需要点击才能播放。

ios 在微信上是可以自动播放音频的~~~,不是说一定不可以,但是必须先加载https://res.wx.qq.com/open/js/jweixin-1.2.0.js 微信的 js

document.addEventListener("WeixinJSBridgeReady", function () {
    WeixinJSBridge.invoke('getNetworkType', {}, function (e) {
        audio.play();
    }); 
});

具体可以参考这里, 希望官方改进一下

1赞

document.addEventListener(“WeixinJSBridgeReady”, function () {
WeixinJSBridge.invoke(‘getNetworkType’, {}, function (e) {
audio.play();
});
});
这个回调已经执行了说明微信可以播放声音但调用cc.audioEngine.play(audioUrl,Loop,this.sfxVolume);无法比方声音,而白鹭在这个回调中执行播放声音代码就可以播放

我们自己接入微信的sdk然后在回调中调用引擎播放声音代码播放音频cocos还是无法播放,但白鹭可以

[document.addEventListener(“WeixinJSBridgeReady”, function () {
WeixinJSBridge.invoke(‘getNetworkType’, {}, function (e) {
audio.play();
});
});
这个回调已经执行了说明微信可以播放声音但调用cc.audioEngine.play(audioUrl,Loop,this.sfxVolume);无法比方声音,而白鹭在这个回调中执行播放声音代码就可以播放

亲问一下你们是怎么解决声音问题的

应该是可以的,你看看执行了吗,还有在那之前加载好了没

应该是加载好了我摸一下屏幕就立即有声音了

感觉加载微信sdk对cocos没什么作用

是的,第一次必须先点一下,你可以一进游戏大厅,弹个公告,玩家点了确定或是关闭就可以播放了

谢谢了 现在做法就是加了一个点击动作

document.addEventListener("WeixinJSBridgeReady", function () {});
在 WeixinJSBridgeReady 事件完成后,就可以直接播放了。

egret 里面是怎么写的吖?我试了下好像也不能启动播放。是我打开姿势不对么?
音频文件是同一个么?

var sound:egret.Sound = new egret.Sound();
sound.addEventListener(egret.Event.COMPLETE, function loadOver(event:egret.Event) {
    sound.play();
}, this);
sound.addEventListener(egret.IOErrorEvent.IO_ERROR, function loadError(event:egret.IOErrorEvent) {
    console.log("loaded error!");
}, this);
sound.load("resource/sound/music_logo.mp3");
document.addEventListener('WeixinJSBridgeReady', function () {
    WeixinJSBridge.invoke('getNetworkType', {}, function (e) {
        sound.play();
    }); 
});

我试了下你的方法,好像在 egret 内也没办法自动播放唉

不好意思没注意你的回复 白鹭是在html中这样写然后在js中调用function playsound(sound,loop){
if(sound == null){
console.log(‘sound err’)
return;
}
var times = loop?0:1;
if(typeof WeixinJSBridge != ‘undefined’){
WeixinJSBridge.invoke(‘getNetworkType’, {}, function (e) {
return sound.play(0,times);
});
}else{
return sound.play(0,times);
}
}

sound是白鹭播放声音的一个对象