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

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

在上一个 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

相关推荐

  • css组合伪类选择器如何优化复杂交互

    合理使用CSS组合伪类选择器可减少JavaScript依赖,提升性能与可维护性。通过链式伪类如:hover:focus、:focus-visible:enabled精准定位元素状态,避免冗余类名与事件监听;结合结构性伪类如:nth-child、:first-of-type实现动态布局反馈,增强交互体…

    2025年12月2日 web前端
    000
  • 反应式编程对 Java 框架中事件处理的影响

    反应式编程对 java 框架中事件处理的影响:引入观察者模式,使观察者对事件流做出反应。支持 reactivex、spring webflux 和 vert.x 等反应式框架。可用于处理 http 请求、用户输入等事件。提供更高的可伸缩性和响应性,显著改善应用程序的鲁棒性和可维护性。 反应式编程对 …

    2025年12月2日 java
    000
  • 如何使用 Java 函数进行事件处理?

    如何使用 java 函数进行事件处理?使用函数式接口(consumer、runnable)将代码块关联到特定事件。当事件发生时,调用相关的代码块,实现事件处理。 如何使用 Java 函数进行事件处理 简介 事件处理是响应应用程序中发生的事件的过程。在 Java 中,可以使用函数式接口(如 Consu…

    2025年12月1日 java
    000
  • PHP 框架中的事件处理和消息传递机制

    php 框架中的事件处理和消息传递机制通过监听特定事件并执行回调函数实现组件间通信。消息传递机制则通过在消息队列中发送和接收消息实现异步处理。实战案例包括用户注册事件、订单处理事件和邮件发送消息,凸显了该机制在构建可扩展、可维护和响应迅速的 web 应用程序中的作用。 PHP 框架中的事件处理和消息…

    2025年11月27日 后端开发
    000
  • 探索Ajax的优点与不足:全面剖析

    标题:探索Ajax的优点与不足:全面剖析,需要具体代码示例 正文: 随着Web应用的快速发展,网页的用户交互性和实时性需求越来越高。在这个背景下,Ajax(Asynchronous JavaScript and XML)作为一种前端开发技术,迅速崛起并广泛应用于各类Web应用中。本文将从不同角度探讨…

    2025年11月27日 web前端
    000
  • 探索Jquery交互方式

    深入了解jQuery的交互方式 jQuery是一个广泛应用于网页开发的JavaScript库,其强大的交互功能使得网页开发变得更加便捷和高效。在本文中,我们将深入了解jQuery的交互方式,并提供具体的代码示例,帮助读者更好地掌握其中的技巧和应用。 一、选择器 在jQuery中,选择器是用来选取指定…

    2025年11月27日 web前端
    000
  • PHP 函数事件处理技术是否支持异步处理?

    php 函数事件处理支持异步执行,允许函数在触发事件时立即返回,继续执行后续代码。回调函数在事件触发时被异步调用,用于响应特定事件。 PHP 函数事件处理的异步执行 PHP 函数事件处理允许通过注册回调函数来响应异步事件。与传统同步执行不同,异步执行允许函数在触发事件时立即返回,而不必等待事件完成。…

    2025年11月26日 后端开发
    000
  • PHP 函数事件处理技术如何避免过度耦合?

    php函数事件处理技术提供了避免过度耦合的方法:可重用性:事件处理程序可被多个类和函数重用,避免重复代码。可配置性:事件处理程序可动态添加、删除和修改,提供极佳灵活性。松耦合:事件处理程序与触发事件的代码分离,增强维护性和可测试性。 PHP 函数事件处理技术避免过度耦合 事件处理是一种可重用且可配置…

    2025年11月26日 后端开发
    100
  • PHP 函数事件处理技术如何与其他框架集成?

    php 函数事件处理技术允许你在函数和方法上定义事件,并通过与其他框架集成来扩展其功能。通过与 laravel 和 symfony 框架集成,你可以注册和触发事件以执行特定动作。实际应用中,你可以使用它与 swiftmailer 框架集成,在用户创建时通过事件处理程序发送欢迎邮件。 PHP 函数事件…

    2025年11月26日 后端开发
    100
  • 光峰科技:全功能激光智能车灯显著提升人车交互体验

    10 月 16 日~18 日,第十二届中国国际汽车照明论坛(ifal)在上海举行。ifal 是全球汽车照明产学研的交流平台,汇聚业界精英,共同探讨汽车照明与视觉科技领域的前沿话题和科研成果,其学术性和专业性备受国内外专家赞誉。科创板首批上市企业光峰科技(688007.sh)受邀参会,车载产品总监李士…

    2025年11月19日
    000
  • 阿里 PC-Agent 重构人机交互,精准拆解跨应用指令,自动化办公更进一步

    阿里巴巴通义实验室推出的pc-agent框架,旨在解决复杂pc任务自动化难题。该框架能够跨越不同应用程序,完成从office到浏览器的各种复杂工作流。 PC-Agent并非简单的指令执行器,它能够理解并执行一系列复杂指令,例如:在记事本中读取文件信息并设置闹钟;在文件管理器中查找文件,并将信息添加到…

    2025年11月18日 硬件教程
    000
  • 美团提出首个语音交互 GUI 智能体,端到端语音训练能力优于传统文本训练

    只需动动嘴,就能操控 gui 代理? 由美团与浙江大学联合推出的 GUIRoboTron-Speech——让你彻底解放双手,直接对设备“发号施令”。 这是首个可以直接通过语音指令和屏幕截图进行端到端(End-to-End)决策的自主 GUI 智能体,致力于为用户提供更自然、高效且无障碍的人机交互方式…

    2025年11月17日 硬件教程
    000
  • 如何使用Swoole实现WebSocket服务器与客户端交互

    WebSocket 已经成为了现代Web应用程序中常用的实时通信协议。使用PHP开发WebSocket服务器一般需要使用Swoole这样的扩展,因为它提供了对异步编程、进程管理、内存映射以及其他WebSocket相关特性的支持。在本文中,我们将讨论如何使用Swoole来实现WebSocket服务器与…

    2025年11月11日
    000
  • React事件处理指南:如何处理复杂的前端交互逻辑

    React 是一个用于构建用户界面的 JavaScript 库,它为我们提供了一种简单和灵活的方式来处理前端交互逻辑。在实际开发中,我们经常会遇到一些复杂的交互场景,如表单验证、动态渲染组件等。在本文中,我将为您介绍一些处理复杂前端交互逻辑的最佳实践,并给出具体的代码示例。 使用事件处理函数 Rea…

    2025年11月9日 web前端
    200
  • Java框架如何通过事件处理机制增强代码的可扩展性?

    事件处理机制通过解耦事件源和处理程序来增强代码可扩展性,通过发布-订阅模型允许灵活的事件订阅,提高代码重用性。它尤其适用于用户界面框架,例如按钮单击事件的处理。 Java框架如何通过事件处理机制增强代码的可扩展性 引言 在现代软件开发中,可扩展性至关重要,它使代码易于随着项目需求的变化而进行扩展。J…

    2025年11月9日 java
    000
  • 前端开发中常见的JavaScript库与插件使用经验总结

    前端开发中常见的JavaScript库与插件使用经验总结 引言:随着互联网的快速发展,前端开发在Web应用和移动应用中的重要性不断增强。而JavaScript作为一种动态脚本语言,广泛应用于前端开发中。JavaScript库和插件的使用能够极大地提高开发效率和用户体验。本文通过总结前端开发中常见的J…

    2025年11月9日 web前端
    000
  • 使用事件冒泡提升事件处理的效率方法探讨

    如何利用事件冒泡实现更高效的事件处理 事件冒泡是指事件从最具体的元素开始触发,然后逐级向上传播到更一般的元素。在前端开发中,正确利用事件冒泡可以实现更高效的事件处理。本文将介绍事件冒泡的原理,并通过具体的代码示例展示如何利用事件冒泡实现更高效的事件处理。 一、事件冒泡的原理 事件冒泡是DOM规范中定…

    2025年11月8日 web前端
    000
  • 响应式编程如何增强 Java 框架中的事件处理

    通过响应式编程,java 框架中的事件处理可以显著增强,具有更高的并发性、更好的扩展性、更低的延迟。例如,spring boot 中的 webflux 框架演示了响应式编程在实际中的应用。其他支持响应式编程的 java 框架包括 vert.x、akka 和 rxjava。响应式编程使 java 应用…

    2025年11月8日 java
    100
  • Jquery交互方式全面解析

    JQuery交互方式全面解析 JQuery是一个流行的JavaScript库,为开发者提供了大量简洁而强大的API,可以简化DOM操作、事件处理、动画效果等前端开发任务。在Web开发中,JQuery的交互方式非常重要,能够帮助开发者实现用户与页面之间的互动。本文将全面解析JQuery的交互方式,并提…

    2025年11月8日 web前端
    000
  • 适用于jQuery的焦点事件常见场景

    jQuery中focus事件是一种常见的事件类型,它在用户在页面中焦点集中在某个元素上时触发。这种事件可以广泛应用于页面中需要用户输入或者交互的功能中,例如表单验证、输入框提示、搜索框自动补全等场景。本文将通过具体的代码示例,介绍jQuery中focus事件的应用场景及其实现方法。 一、表单验证 在…

    2025年11月8日 web前端
    000

发表回复

登录后才能评论
关注微信