赞 | 0 |
VIP | 0 |
好人卡 | 4 |
积分 | 1 |
经验 | 9935 |
最后登录 | 2022-3-16 |
在线时间 | 211 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 95
- 在线时间
- 211 小时
- 注册时间
- 2011-8-16
- 帖子
- 300
|
虽然没有给你做一个在对话框里显示视频的demo,但是下面这两张图表现的效果也差不多。
下面这个画面截图后面是正在播放一段视频,而这段视频是播放在一个Sprite的Bitmap的Canvas上的。
这代表着这段视频也可以显示在对话框上面,也可以和对话框融为一体,显示在“脸图”所在位置(当然视频尺寸要有修改)
提供一点思路:
1、核心问题:如何把视频画到和Sprite同层
RPGMaker游戏画面中所有的元素都是由Sprite实现的。
如果你想让视频和游戏画面中的其他元素有层级关系,就必须得让视频显示在Sprite上。
Sprite包含了一个Bitmap对象,Bitmap包含了一个Canvas对象,我们可以把视频画到Canvas上面,这样就可以实现需求了。
(相关文档:使用 canvas 处理视频)
这样解决了视频可以在Sprite上播放的核心问题之后,再搞对话框播放视频就简单多了(略)。
2、小问题:播放视频时游戏画面暂停:黑屏(GameCanvas被隐藏)
需要注意的一点是,在下面这个 Graphics._updateVisibility 方法里,原有的代码设定是video播放时,整个游戏的canvas将隐藏。当video播放完毕,canvas才会恢复。所以会出现播放video的时候整个游戏画面黑屏了,如果想做到播放视频和游戏画面并行运行,则需要如下修改:保证canvas任何时候都是可见得。
- /**
- * @static
- * @method _updateVisibility
- * @param {Boolean} videoVisible
- * @private
- */
- Graphics._updateVisibility = function(videoVisible) {
- // this._video.style.opacity = videoVisible ? 1 : 0;
- // this._canvas.style.opacity = videoVisible ? 0 : 1;
- this._video.style.opacity = videoVisible ? 1 : 0;
- this._canvas.style.opacity = 1;
- };
复制代码
顺便提一句,我对pixi.js的render操作流程完全没有了解,所以在操作canvas逐帧绘制video的时候遇到了无论如何操作canvas都不显示的问题。
盲测是撞到了pixi的优化机制怀里,但是又懒得去找,直接在drawImage后面跟了一个clearRect(width, height, 1, 1)来触发Canvas的刷新,所以如果你在搞这块需要注意一下相关问题。
3、小问题:播放视频时游戏画面暂停:事件解释器被挂起
还有一点就是原版机制,在播放视频的时候Game_Interpreter事件解释器会被挂起,事件将中止运行(setWaitMode)。
- // Play Movie
- Game_Interpreter.prototype.command261 = function() {
- if (!$gameMessage.isBusy()) {
- var name = this._params[0];
- if (name.length > 0) {
- var ext = this.videoFileExt();
- console.log('movies/' + name + ext)
- Graphics.playVideo('movies/' + name + ext);
- this.setWaitMode('video');
- }
- this._index++;
- }
- return false;
- };
复制代码 如果你希望Game_Interpreter在播放视频的时候正常工作,推荐使用脚本来播放视频:
- Graphics.playVideo('movies/视频文件名.后缀’);
复制代码 虽然你绕过了 setWaitMode,事件解释器不会再被挂起,你可以在播放视频的时候自由使用事件,但是这也代表你的事件将不会再等待你的视频播放完毕(需要注意)
- this.setWaitMode('video');
复制代码
4、解决了以上问题,基本上可以实现楼主的需求了。
RPGMaker 脚本/学习交流群 :143356012
|
|