CocosCreator3.8研究笔记(十九)CocosCreator UI组件(三)(3)

简介: CocosCreator3.8研究笔记(十九)CocosCreator UI组件(三)

WebView 事件回调参数

名称 功能说明
LOADING 表示网页正在加载过程中。
LOADED 表示网页加载已经完毕。
ERROR 表示网页加载出错了。


代码添加回调方法一:

构造一个 Component.EventHandler 对象,然后设置好对应的 targetcomponenthandlercustomEventData 参数。

import { _decorator, Component, WebView } from 'cc';
const { ccclass, type } = _decorator;
@ccclass('WebViewComponent')
export class WebViewComponent extends Component {
    @type(WebView)
    webview = null;
    start () {
        const eventHandler = new Component.EventHandler();
        eventHandler.target = newTarget; // 这个对象是你的事件处理代码组件所属的节点
        eventHandler.component = "WebViewComponent";
        eventHandler.handler = "callback";
        eventHandler.customEventData = "data";
        this.webview.webviewEvents.push(eventHandler);
    }
    // 注意参数的顺序和类型是固定的
    callback: function(webview, eventType, customEventData) {
        // webview:是一个 webview 组件对象实例
        // eventType:等于 WebView.EventType enum 里面的值
        // customEventData:参数就等于你之前设置的 "data"
    }
}


代码添加回调方法二:

通过 slider.node.on('slide', ...) 的方式来添加,这种方式注册的事件,无法传递 customEventData。


import { _decorator, Component, WebView } from 'cc';
const { ccclass, type } = _decorator;
@ccclass('WebViewCtrl')
export class WebViewComponent extends Component {
    @type(WebView)
    webview = null;
    start () {
        this.webview.node.on(WebView.EventType.LOADED, this.callback, this);
    }
    callback (webview) {
        // 这里的 webview 是一个 WebView 组件对象
        // 对 webview 进行你想要的操作
    }
}


八、VideoPlayer 组件


VideoPlayer 是一种视频播放组件,可通过该组件播放本地和远程视频,支持的视频格式为 mp4


点击 属性检查器 下面的 添加组件 按钮,然后从 UI 组件 中选择 VideoPlayer,即可添加 VideoPlayer 组件到节点上。


1、VideoPlayer 属性

属性 功能说明
Resource Type 视频来源的类型,目前支持本地(LOCAL)视频和远程(REMOTE)视频 URL
Remote URL 当 Resource Type 为 REMOTE 时显示的字段,填入远程视频的 URL
Clip 当 Resource Type 为 LOCAL 时显示的字段,拖拽本地视频的资源到此处来使用
Play On Awake 视频加载后是否自动开始播放?
Current Time 指定从哪个时间点开始播放视频
Volume 视频的音量(0.0 ~ 1.0)
Mute 是否静音视频。静音时设置音量为 0,取消静音时恢复原来的音量
Keep Aspect Ratio 是否保持视频原来的宽高比
Full Screen On Awake 是否全屏播放视频
Stay On Bottom 永远在游戏视图最底层(该属性仅在 Web 平台生效)
Video Player Event 视频播放回调函数,该回调函数会在特定情况被触发,比如播放中,暂时,停止和完成播放。



2、VideoPlayerEvent 事件

属性 功能说明
target 带有脚本组件的节点。
component 脚本组件名称。
handler 指定一个回调函数,当视频开始播放后,暂停时或者结束时都会调用该函数,该函数会传一个事件类型参数进来。
customEventData 用户指定任意的字符串作为事件回调的最后一个参数传入。


3、VideoPlayerEvent 事件回调参数

名称 功能说明
PLAYING 表示视频正在播放中。
PAUSED 表示视频暂停播放。
STOPPED 表示视频已经停止播放。
COMPLETED 表示视频播放完成。
META_LOADED 表示视频的元信息已加载完成,可以调用 getDuration 来获取视频总时长。
READY_TO_PLAY 表示视频准备好了,可以开始播放了。
ERROR 处理视频时触发的错误
CLICKED 表示视频被用户点击了。(只支持 Web 平台)


4、代码添加回调方法一:

构造一个 Component.EventHandler 对象,然后设置好对应的 targetcomponenthandlercustomEventData 参数。

import { _decorator, Component, VideoPlayer } from 'cc';
const { ccclass, type } = _decorator;
@ccclass('VideoPlayerComponent')
export class VideoPlayerComponent extends Component {
    @type(VideoPlayer)
    videoPlayer = null;
    start () {
        const eventHandler = new Component.EventHandler();
        eventHandler.target = newTarget; // 这个对象是你的事件处理代码组件所属的节点
        eventHandler.component = "VideoPlayerComponent";
        eventHandler.handler = "callback";
        eventHandler.customEventData = "data";
        this.videoplayer.videoPlayerEvent.push(eventHandler);
    }
    // 注意参数的顺序和类型是固定的
    callback: function(videoplayer, eventType, customEventData) {
        // 这里的 videoplayer 是一个 VideoPlayer 组件对象实例
        // 这里的 eventType === VideoPlayer.EventType enum 里面的值
        // 这里的 customEventData 参数就等于你之前设置的 "data"
    }
}


5、代码添加回调方法二:

通过 videoplayer.node.on(VideoPlayer.EventType.READY_TO_PLAY, ...) 的方式来添加,也可以注册 meta-loadedclickedplaying 等事件,这些事件的回调函数的参数与 ready-to-play 的参数一致。

注意:这种方式注册的事件,也无法传递 customEventData.

/假设我们在一个组件的 onLoad 方法里面添加事件处理回调,在 callback 函数中进行事件处理:
import { _decorator, Component, VideoPlayer } from 'cc';
const { ccclass, type } = _decorator;
@ccclass('VideoPlayerComponent')
export class VideoPlayerComponent extends Component {
    @type(VideoPlayer)
    videoPlayer = null;
    start () {
        this.videoplayer.node.on(VideoPlayer.EventType.READY_TO_PLAY, this.callback, this);
    }
    callback (videoplayer) {
        // 这里的 videoplayer 表示的是 VideoPlayer 组件
        // 对 videoplayer 进行你想要的操作
    }
}


6、实现 UI 在 VideoPlayer 上渲染

可通过以下两个步骤实现 UI 在 VideoPlayer 上显示:

(1)、 项目设置 -> 宏配置 中的 ENABLE_TRANSPARENT_CANVAS 设置为勾选状态( Canvas 背景支持 alpha 通道)



(2)、 属性检查器 中勾选 VideoPlayer 组件上的 stayOnBottom 属性。



注意

  • 该功能仅支持 Web 平台。
  • 各个浏览器具体效果无法保证一致,跟浏览器是否支持与限制有关。
  • 开启 stayOnBottom 后,将无法正常监听 VideoPlayerEvent 中的 clicked 事件。


7、VideoPlayer播放视频演示

import { _decorator, Node, Component, find, VideoPlayer } from 'cc';
const { ccclass, type } = _decorator;
@ccclass('VideoPlayerComponent')
export class VideoPlayerComponent extends Component {
    @type(VideoPlayer)
    videoPlayer = null;
    start () {
        let canvas = find('Canvas');
        canvas.on(Node.EventType.TOUCH_START, this.playVideo, this);
    }
    playVideo () {
        this.videoplayer.play();
    }
}


注意:一些移动端的浏览器或 WebView 不允许自动播放视频,需要在触摸事件中手动播放视频。

相关文章
|
23天前
「Mac畅玩鸿蒙与硬件46」UI互动应用篇23 - 自定义天气预报组件
本篇将带你实现一个自定义天气预报组件。用户可以通过选择不同城市来获取相应的天气信息,页面会显示当前城市的天气图标、温度及天气描述。这一功能适合用于动态展示天气信息的小型应用。
132 38
|
14天前
|
人工智能 开发框架 JavaScript
LowCodeEngine:阿里开源的企业级低代码开发平台,提供预制的 UI 组件和模板,覆盖完整的研发周期
LowCodeEngine 是阿里巴巴开源的低代码开发框架,旨在通过拖拽、配置等简单操作,帮助开发者快速构建复杂的系统页面,提升开发效率和质量。
66 4
LowCodeEngine:阿里开源的企业级低代码开发平台,提供预制的 UI 组件和模板,覆盖完整的研发周期
|
2月前
|
UED
「Mac畅玩鸿蒙与硬件31」UI互动应用篇8 - 自定义评分星级组件
本篇将带你实现一个自定义评分星级组件,用户可以通过点击星星进行评分,并实时显示评分结果。为了让界面更具吸引力,我们还将添加一只小猫图片作为评分的背景装饰。
85 6
|
2月前
|
前端开发 开发者
「Mac畅玩鸿蒙与硬件21」鸿蒙UI组件篇11 - Canvas 组件的静态进阶应用
在鸿蒙应用开发中,Canvas 组件不仅用于基础绘图,还提供了处理复杂路径和渐变效果的多种手段,帮助开发者实现精美的静态图形。本篇将介绍如何在 Canvas 中绘制复杂路径、创建渐变填充效果。
64 7
「Mac畅玩鸿蒙与硬件21」鸿蒙UI组件篇11 - Canvas 组件的静态进阶应用
|
2月前
|
前端开发 开发者
「Mac畅玩鸿蒙与硬件22」鸿蒙UI组件篇12 - Canvas 组件的动态进阶应用
在鸿蒙应用中,Canvas 组件可以实现丰富的动态效果,适合用于动画和实时更新的场景。本篇将介绍如何在 Canvas 中实现动画循环、动态进度条、旋转和缩放动画,以及性能优化策略。
67 6
|
2月前
|
前端开发 开发者
「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用
自定义组件可以帮助开发者实现复用性强、逻辑清晰的界面模块。通过自定义组件,鸿蒙应用能够提高代码的可维护性,并简化复杂布局的构建。本篇将介绍如何创建自定义组件,如何向组件传递数据,以及如何在不同页面间复用这些组件。
60 5
|
1月前
|
XML 搜索推荐 前端开发
安卓开发中的自定义视图:打造个性化UI组件
在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
2月前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
3月前
|
开发框架 JavaScript 前端开发
鸿蒙NEXT开发声明式UI是咋回事?
【10月更文挑战第15天】鸿蒙NEXT的声明式UI基于ArkTS,提供高效简洁的开发体验。ArkTS扩展了TypeScript,支持声明式UI描述、自定义组件及状态管理。ArkUI框架则提供了丰富的组件、布局计算和动画能力。开发者仅需关注数据变化,UI将自动更新,简化了开发流程。此外,其前后端分层设计与编译时优化确保了高性能运行,利于生态发展。通过组件创建、状态管理和渲染控制等方式,开发者能快速构建高质量的鸿蒙应用。
167 3
|
19天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)