Cocos_鼠标滚轮放缩地图

devtools/2024/10/19 23:47:46/

文章目录

  • 前言
  • 一、环境
  • 二、版本一_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.ppmy.cn/devtools/125264.html

相关文章

GaussDB高智能--数据库智能化发展史自治运维技术

目录 1 数据库智能化发展史 2 自治运维技术 2.1 智能监测 2.2 趋势预测 2.3 异常检测 1 数据库智能化发展史 云原生为迎接智能化提供了基础条件,智能化是GaussDB的新的牵引方向,两者相辅相成,互相促进。在智能化出现之前,数…

C++:模拟stack、queue

目录 容器适配器 定义 特点 deque deque的优势与缺点 选择deque作为stack和queue的底层默认容器的原因 模拟实现stack 模拟实现queue 容器适配器 定义 在C标准模板库(STL)中,容器适配器(Container Adapters)是…

【黑马软件测试三】web功能测试、抓包

阶段三,内容看情况略过 Web功能测试链接测试表单测试搜索测试删除测试cookies/session测试数据库测试抓包工具的使用一个APP的完整测试流程熟悉APP业务流程功能测试APP专项测试兼容性安装、卸载和升级交叉测试(干扰测试)push消息测试用户体验测试 Web功能测试 通过…

详细分析Spring Framework中 @ConditionalOnProperty的基本知识(附Demo)

目录 前言1. 基本知识2. Demo 前言 基本的Java知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新) 从实战中学习启发 1. 基本知识 Conditiona…

服务器上的 nodejs 启动后,如何通过 IP 来访问

要在服务器上启动 Node.js 应用并通过 IP 地址访问,你需要确保几个关键步骤已经正确完成。以下是一个简要的指南: 1. 启动 Node.js 应用 首先,确保你的 Node.js 应用已经正确启动,并且正在监听一个网络接口(通常是所…

基于卷积神经网络的书法字体识别系统,resnet50,mobilenet模型【pytorch框架+python】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示: 基于卷积神经网络的书法字体识别系统,resnet50,mobilenet【pytorch框架,python,tkinter】_哔哩哔哩_bilibili (一)简介 基于卷…

【算法篇】三道题理解什么是递归,回溯和剪枝

递归,回溯,剪枝 想必大家再学习算法知识的路上经常听到回溯,剪枝类似的概念,对于初学者来说,很容易把他们理解成一种新的算法思想,其实回溯和剪枝只是在递归的基础上稍加修改,对于解决某些特定问…

81 NAT-静态NAT

一 NAT 出口方向实验 1 配置接口的IP地址 2 配置nat 静态映射 3 测试 无法ping 通 202.38.1.100 4 接口上开启静态Nat映射规则 [FW-Router-BJ-GigabitEthernet0/1]nat static enable 6 5 查看配置 [FW-Router-BJ]display nat static 6 测试 7 查看NAT 会话状态 8 静态…