我们有一个需求,就是在android的原生项目里,内嵌一个小游戏进去。
为了减少包体积,我们的做法是点击这个游戏的时候打开一个webview,去加载打包的游戏项目的index.html文件,但是首次加载的时候页面出来的比较慢,体验不是很好。有没有办法让他加载完成在显示出来呢,模拟原生的下载,也搞个进度条之类的,或者等他加载完成在进入到游戏页面。
编辑器版本是creator2.4.10。
进度条可以啊资源加载不就是你自己游戏控制的,以前做过一个微端安卓的壳里面放个webview加载游戏
H5游戏的资源不是动态加载的吗?我现在就是一个初始场景,有一个bundle(游戏),加载的逻辑就是在初始场景里加载这个bundle里的预支体。写的是在加载预制体完成后再打开的,但是资源并没有加载完,他是动态加载的。请问这个该怎么办,我想要的效果是把这个项目里的资源加载完,在打开游戏界面。因为进度条是android层显示的,所以要显示的话需要我告诉android当前的加载进度
可以把加载界面也放在游戏里做啊我之前是这样的,如果在安卓的话webview也可以和安卓交互把可以把资源加载的进度传给安卓原生层,你这所谓模拟不就是显示一下资源的加载进度没什么特别的啊?唯一要解决的就是webview怎么把数据传给安卓这个应该也不是大问题问一下做安卓的同事
不是的,交互不是问题,问题在我拿不到正确的加载进度,我需要把游戏里用到的资源先下载下来,在显示页面,否则页面的资源都是动态加载的,第一次进去体验很不好。我没有找到合适的方法拿到加载进度,cc.assetManager.loadBundle这个方法,回调里告诉我加载成功了,但是实际上资源并没有下载完,他是异步下载的
那你就在回调里把整个文件夹加载一次
我用的就是loadBundle,也是和他一样的问题,loadBundle并没有把Bundle里的资源下载下来,用到的资源还是异步加载的。
感谢大家的回复,可能我没有表达清楚,简单来说我想表达的就是,H5游戏能不能先把游戏里的资源全部缓存下来,在进入游戏,就像原生端的热更新一样的效果
哈 我引用的链接不是说了
cc.assetManager.loadBundle好像只会下载一个资源配置文件,其他资源都是调用bundle.load的时候才会下载的,但是有一个preload函数可以提前下载
加载完bundle之后直接加载scene
assetManager.loadBundle("game", (err, bundle) => {
if (bundle) {
bundle.loadScene("app", (finished, total, item) => {
// total会随着prefab的加载而一直增加
this.progressBar.progress = Math.max(finished / total, this.progressBar.progress);
}, (err, scene) => {
if (scene) {
director.runScene(scene);
}
})
}
});
你可以把你们资源打成一个zip包,让你们安卓同事去下载,这样下载进度他们能获取,解压后,通过webview的接口,把游戏资源的HTTP请求hook成从本地读取刚下载的zip资源 这样游戏加载跟原生一样快,还能断网使用 