【Cocos Creator 3.x】实现放大镜效果

这篇具有很好参考价值的文章主要介绍了【Cocos Creator 3.x】实现放大镜效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在某一些类型的游戏,如果鉴宝类的游戏、找茬类的游戏、射击瞄准类的游戏等,对于游戏场景中某个部分进行放大缩小,是必不可少的功能,那么如何实现放大镜的效果呢?

cocos crame 放大,cocos creator,typescript,cocos-creator,游戏引擎,typescript

思路

核心部分,是对于摄像机(Camera)的运用。首先,需要了解摄像机的原理,和现实生活中的照相机一样,相机是用来拍摄的,在游戏中,相当于是人的眼睛,用于观察游戏世界。相机拍摄之后的画面,生成的照片,也就是 Texture,最终会显示在屏幕上。
实现放大镜效果,需要创建一个单独的摄像机,用于将局部的细节进行放大,然后调整相机的缩放比例,使局部细节的部分放大或者缩小。最后配合 Mash 组件将额外的部分进行裁剪,只留下我们想要的局部细节部分。

扩展部分

摄像机目前提供 2种模式: ORTHO 和 PERSPECTIVE 。ORTHO 是正交投影模式,也叫做"平行投影"。原理是将图像通过平行光投影到画面上,主要用于拍摄 2D 画面。PERSPECTIVE 是透视投影,它是锥形的成像模式,是从某个投影中心将物体投影到单一投影面上所得到的透视图,成像效果远小近大,与人眼观察物体时的视觉效果非常接近,主要用于拍摄 3D 画面。
简单理解,当设置为 ORTHO 模式的 Camera 是正交相机,也就是 2D 相机。当设置为 PERSPECTIVE 模式的 Camera 是透视相机,也就是 3D 相机。

多个相机内容叠加?怎么管理?

这个需要结合 Camera 的 Visibility 和节点的 Layer 共同决定的分组渲染。当相机启用的情况下,如果节点 A 的 Layer 设置为 UI_2D,如果相机 C 的 Visibility 里面的 UI_2D 有勾选,那么这个相机 C 会渲染这个节点 A 。如果相机 C 的 Visibility 里面的 UI_2D 没有勾选,那么这个相机 C 不会渲染这个节点 A。

多个相机内容渲染,如何决定哪个相机先渲染?

相机 Camera 里面有 priority 优先级属性。这个数值越小,越先渲染。比如相机 A 的 priority 为 0, 相机 B 的 priority 为 1。那么相机 A 的渲染内容会先渲染,然后渲染相机 B 的渲染内容。但是因为绘制顺序的缘故,当我们最终看绘制结果的时候,会看到相机 B 的渲染内容是盖在相机 A 的渲染内容上的。

相机内容怎么清除?

相机提供了多种的 Clear Flags 设置。DONT_CLEAR 是不清除相机的内容。DEPTH_ONLY 是只清空深度。SOLID_COLOR 是会清空颜色、深度与模板缓冲。SKYBOX 是启用天空盒,只清空深度。
如果有设置清空颜色,那么会使用 Clear Color 去清空没有被该相机渲染的部分。

实现步骤

  • 添加一个放大镜的 UI,并添加一个 Sprite 组件用于放大镜的内容显示。在 Sprite 组件上添加一个 Mask 组件,用于将裁剪多余的显示内容。
    cocos crame 放大,cocos creator,typescript,cocos-creator,游戏引擎,typescript
  • 添加一个专门用于渲染放大镜 UI 的摄像机 CameraMag。添加一个用于渲染地图和放大镜的摄像机 CameraBg。为什么需要 3个摄像机?Camera 是用于渲染地形的,最终我们会将 Camera 渲染的内容进行放大或者缩小,最终会渲染到放大镜中渲染的内容。CameraMag 只是用于渲染放大镜的UI。因为我们需要将放大镜的UI和地图拆分成不同的层级,所以我们让 CameraMag 只渲染放大镜的 UI,而放大镜的 UI 的 Layer 设置为单独的 magnifier。cocos crame 放大,cocos creator,typescript,cocos-creator,游戏引擎,typescript
  • 通过代码
initCamera (){
    const visibleRect = view.getVisibleSize();

    let rendertex = new RenderTexture();
    rendertex.initialize({ width: visibleRect.width, height:visibleRect.height });
    
    let sp = new SpriteFrame();
    this.cameraNode.getComponent(Camera)!.targetTexture = rendertex;
    sp.texture = rendertex;
    this.spriteNode.getComponent(Sprite)!.spriteFrame = sp;
    this.spriteNode.setScale(this.scaleFactor, this.scaleFactor, 1);
}

通过新建 RenderTexture ,之后将 RenderTexture 设置到相机的 targetTexture 上,那么该相机全部的渲染内容都会渲染到 RenderTexture 上。之后我们将 RenderTexture 挂载到放大镜的 Sprite 组件上进行显示。

  • 添加一些进度条,进行倍数的调节。
    cocos crame 放大,cocos creator,typescript,cocos-creator,游戏引擎,typescript

总结

放大镜的效果,是不是很容易掌握。主要还是需要理解 相机的原理,RenderTexture 以及分组渲染等。

参考示例

https://gitee.com/yeshao2069/CocosCreatorDemos/tree/v3.7.x/demo/2d/Creator3.7.0_2D_Magnifier文章来源地址https://www.toymoban.com/news/detail-810484.html

到了这里,关于【Cocos Creator 3.x】实现放大镜效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Axure视频教程】放大镜效果

    今天教大家在Axure里如何制作放大镜效果的原型模板,鼠标移入小图后,会出现一个方框根跟随鼠标移动,右侧会放大显示该方框区域的内容,具体效果可以参考下方视频。该教程从0开始制作,手把手教学,无论是新手小白还是有一定基础的同学,都可以学习的哦。 【视频教

    2024年02月13日
    浏览(61)
  • Cocos creator(2d) 使用 shader + uv 实现单张图片衔接滚动效果

    在游戏中,当我们需要让背景图片无缝衔接无限滚动时(打飞机这种背景一直滚动,或者肉鸽游戏地图一直在走等等),通常的做法是 在游戏中放两个背景node,在update中控制这两张背景图片的移动,并让其收尾衔接即可。(具体代码忽略) 可是在肉鸽类游戏中,玩家的走向是全方

    2024年02月13日
    浏览(116)
  • 20230401----重返学习-冒泡相关事件-拖拽-放大镜

    mouseenter/mouseleave与mouseover/mouseout mouseover/mouseout 有冒泡,忽略层级之间的关系 mouseenter/mouseleave 没冒泡,不会忽略层级之间的关系 事件委托 事件委托: 也叫事件代理,将绑定的事件委托给祖先元素,祖先元素监听事件,并利用e.target来分配给当前元素 原理是: 事件冒泡机制 事

    2023年04月08日
    浏览(40)
  • 记录--js小练习(弹幕、 电梯导航、 倒计时、 随机点名、 购物放大镜)

    弹幕 电梯导航 倒计时 随机点名 购物放大镜 效果预览 功能:输入弹幕内容,按下回车显示一条弹幕(弹幕颜色、字体随机生成) 思路:设置按钮抬起事件,在事件中判断如果按下的是回车键则将输入框中替换掉敏感词的数据追加到标签中,字体的颜色、大小、位置按照生成

    2024年02月04日
    浏览(62)
  • Cocos Creator实现不规则区域点击

    在CocosCreator中,点击图片透明区域依然触发节点的点击事件。但在web开发中,可以使用Inkscape、SvgPathEditor等矢量图编辑器转为SVG,或者直接从figma中导出SVG,然后监听不规则图形事件。 以地图边界高亮为例:html 类似地图的不规则图形事件处理 但Cocos Creator中Sprite目前支持的格

    2024年02月06日
    浏览(48)
  • 进击3D游戏界!Cocos Creator快速实现骨骼动画交互!

    最近公司需要转型,方向为 元宇宙 , AI , 数字人 , 区块链 等方向,博主为了跟上时代的步伐 为我们 伟大的公司 献出我的能力 (广告费5毛一条,公司财务看到麻烦转我一下) 便对 Web3.0 以及 3D可视化 这些前沿技术进行了研究,主要的研究方向为 VR (已概览技术栈有three.js,thing.js,Coc

    2024年02月13日
    浏览(100)
  • 【基于Cocos Creator实现的赛车游戏】9.实现汽车节点的控制逻辑

     转载 知识星球 | 深度连接铁杆粉丝,运营高品质社群,知识变现的工具 项目地址: 赛车小游戏-基于Cocos Creator 3.5版本实现: 课程的源码,基于Cocos Creator 3.5版本实现 在上一节的课程中,您已经实现了通过触控给刚体施加里的方式来对汽车节点进行简单的控制。在这一章节中

    2024年02月07日
    浏览(74)
  • 最新开源方案!Cocos Creator 写一个ECS框架+行为树,实现格斗游戏 AI

    引言: 实现游戏 AI 的方式有很多,目前最为常用的主要有有限状态机和行为树。和有限状态机相比,行为树有更好的可扩展性和灵活性,能实现更复杂的 AI 需求。开发者  honmono 在 Cocos Creator 中用一个  ECS + BehaviorTree 框架 实现了一个格斗 AI Demo,一起来看看他的方案。 De

    2024年02月12日
    浏览(50)
  • Cocos Creator3.8 项目实战(二)cocos creator编辑器中绑定事件引发的bug解决

    问题描述: 编辑器里面多个按钮绑定同一个脚本,并配置事件,脚本中有其他消息监听,引起逻辑混乱。 问题原因: 编辑器里面多个按钮绑定同一个脚本, 每次绑定一个按钮事件,就会导致加载一次脚本 ,如上绑定了多个按钮的事件,脚本也就被加载多次,导致初始化接

    2024年02月07日
    浏览(58)
  • Cocos Creator问题汇总

    [Window] Cannot read property ‘cameraPriority’ of null node.on(Node.EventType.TOUCH_END, this.onBlockClicked, this); 解决 :监听的时候,node节点上必须有UITransform组件 Camera priority error - Cocos Creator - Cocos Forums 新建的prefab在运行的时候ui不显示,只能看到按钮上的label文本内容。 解决 :检查是否有C

    2024年02月13日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包