作者sextitanic (阿信163)
看板Flash
标题Re: [问题] 关於准确吸附目标
时间Tue Nov 22 02:23:27 2011
※ 引述《Friess (Fries)》之铭言:
前文恕删
: 小弟在做的是资料结构的双向链结
: 就是一台车,有两个箭头(前&後),可以去"指向"其他的车
: 大概长这样 <-(XXX)->
: 然後当拖曳箭头去"指向"其他车的时候会吸附上去
: 简单说,就是当车子上的箭头去碰撞到其他的车子,箭头就会吸附到上面
: 可是小弟一直发生的问题
: 不管怎样碰撞,明明碰撞成功,却吸附到自己的车上去,而不是对方
中间恕删
: tty.dot1.addEventListener(MouseEvent.MOUSE_DOWN, onClcik1);//dot1车子前面的箭头
: tty.dot1.addEventListener(MouseEvent.MOUSE_UP, upClcik1);
: function onClcik1(e:MouseEvent) {
: e.target.startDrag();
: }
: //以下是重点问题程式码(车子的箭头可以自动拉长.缩短,AS在箭头自己的影格内
: 应该不是这个的问题所以没PO出来)
: function upClcik1(e:MouseEvent) {
: e.target.stopDrag();
: var child:MovieClip;
: for (var i = 0; i < container.numChildren; i++) {
: child=MovieClip(container.getChildAt(i));
: if (e.target!=child) {
: if (e.target.hitTestObject(child)) {
: //车子前面的箭头碰到其他车子
: e.target.x=child.x;
: e.target.y=child.y;
: }
: }
: }
: }
首先,你的 tty 是车子元件,tty.dot1 是指车子元件里的箭头元件
而你判断的 hitTestObject,是来比对按下的元件跟碰到的元件(child)是不是同一个
如果不是的话就会把它的 x 变成跟 child 的 x 一样
照这流程跑一遍,你按下了 tty.dot1,然後移动它
放开了之後就去找 container 里的元件,一开始先找到它本身所属的 tty
发现 tty.dot1 != tty 之後,tty.dot1 就会开始比对它有没有碰到 tty
当然,tty.dot1 在 tty 里面,所以它一定会碰撞到 tty
於是它就会吸附在自己本身的位置了
//解答在下面
e.target 是指那个箭头,而 child 则是车子(含箭头)
所以在 e.target != child 那边,要比对的是 e.target 的父元件跟 child
改成 e.target.parent 来跟它比对就没问题罗
顺带一提,target 有两种,一种是 target 跟 currentTarget
如果你对 tty 下了滑鼠的Listener,当你按到的是 tty 里面的 dot1
用 e.target,flash 会抓 dot1
用 e.currentTarget 则是抓 tty
简单来说,就是 currentTarget 是抓到下了 Listener 的元件本身
而 target 则会抓到下了 Listener 的元件的子元件(影片片段或按钮)
或自己本身(色块或图像元件)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.168.120.28
1F:推 Friess:感谢大大的解答,在问个问题,要如何抓在场景上影片片段里的 11/22 07:26
2F:→ Friess:元件在场景上的座标? 11/22 07:27
3F:→ Friess:例如tty.c1在场景上的座标,因为我直接抓tty.c1座标的话 11/22 07:27
4F:→ Friess:都会抓到c1在tty里面的座标 11/22 07:28
5F:推 Friess:刚刚找到解决方法了object.localToGlobal(new Point(0, 0)) 11/22 07:39
6F:→ Friess:结果还是有别的问题... 就是,要怎麽改变子物件在舞台上的 11/22 07:39
7F:→ Friess:索引? 因为我发现在拖曳dot1去碰撞tty的时候,如果目标tty的 11/22 07:41
8F:→ Friess:位子盖在dot1上面,而不是被dot1盖在下面的话,会没办法产生 11/22 07:42
9F:→ Friess:碰撞 11/22 07:42
10F:→ sextitanic:setChildIndex(元件,层级); 11/22 08:19