Cocos_鼠标滚轮放缩地图

news2024/10/7 9:25:20

文章目录

  • 前言
  • 一、环境
  • 二、版本一_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; // 小地图节点(不会被缩放)

    @property
    scaleFactor = 0.1; // 缩放因子

    @property
    minScale = 0.5; // 最小缩放比

    @property
    maxScale = 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.coloradmin.cn/o/2193884.html

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

相关文章

task【XTuner微调个人小助手认知】

1 微调前置基础 本节主要重点是带领大家实现个人小助手微调,如果想了解微调相关的基本概念,可以访问XTuner微调前置基础。 2 准备工作 环境安装:我们想要用简单易上手的微调工具包 XTuner 来对模型进行微调的话,第一步是安装 XTu…

Trie树之最大异或对问题

这是C算法基础-数据结构专栏的第二十八篇文章,专栏详情请见此处。 从这篇博客开始,文章将会于每周一更新,望周知! 引入 上次,我们学习了Trie树之字符串统计问题,字符串统计问题中的Trie树节点存储的是字符…

面试官:如何实现分布式系统的限流?

限流的概念以及作用我前一篇文章已经做了介绍:并发限流算法的实践 目录 限流的几种算法 : 1、令牌桶算法 2、漏桶算法 3. 滑动时间窗口计数器算法 5. 全局限流 6. 客户端限流 7. API网关限流 8. 熔断与降级 本篇重点: 具体实现: 限流的几种算法 : 这里主要讲在分…

快速熟悉Nginx

一、Nginx是什么? ‌Nginx是一款高性能、轻量级的Web服务器和反向代理服务器。‌ ‌特点‌:Nginx采用事件驱动的异步非阻塞处理框架,内存占用少,并发能力强,资源消耗低。‌功能‌:Nginx主要用作静态文件服…

Arduino UNO R3自学笔记22 之 Arduino基础篇学习总结

注意:学习和写作过程中,部分资料搜集于互联网,如有侵权请联系删除。 前言:目前将Arduino的大多数基础内容学习了,做个总结。 1.编程语言 学习单片机,在面向单片机编程时,语言是最基础的&#…

给Linux操作系统命令取个别名

一个Linux终端命令的别名通常是其命令的缩写,用来减少键盘输入。命令格式为: alias [alias-name‘original-command’] 其中,alias-name是用户给命令取的别名(新名),original-comm…

whisper 实现语音识别 ASR - python 实现

语音识别(Speech Recognition),同时称为自动语音识别(英语:Automatic Speech Recognition, ASR),将语音音频转换为文字的技术。 whisper是一个通用的语音识别模型,由OpenAI公司开发。…

浸没边界 直接强迫法 圆球绕流验证 阅读笔记

Combined multi-direct forcing and immersed boundary method for simulating flows with moving particles https://doi.org/10.1016/j.ijmultiphaseflow.2007.10.004 他的意思是,不止需要一次的直接强迫 直接强迫的次数与误差成低于二阶的关系 不知道是不是一阶…

输电线路悬垂线夹检测无人机航拍图像数据集,总共1600左右图片,悬垂线夹识别,标注为voc格式

输电线路悬垂线夹检测无人机航拍图像数据集,总共1600左右图片,悬垂线夹识别,标注为voc格式 输电线路悬垂线夹检测无人机航拍图像数据集介绍 数据集名称 输电线路悬垂线夹检测数据集 (Transmission Line Fittings Detection Dataset) 数据集…

sv标准研读第十二章-过程性编程语句

书接上回: sv标准研读第一章-综述 sv标准研读第二章-标准引用 sv标准研读第三章-设计和验证的building block sv标准研读第四章-时间调度机制 sv标准研读第五章-词法 sv标准研读第六章-数据类型 sv标准研读第七章-聚合数据类型 sv标准研读第八章-class sv标…

使用链地址法实现哈希表(哈希函数为除留余数法)

该代码实现了一个哈希表,使用拉链法(链地址法)来解决哈希冲突,核心思想是通过链表存储哈希冲突的数据。哈希表的大小被设置为 MAX_SIZE,其中哈希函数采用除留余数法。以下是代码的详细解释和总结: #includ…

C++关于链表基础知识

单链表 // 结点的定义 template <class T> struct Node { T data ; Node <T> *next; //指向下一个node 的类型与本node相同 } // 最后一个node指针指向Null 生成结点&#xff1a; Node <T> * p new Node < T>; 为结点赋值: p-> data …

LLM+知识图谱新工具! iText2KG:使用大型语言模型构建增量知识图谱

iText2KG是一个基于大型语言模型的增量知识图谱构建工具&#xff0c;通过从文本文档中提取实体和关系来逐步构建知识图谱。该工具具有零样本学习能力&#xff0c;能够在无需特定训练的情况下&#xff0c;在多个领域中进行知识提取。它包括文档提炼、实体提取和关系提取模块&…

BM1 反转链表

要求 代码 /*** struct ListNode {* int val;* struct ListNode *next;* };*/ /*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可*** param head ListNode类* return ListNode类*/ struct ListNode* ReverseList(struct …

【LeetCode-热题100-128题】官方题解好像有误

最长连续序列 题目链接&#xff1a;https://leetcode.cn/problems/longest-consecutive-sequence/?envTypestudy-plan-v2&envIdtop-100-liked 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的…

Linux高阶——0928—Github本地仓库与云端仓库关联

1、安装代理软件 steam 选择Github和系统代理模式&#xff0c;一键加速即可 2、 安装Git 3、访问Github网站&#xff0c;创建新用户 4、Github探索 &#xff08;1&#xff09;Explore探索标签 &#xff08;2&#xff09;工程结构 用户名/仓库名 自述文件&#xff0c;用markdo…

【Llamaindex RAG实践】

基础任务 (完成此任务即完成闯关) 任务要求&#xff1a;基于 LlamaIndex 构建自己的 RAG 知识库&#xff0c;寻找一个问题 A 在使用 LlamaIndex 之前InternLM2-Chat-1.8B模型不会回答&#xff0c;借助 LlamaIndex 后 InternLM2-Chat-1.8B 模型具备回答 A 的能力&#xff0c;截…

每日OJ题_牛客_重排字符串_贪心_C++_Java

目录 牛客_重排字符串_贪心 题目解析 C代码 Java代码 牛客_重排字符串_贪心 重排字符串 (nowcoder.com) 描述&#xff1a; 小红拿到了一个只由小写字母组成的字符串。她准备把这个字符串重排&#xff08;只改变字母的顺序&#xff0c;不改变数量&#xff09; …

滑动窗口--(中篇)

将X减到0的最小操作数 给你一个整数数组 nums 和一个整数 x 。每一次操作时&#xff0c;你应当移除数组 nums 最左边或最右边的元素&#xff0c;然后从 x 中减去该元素的值。请注意&#xff0c;需要 修改 数组以供接下来的操作使用。 如果可以将 x 恰好 减到 0 &#xff0c;返…

Tomcat 项目配置指南

在实际工作中&#xff0c;我们所维护的项目可能与我们平时做的项目不一样。其中一种情况就是需要自己配置Tomcat服务。 下面笔者为大家介绍Tomcat基础的配置以及可能遇到的问题。 文章目录 一、Tomcat 配置二、常见报错及解决方案参考 一、Tomcat 配置 1. 下载 Tomcat 从 Apa…