Cocos_鼠标滚轮放缩地图

文章目录

  • 前言
  • 一、环境
  • 二、版本一_code
    • 2.分析
      • 属性
      • 方法
      • 详细分析
        • 详细分析onLoad()
        • onMouseWheel(event)详细分析
  • 总结


前言

学习笔记,请多多斧正。


一、环境

在这里插入图片描述
在这里插入图片描述
通过精灵rect放置脚本实现鼠标滚轮放缩地图。

二、版本一_code

import { _decorator, Component, Node } from 'cc';
const { ccclass, property } = _decorator;@ccclass('MapZoom')
export class MapZoom extends Component {@property(Node)mainMapNode = null; // 大地图节点@property(Node)miniMapNode = null; // 小地图节点(不会被缩放)@propertyscaleFactor = 0.1; // 缩放因子@propertyminScale = 0.5; // 最小缩放比@propertymaxScale = 3.0; // 最大缩放比onLoad() {// 绑定鼠标滚轮事件this.node.on(Node.EventType.MOUSE_WHEEL, this.onMouseWheel, this);}onMouseWheel(event) {// 获取当前大地图缩放比例let currentScale = this.mainMapNode.scale.x;// 根据滚动方向调整缩放比例if (event.getScrollY() > 0) {// 向上滚动,放大currentScale += this.scaleFactor;} else {// 向下滚动,缩小currentScale -= this.scaleFactor;}// 限制缩放范围currentScale = Math.max(this.minScale, Math.min(currentScale, this.maxScale));// 应用新的缩放值,只对大地图进行设置this.mainMapNode.setScale(currentScale, currentScale, currentScale);// 小地图保持原样,不做任何修改}
}

2.分析

@ccclass('MapZoom'): 这是一个装饰器,用于定义一个新的 Cocos Creator 组件类,名为 MapZoom。
extends Component: MapZoom 类继承自 Cocos Creator 的 Component 基类,意味着它可以作为场景中的一个组件使用。

属性

  • mainMapNode:
    类型:Node
    描述:代表大地图的节点。这个节点会根据用户的鼠标滚轮输入进行缩放。
  • miniMapNode:
    类型:Node
    描述:表示小地图的节点。小地图不会受到缩放影响,因此在鼠标滚动时不进行修改。
  • scaleFactor:
    类型:number
    描述:每次鼠标滚轮滚动时,缩放的增量。默认值为 0.1。
  • minScale:
    类型:number
    描述:大地图可缩放的最小比例。默认值为 0.5。
  • maxScale:
    类型:number
    描述:大地图可缩放的最大比例。默认值为 3.0。

方法

onLoad()

  • 在组件加载时自动调用该方法。它主要用于设置事件监听器。
  • this.node.on(Node.EventType.MOUSE_WHEEL, this.onMouseWheel, this): 绑定鼠标滚轮事件,当用户滚动鼠标时,会触发 onMouseWheel 方法。

onMouseWheel(event)

  • 这是处理鼠标滚轮事件的主要方法。
  • 获取当前缩放比例:使用 this.mainMapNode.scale.x 获取当前大地图的缩放值。
  • 缩放调整:
    • 如果滚轮向上滚动 (event.getScrollY() > 0),则增加缩放值。
    • 如果滚轮向下滚动,则减少缩放值。
  • 限制缩放范围:
    • 使用 Math.max()Math.min() 来确保缩放值在设定的最小和最大范围内。
  • 应用缩放:
    • 调用 this.mainMapNode.setScale(currentScale, currentScale, currentScale) 来更新大地图的缩放值。
    • 小地图保持不变,不做处理。

详细分析

详细分析onLoad()
onLoad() {// 绑定鼠标滚轮事件this.node.on(Node.EventType.MOUSE_WHEEL, this.onMouseWheel, this);
}
  1. 生命周期方法
    onLoad():
    这是 Cocos Creator 组件的一部分,表示当组件被实例化并添加到场景中时调用的方法。在这个阶段,所有的属性都已初始化,并且可以访问组件的节点和其他资源。
  2. 事件绑定
  • this.node.on(...):
    this.node 是当前组件所附加的节点(Node)。on 方法用于注册事件监听器。
  • Node.EventType.MOUSE_WHEEL:
    这是一个预定义的事件类型,表示鼠标滚轮事件。它会在用户滚动鼠标滚轮时触发。
  • this.onMouseWheel:
    这是事件处理函数的引用。当鼠标滚轮事件被触发时,Cocos Creator 会调用这个方法来处理事件。在本例中,当用户滚动鼠标时,将会执行 onMouseWheel 方法。
  • this:
    这是上下文参数,用于指定 onMouseWheel 方法中的 this 引用。通过传入 this,确保在 onMouseWheel 方法被调用时,this 指向当前的 MapZoom 实例,而不是可能的其他对象(如事件的源对象)。
onMouseWheel(event)详细分析
onMouseWheel(event) {// 获取当前大地图缩放比例let currentScale = this.mainMapNode.scale.x;// 根据滚动方向调整缩放比例if (event.getScrollY() > 0) {// 向上滚动,放大currentScale += this.scaleFactor;} else {// 向下滚动,缩小currentScale -= this.scaleFactor;}// 限制缩放范围currentScale = Math.max(this.minScale, Math.min(currentScale, this.maxScale));// 应用新的缩放值,只对大地图进行设置this.mainMapNode.setScale(currentScale, currentScale, currentScale);// 小地图保持原样,不做任何修改}
}
  1. 获取当前大地图缩放比例
let currentScale = this.mainMapNode.scale.x;
  • this.mainMapNode: 这是一个指向大地图节点的引用。
  • scale.x: 获取大地图当前的缩放比例(通常只需获取 x 轴的缩放比例,因为在2D图形中,通常三个轴的缩放是相同的)。
  1. 根据鼠标滚动方向调整缩放比例
if (event.getScrollY() > 0) {// 向上滚动,放大currentScale += this.scaleFactor;
} else {// 向下滚动,缩小currentScale -= this.scaleFactor;
}
  • event.getScrollY(): 获取鼠标滚轮的滚动值。如果返回值大于0,则表示鼠标向上滚动;如果返回值小于0,则表示向下滚动。
  • this.scaleFactor: 一个预定义的变量,决定每次滚轮操作时缩放的大小。
  1. 限制缩放范围
currentScale = Math.max(this.minScale, Math.min(currentScale, this.maxScale));
  • 使用 setScale() 方法将计算后的 currentScale 应用到大地图节点上,更新其视觉表现。这会影响到渲染和用户看到的地图。

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/55776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Buildpacks构建Docker镜像

## 使用Buildpacks构建Docker镜像 ![](../assets/运维手册-Buildpacks-Buildpacks.io.png) ### Buildpacks简介 与Dockerfile相比,Buildpacks为构建应用程序提供了更高层次的抽象。具体来说,Buildpacks: * 提供一个平衡的控制,…

【Python】Conda离线执行命令

以下链接证明了想要离线使用conda命令的方法 启用离线模式 — Anaconda documentation 基本上大部分的命令都会提供网络选项 例如creat命令 conda create — conda 24.7.1 文档 - Conda 文档

多区域OSPF路由协议

前言 之前也有过关于OSPF路由协议的博客,但都不是很满意,不是很完整。现在也是听老师讲解完OSPF路由协议,感触良多,所以这里重新整理一遍。这次应该是会满意的 一些相关概念 链路状态 链路指路由器上的一个接口,链路状…

毕设分享 基于协同过滤的电影推荐系统

文章目录 0 简介1 设计概要2 课题背景和目的3 协同过滤算法原理3.1 基于用户的协同过滤推荐算法实现原理3.1.1 步骤13.1.2 步骤23.1.3 步骤33.1.4 步骤4 4 系统实现4.1 开发环境4.2 系统功能描述4.3 系统数据流程4.3.1 用户端数据流程4.3.2 管理员端数据流程 4.4 系统功能设计 …

信息安全工程师(28)机房安全分析与防护

前言 机房安全分析与防护是一个复杂而细致的过程,涉及到物理安全、环境控制、电力供应、数据安全、设备管理、人员管理以及紧急预案等多个方面。 一、机房安全分析 1. 物理安全威胁 非法入侵:未经授权的人员可能通过门窗、通风口等进入机房,…

【LeetCode】每日一题 2024_10_10 优质数对的总数 I(暴力/哈希)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动! 题目:优质数对的总数 I 代码与解题思路 简单题先暴力~ 直接对着题意模拟即可,力扣上只要是标着简单标签的题目,不用犹豫,直接对他使用暴力吧! …

LabVIEW混合控制器质量检测

随着工业自动化水平的提高,对控制器的精度、稳定性、可靠性要求也在不断上升。特别是在工程机械、自动化生产、风力发电等领域,传统的质量检测方法已无法满足现代工业的高要求。因此,开发一套自动化、精确、可扩展的混合控制器质量检测平台成…

Pikachu-Cross-Site Scripting-xss盲打

xss盲打,不是一种漏洞类型,而是一个攻击场景;在前端、或者在当前页面是看不到攻击结果;而是在后端、在别的页面才看到结果。 登陆后台,查看结果;

Extreme Compression of Large Language Models via Additive Quantization阅读

文章目录 Abstract1. Introduction2. Background & Related Work2.1. LLM量化2.2. 最近邻搜索的量化 3.AQLM:Additive Quantization for LLMs3.1. 概述3.1.0 补充**步骤说明****举例说明** 3.2. 阶段1:代码的波束搜索3.3. 阶段2:码本更新3.4. 阶段3&…

Qt Creator 通过python解释器调用*.py

全是看了大佬们的帖子,结合chatGPT才揉出来。在此做个记录。 安装python在Qt Creator *.pro 文件中配置好环境来个简单的example.py调用代码安装pip添加opencv等库调用包含了opencv库的py代码成功 *.pro配置: INCLUDEPATH C:\Users\xuanm\AppData\Lo…

操作系统中的并发控制——使用条件变量同步

本期主题: 操作系统中的并发控制,条件变量 往期链接: linux设备驱动中的并发操作系统中的多线程问题——原子操作、自旋锁的底层实现操作系统并发控制——使用互斥锁实现同步 操作系统并发控制之条件变量同步 1. 问题描述2. 条件变量的API讲…

云栖实录 | Hologres3.0全新升级:一体化实时湖仓平台

本文根据2024云栖大会实录整理而成,演讲信息如下: 演讲人: 姜伟华 | 阿里云智能集团资深技术专家、Hologres 负责人 丁 烨 | 阿里云智能集团产品专家、Hologres 产品负责人 活动: 2024 云栖大会 - 商用大数据计算与分析平台论…

Python中的数据可视化:从入门到进阶

数据可视化是数据分析和科学计算中的重要环节,它通过图形化的方式呈现数据,使复杂的统计信息变得直观易懂。Python提供了多种强大的库来支持数据可视化,如Matplotlib、Seaborn、Plotly等。本文将从基础到进阶,详细介绍如何使用这些…

[单master节点k8s部署]31.ceph分布式存储(二)

Ceph配置 Ceph集群通常是一个独立的存储集群,可以部署在 Kubernetes 集群之外。Ceph 提供分布式存储服务,能够通过 RADOS、CephFS、RBD(块存储)、和 RGW(对象存储)等方式与 Kubernetes 集成。即使 Ceph 部…

基于深度学习的手势控制模型

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有:中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等,曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝,拥有2篇国家级人工智能发明专利。 1. 项目简…

Nexpose 6.6.271 发布下载,新增功能概览

Nexpose 6.6.271 for Linux & Windows - 漏洞扫描 Rapid7 Vulnerability Management, release Sep 26, 2024 请访问原文链接:https://sysin.org/blog/nexpose-6/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.or…

安全工具 | 搭建带有 Web 仪表板的Interact.sh

介绍 Interactsh 是一个用于检测带外交互的开源工具。它是一种旨在检测导致外部交互的漏洞的工具。本文将主要介绍在子域上设置私有 Interact.sh 服务器以及部署其 Web 应用程序。只需一个 AWS EC2 或 VPS 实例和一个域。 要求 •具有静态IP的AWS EC2 / VPS •拥有自己的域…

实例讲解电动汽车VIN写入规则及Simulink建模方法(三)——VIN设置状态反馈及Simulink建模方法

目录 一、整车VIN设置状态反馈规则 二、整车VIN设置状态反馈设置策略 1、VIN设置状态判定 2、VIN设置状态反馈发送 三、整车VIN设置状态反馈Simulink建模 1、VIN设置状态判定 2、VIN设置状态反馈发送 3、整车VIN设置状态反馈设置完整Simulink模型 四、总结 一、整车VI…

Node.js入门——fs、path模块、URL端口号、模块化导入导出、包、npm软件包管理器

Node.js入门 1.介绍 定义:跨平台的JS运行环境,使开发者可以搭建服务器端的JS应用程序作用:使用Node.Js编写服务器端代码Node.js是基于Chrome V8引擎进行封装,Node中没有BOM和DOM 2.fs模块-读写文件 定义:封装了与…

WIFI网速不够是不是光猫的“路由模式”和“桥接模式”配置错了?

光猫(光纤调制解调器)是一种用于将光纤信号转换为数字信号的设备,通常用于家庭或企业网络中。光猫可以在不同的工作模式下运行,其中最常见的两种模式是“路由模式”和“桥接模式”。以下是这两种模式的详细解释及其优缺点。 一、路…