超越基础的巧妙之处:鼠标和触摸事件

超越基础的巧妙之处:鼠标和触摸事件

在上一个 Crafty 系列中,您了解了使用键盘移动元素的不同方法。虽然键盘可以帮助您创建各种游戏,但某些情况下需要您控制不同的鼠标事件以使游戏更加有趣。例如,考虑一个气球出现在屏幕上随机位置的游戏。如果用户需要点击气球来得分,那么您肯定需要一个鼠标组件。

同样,当您为移动设备开发游戏时,Keyboard 组件将没有任何用处。在这种情况下,您将必须依赖触摸组件来创建游戏。在本教程中,您将了解 Crafty 中的鼠标和触摸组件。

鼠标组件

Mouse 组件用于向实体添加基本的鼠标事件。以下是该组件中包含的所有事件的列表:

MouseOver:当鼠标进入实体内部时触发此事件。MouseOut:当鼠标离开实体时触发此事件。

MouseDown:当在实体上按下鼠标按钮时会触发此事件。

MouseUp:当在实体内释放鼠标按钮时会触发此事件。

Click:当在实体内单击鼠标按钮时会触发此事件。

DoubleClick:当鼠标按钮双击实体时会触发此事件。

MouseMove:当鼠标在实体内移动时会触发此事件。

请记住,仅当您向实体添加了 Mouse 组件时,鼠标事件才会在实体上触发。以下是将 MouseMove 事件绑定到下面演示中的框的代码:

var Box = Crafty.e("2D, Canvas, Color, Mouse")  .attr({    x: 200,    y: 100,    w: 200,    h: 200  })  .color("black")  .origin("center")  .bind('MouseMove', function() {    this.rotation += 1;  });

盒子绑定了 MouseMove 事件后,鼠标在盒子上每移动一次,盒子就会旋转 1 度。 .origin() 方法用于将盒子的旋转点设置为中心。它还可以采用其他值,例如 "左上角""右下角" 等。

尝试将光标移入和移出演示中的框。在框内按住鼠标按钮将触发 MouseDown 事件并将框的颜色更改为红色。

MouseEvent 对象也作为参数传递给所有这些鼠标事件的回调函数。它包含与该特定鼠标事件相关的所有数据。

您还可以使用 mouseButton 属性检查用户单击了哪个鼠标按钮。例如,可以使用 Crafty.mouseButtons.LEFT 检测左键单击。同样,可以使用 Crafty.mouseButtons.MIDDLE 检测中键单击。

鼠标拖动组件

MouseDrag组件提供了具有不同拖放鼠标事件的实体。但是,如果实体本身无法拖放,那么添加这些事件就没有多大意义。您可以使用 Draggable 组件向实体添加拖放功能。该组件侦听来自 MouseDrag 组件的事件并相应地移动给定的实体。 MouseDrag 组件会自动添加到具有 Draggable 组件的任何实体。

Draggable 组件具有三个方法:.enableDrag().disableDrag().dragDirection().前两个方法分别启用和禁用实体上的拖动。第三种方法用于设置拖动方向。

默认情况下,实体将向光标移动的任何方向移动。但是,您可以使用 this.dragDirection({x:0, y:1}) 将实体的运动限制为垂直方向。同样,您可以使用 this.dragDirection({x:1, y:0}) 强制实体仅沿水平方向移动。

您还可以直接以度为单位指定方向。例如,要将元素移动 45 度,您只需使用 this.dragDirection(45) 而不是 this.dragDirection({x:1, y:1} )

巧文书 巧文书

巧文书是一款AI写标书、AI写方案的产品。通过自研的先进AI大模型,精准解析招标文件,智能生成投标内容。

巧文书 61 查看详情 巧文书

除了拖放元素之外,还需要知道拖动何时开始和停止。这可以通过使用 StartDragStopDrag 事件来完成。还有一个 Dragging 事件,该事件在拖动实体时触发。

以下是在下面的演示中拖动红色框的代码:

var hBox = Crafty.e("2D, Canvas, Color, Draggable")  .attr({    x: 50,    y: 50,    w: 50,    h: 50  })  .color("red")  .dragDirection(0)  .bind('Dragging', function(evt) {    this.color("black");  })  .bind('StopDrag', function(evt) {    this.color("red");  });

设置框的宽度、高度和位置后,我使用 .dragDirection(0) 来限制框在水平方向的移动。我还使用 .bind() 方法将实体绑定到 DraggingStopDrag 方法。

将颜色更改为黑色可以向用户表明实体当前正在被拖动。您还可以使用 StartDrag 事件代替 Dragging 因为实体的颜色只需要更改一次。当您必须连续更改或监视被拖动实体的属性时,Dragging 事件更合适。例如,您可以使用以下代码在框到达所需位置后禁用对其的拖动。

hBox.bind('Dragging', function(evt) {    this.color("black");    if(this.x > 300) {      this.disableDrag();    }});

触摸组件

如果需要访问实体的触摸相关事件,可以使用 Touch 组件。该组件使您可以访问四个不同的事件:

TouchStart:当实体被触摸时触发此事件。TouchMove:当手指在实体上移动时会触发此事件。TouchCancel:当某些事件中断触摸事件时会触发此事件。TouchEnd:当手指在实体上抬起或离开该实体时,会触发此事件。

前三个事件可以访问TouchEvent对象,该对象包含有关触摸的所有信息。

某些游戏或项目可能需要您检测多次触摸。这可以通过使用 Crafty.multitouch(true) 启用多点触控来实现。传递此方法 truefalse 可打开和关闭多点触控。

在您的项目中使用 Touch 组件之前,您应该知道它目前与 Draggable 组件不兼容。

结论

完成本教程后,您现在应该能够正确处理不同的鼠标事件或轻松创建基于拖放的游戏。请记住,我在本教程中使用了 Crafty 版本 0.7.1,并且演示可能无法与该库的其他版本一起使用。

在下一个教程中,您将学习如何使用精灵表在 Crafty 中为不同的游戏角色设置动画。

以上就是超越基础的巧妙之处:鼠标和触摸事件的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/532943.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 11:30:54
下一篇 2025年11月9日 11:32:15

相关推荐

  • 前端与后端开发的异同点

    前端开发和后端开发是现代软件开发中不可或缺的两个重要领域,它们分别负责网站或应用的前台和后台功能的开发。前端开发主要关注用户界面和用户体验,而后端开发则主要关注服务器端逻辑和数据库的操作。虽然两者都是软件开发的一部分,但它们之间存在着许多的异同点。 首先,前端开发和后端开发的工作内容有很大的区别。前…

    2025年12月22日
    000
  • 前端与后端的职责与技能要求

    前端与后端是软件开发中不可或缺的两个部分,它们分别承担着不同的职责和技能要求。本文将从职责和技能方面探讨前端与后端开发工程师的工作内容和要求。 一、前端工程师的职责及技能要求前端工程师负责实现用户界面和交互功能,直接面向用户,需要具备以下职责和技能要求: 实现网站或应用程序的用户界面设计,确保页面视…

    2025年12月22日
    000
  • 前端后端开发的发展历程与趋势展望

    随着互联网的迅猛发展和信息技术的日新月异,前端和后端开发作为两个重要的IT领域在过去几十年中也取得了巨大的进步。本文将探讨前端后端开发的发展历程,分析当前的发展趋势,并展望未来的发展方向。 一、前端后端开发的发展历程 早期阶段在互联网刚刚兴起的时期,网站开发主要关注内容的呈现,前端开发工作主要集中在…

    2025年12月22日
    000
  • 剖析前端和后端的技术差异

    前端和后端是软件开发中常见的两个领域,前端指的是用户界面和用户交互逻辑的开发,而后端则负责处理数据存储、逻辑处理和业务规则的实现。两者在技术上有着明显的差异,本文将从不同的角度来剖析前端和后端的技术差异。 首先,在技术栈方面,前端和后端使用的技术有很大的不同。前端常用的技术包括HTML、CSS和Ja…

    2025年12月22日
    000
  • 探讨HTML全局属性如何影响网页功能和交互

    了解HTML全局属性对网页功能和交互的影响 HTML(超文本标记语言)是构建网页的基础语言,它不仅用于控制网页的结构和布局,还可以通过全局属性来增强网页的功能和交互性。全局属性是可以应用于 HTML 元素的公共属性,具有广泛的适用性和灵活性,能够为网页开发者提供更多的控制力和定制性。 一、全局属性的…

    2025年12月22日
    000
  • 事件冒泡的实际应用和适用事件类型

    事件冒泡的应用场景及其支持的事件种类 事件冒泡是指当一个元素上的事件被触发时,该事件会被传递给该元素的父元素,再传递给该元素的祖先元素,直到传递到文档的根节点。它是事件模型的一种重要机制,具有广泛的应用场景。本文将介绍事件冒泡的应用场景,并探讨它所支持的事件种类。 一、应用场景事件冒泡在Web开发中…

    2025年12月22日
    000
  • HTML5 Canvas的事件处理介绍

    这篇文章主要介绍了html5 canvas的事件处理介绍,本文讲解了canvas的限制、给canvas元素绑定事件、ispointinpath方法、循环重绘和事件冒泡等内容,需要的朋友可以参考下 DOM是Web前端领域非常重要的组成部分,不仅在处理HTML元素时会用到DOM,图形编程也同样会用到。比…

    好文分享 2025年12月21日
    000
  • HTML之交互

    这篇文章介绍的内容是关于HTML之交互,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 1.网站怎样与用户进行交互?答案是使用HTML表单(form)。表单是可以把浏览者输入的数据传送到服务器端,这样服务器端程序就可以处理表单传过来的数据。  结束。 2).action :浏览者输入的…

    好文分享 2025年12月21日
    000
  • 如何设计一个可扩展的JavaScript事件处理系统?

    答案:设计可扩展JavaScript事件系统需提供on、off、emit接口,使用映射结构存储事件回调,支持命名空间与通配符,引入异步调度和边界处理机制,确保解耦、灵活与高性能。 构建一个可扩展的 JavaScript 事件处理系统,关键在于解耦、灵活性和性能。它不仅要支持基本的事件监听与触发,还要…

    2025年12月20日
    000
  • C++ 函数指针在事件处理中的使用

    使用 c++++ 函数指针能有效地处理事件。它允许将函数作为参数或返回类型,提供了一种简洁且可扩展的方式来注册和处理事件。可通过声明一个指向函数类型的指针变量来创建函数指针,然后将函数分配给一个事件 id 来注册为事件处理程序。在实战中,函数指针可用于处理 gui 事件,提供一种方便且可定制的事件处…

    2025年12月18日
    000
  • C++ 框架中事件处理的最佳实践

    C++ 框架中事件处理的最佳实践 在现代 C++ 框架中,事件处理是实现用户交互性和应用程序响应性的关键。本文将探讨事件处理的最佳实践,并提供一个实战案例来展示如何应用这些原则。 事件处理的原则 明确事件来源:每个事件都应明确指定其来源对象或组件,以便事件处理程序可以访问相关的元数据。事件分类:将事…

    2025年12月18日
    000
  • C++ 事件处理框架的实现方法及性能分析

    c++++ 中事件处理框架可通过基于回调或基于消息队列的方法实现。基准测试指标包括吞吐量、延迟和资源开销。基于回调的框架利用回调函数注册和处理事件,而基于消息队列的框架使用队列存储和处理封装在消息中的事件。通过性能基准,可以根据应用程序需求选择最合适的框架。 C++ 事件处理框架的实现方法及性能分析…

    2025年12月18日
    000
  • C++ 框架中的事件处理死锁问题分析与解决

    c++++ 框架中的事件处理死锁是由事件处理程序持有互斥锁时处理事件或发送消息引起的。解决方法有:只在事件处理程序中处理事件、在事件处理程序之外发送消息以及使用无锁数据结构。遵循这些最佳实践可以确保 c++ 框架中的应用程序可靠响应事件。 C++ 框架中的事件处理死锁问题分析与解决 简介 事件处理是…

    2025年12月18日
    000
  • C++ 框架中的事件处理机制详解

    c++++ 框架中的事件处理机制通过事件循环和队列管理用户输入和异步事件。事件循环不断轮询队列并处理事件,而队列存储等待处理的事件对象。框架将事件路由到适当的处理程序,例如类方法或 lambda 表达式。例如,在 qt 中,可以为按钮单击事件连接一个槽函数来处理事件。通过事件处理,c++ 框架可以响…

    2025年12月18日
    000
  • C++ 框架中分层事件处理的实践指导

    การจัดการเหตุการณ์แบบแบ่งชั้นเป็นวิธีการจัดระเบียบตัวจัดการเหตุการณ์ในกลุ่มลำดับชั้นที่มีความรับผิดชอบเฉพาะเจาะจง เพื่อให้แน่ใจว่าเหตุการณ์จะถูกส่งไปย…

    2025年12月18日
    000
  • C++ 框架如何实现跨平台事件处理

    c++++ 框架提供跨平台事件处理解决方案,允许开发人员使用通用的 api 在不同操作系统中实现事件处理。1. qt 使用事件循环和跨平台 api 处理消息。2. cross-platform-qt 提供抽象层和事件监听,简化 qt/qtquick 使用。3. wxwidgets 使用事件映射,将平…

    2025年12月18日
    000
  • C++ 框架在大型系统中的事件处理实战

    c++++ 框架为大型系统提供强大的事件处理机制。通过观察者模式,事件发布者通知观察者发生事件。使用 boost.asio 或 qt 等框架,可以轻松实现事件处理,包括 gui 通信、网络连接管理、用户输入处理和数据库交互。通过事件处理,大型系统可实现响应性和可扩展性,轻松处理各种事件。 C++ 框…

    2025年12月18日
    000
  • C++ 函数在处理用户输入和事件时有什么优势?

    c++++ 函数通过以下优势处理用户输入和事件:模块化和可重用代码:分解任务,简化测试和提高代码质量。输入验证和异常处理:确保用户输入有效,提供一致的错误处理。事件处理:使用事件处理程序响应用户交互或系统状态变化,创建交互式应用程序。 C++ 函数在处理用户输入和事件方面的优势 在开发 C++ 应用…

    2025年12月18日
    000
  • 如何在C++中管理完整的循环队列事件?

    介绍 circular queue是对线性队列的改进,它被引入来解决线性队列中的内存浪费问题。循环队列使用fifo原则来插入和删除其中的元素。在本教程中,我们将讨论循环队列的操作以及如何管理它。 什么是循环队列? 循环队列是数据结构中的另一种队列,其前端和后端相互连接。它也被称为循环缓冲区。它的操作…

    2025年12月17日
    100
  • 自定义函数处理事件和回调

    在软件开发中,自定义函数可用于处理事件和回调,定制程序的行为。首先,使用def创建函数,定义处理事件时的行为。然后,通过函数或方法将自定义函数与事件关联。例如,可以使用button.clicked.connect(handle_button_click)将handle_button_click()函…

    2025年12月12日
    000

发表回复

登录后才能评论
关注微信