设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 9353|回复: 18
打印 上一主题 下一主题

[原创发布] 寻找能写出这个插件的大佬 寻找跟写出第一个视频对话框...

[复制链接]

Lv1.梦旅人

梦石
0
星屑
95
在线时间
211 小时
注册时间
2011-8-16
帖子
300
1
发表于 2020-2-16 09:59:59 | 显示全部楼层
虽然没有给你做一个在对话框里显示视频的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任何时候都是可见得。
  1. /**
  2. * @static
  3. * @method _updateVisibility
  4. * @param {Boolean} videoVisible
  5. * @private
  6. */
  7. Graphics._updateVisibility = function(videoVisible) {
  8.     // this._video.style.opacity = videoVisible ? 1 : 0;
  9.     // this._canvas.style.opacity = videoVisible ? 0 : 1;

  10.     this._video.style.opacity = videoVisible ? 1 : 0;
  11.     this._canvas.style.opacity = 1;
  12. };
复制代码

顺便提一句,我对pixi.js的render操作流程完全没有了解,所以在操作canvas逐帧绘制video的时候遇到了无论如何操作canvas都不显示的问题。
盲测是撞到了pixi的优化机制怀里,但是又懒得去找,直接在drawImage后面跟了一个clearRect(width, height, 1, 1)来触发Canvas的刷新,所以如果你在搞这块需要注意一下相关问题。

3、小问题:播放视频时游戏画面暂停:事件解释器被挂起
还有一点就是原版机制,在播放视频的时候Game_Interpreter事件解释器会被挂起,事件将中止运行(setWaitMode)。
  1. // Play Movie
  2. Game_Interpreter.prototype.command261 = function() {
  3.     if (!$gameMessage.isBusy()) {
  4.         var name = this._params[0];
  5.         if (name.length > 0) {
  6.             var ext = this.videoFileExt();
  7.             console.log('movies/' + name + ext)
  8.             Graphics.playVideo('movies/' + name + ext);
  9.             this.setWaitMode('video');
  10.         }
  11.         this._index++;
  12.     }
  13.     return false;
  14. };
复制代码
如果你希望Game_Interpreter在播放视频的时候正常工作,推荐使用脚本来播放视频:
  1. Graphics.playVideo('movies/视频文件名.后缀’);
复制代码
虽然你绕过了 setWaitMode,事件解释器不会再被挂起,你可以在播放视频的时候自由使用事件,但是这也代表你的事件将不会再等待你的视频播放完毕(需要注意)
  1. this.setWaitMode('video');
复制代码

4、解决了以上问题,基本上可以实现楼主的需求了。

RPGMaker 脚本/学习交流群 :143356012


RPGMaker 脚本/学习交流群:143356012
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-9 04:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表