iloveas 发表于 2018-12-14 10:33:20

【9RIA—iloveas】— AS3游戏实用技巧(3):巧用事件api简化鼠标拖动流程

本帖最后由 TKCB 于 2018-12-19 09:54 编辑

转载:9RIA游戏开发者社区(天地会)
作者:iloveas(原天地会大神)


总目录:[原创]AS3游戏开发实用技巧汇总


键盘的东西写了两篇,突然想不到还有什么键可以给大家分享的了,就先写篇鼠标的吧。
首先讲讲拖动,按照一般人的定义,拖动就是鼠标按下的时候移动鼠标,这里面有三个过程,分别是按下、移动鼠标和弹起。以stage为例,大家的实现步骤通常如下:
(PS:此处不讨论startDrag和stopDrag的使用,因为这个方法过于局限,诸如切水果一类的,startDrag能做的到么)
第一步,监听鼠标按下事件,并开始监听移动,同时为了让弹起时不再拖动,我们还要监听弹起事件:

stage.addEventListener(MouseEvent.MOUSE_DOWN, stageMouseDownHandler);
function stageMouseDownHandler(event:MouseEvent):void{
stage.addEventListener(MouseEvent.MOUSE_MOVE, stageMouseMoveHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, stageMouseUpHandler);
}

第二步,在stageMouseMoveHandler里执行拖动的操作:

function stageMouseMoveHandler(event:MouseEvent):void{
//在这里运行拖动相关的代码
}

第三步,stageMouseUpHandler里移除按下时的监听:

function stageMouseUpHandler(event:MouseEvent):void{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, stageMouseMoveHandler);
stage.removeEventListener(MouseEvent.MOUSE_UP, stageMouseUpHandler);
}

这样的代码看起来可不是一般的繁琐,如果项目的代码量大了(小项目的代码量有时也不少),这么写容易让程序结构变乱,可读性严重下降。对于大项目来说,我们还可以封装一下,但对于中小项目来说,封装可能都嫌麻烦。
其实,借助鼠标事件的一个api,以上三步完全可以简化为一步:
**** Hidden Message *****
这样看起来是不是清爽了很多呢?不过此法虽然简化了代码,但是代价是稍稍牺牲了运行效率,对性能要求极高的场合还是得慎用。
本帖介绍的方法相信很多人都知道了,但我还是设置了回复可见,不然心里不踏实,给点时间让iloveas好好适应下吧,谢谢!


TKCB分享:
AS3鼠标拖拽、拖动、滑动+点击(防止冲突)的小练习,网友问的,于是分享之

wgq341 发表于 2018-12-14 11:28:07

收藏学习!

hzm33818780 发表于 2019-7-25 12:20:41

收藏学习!

勤奋的蜗牛 发表于 2019-7-25 13:38:31

学习了··

ant 发表于 2019-7-31 10:00:32

{:6_199:}      

wahaha2323 发表于 2019-11-12 03:05:32

AS3游戏实用技巧(3):巧用事件api简化鼠标拖动流程

wuliao2014 发表于 2019-11-12 09:41:00

感谢分享

363995287 发表于 2019-11-13 17:14:26

学习学习

SakuraYing 发表于 2019-12-2 23:50:23

学习一下 感谢您的分享

kasher 发表于 2019-12-6 20:51:32

想要学习一下
页: [1] 2
查看完整版本: 【9RIA—iloveas】— AS3游戏实用技巧(3):巧用事件api简化鼠标拖动流程

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)