在上一个 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 事件并将框的颜色更改为红色。
< p>MouseEvent 对象也作为参数传递给所有这些鼠标事件的回调函数。它包含与该特定鼠标事件相关的所有数据。
您还可以使用 mouseButton 属性检查用户单击了哪个鼠标按钮。例如,可以使用 Crafty.mouseButtons.LEFT 检测左键单击。同样,可以使用 Crafty.mouseButtons.MIDDLE 检测中键单击。
< h2>鼠标拖动组件
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} )。
除了拖放元素之外,还需要知道拖动何时开始和停止。这可以通过使用 StartDrag 和 StopDrag 事件来完成。还有一个 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() 方法将实体绑定到 Dragging 和 StopDrag 方法。
将颜色更改为黑色可以向用户表明实体当前正在被拖动。您还可以使用 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) 启用多点触控来实现。传递此方法 true 或 false 可打开和关闭多点触控。
在您的项目中使用 Touch 组件之前,您应该知道它目前与 Draggable 组件不兼容。
结论
完成本教程后,您现在应该能够正确处理不同的鼠标事件或轻松创建基于拖放的游戏。请记住,我在本教程中使用了 Crafty 版本 0.7.1,并且演示可能无法与该库的其他版本一起使用。
在下一个教程中,您将学习如何使用精灵表在 Crafty 中为不同的游戏角色设置动画。
以上就是超越基础的巧妙之处:鼠标和触摸事件的详细内容,更多请关注双恒网络其它相关文章!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
9.本站默认解压密码为:www.sudo1.com
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。
我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!
云资源网 » 超越基础的巧妙之处:鼠标和触摸事件
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 你们有qq群吗怎么加入?