关于全局和本地坐标的问题
首先看一个例子先:::
/*
author:donglai
在库中建二个绑定类:localMc,globalMc
*/
var me:Sprite=new Sprite();//在舞台上面的一个显示容器
me.x=155;
me.y=155;
addChild(me);
var bindMc_a:localMc=new localMc();//容器里面的两个显示对象
bindMc_a.x=200;
bindMc_a.y=200;
me.addChild(bindMc_a);
var bindMc_b:globalMc=new globalMc();
bindMc_b.x=10;
bindMc_b.y=10;
me.addChild(bindMc_b);
var disbindMc:globalMc=new globalMc();//舞台上面的一个显示对象
disbindMc.x=255;
disbindMc.y=255;
addChild(disbindMc);
var point_b:Point=new Point(25,25);//将其中一个移到舞台坐标25,25处
var mePoint:Point=me.globalToLocal(point_b);
bindMc_b.x=mePoint.x;
bindMc_b.y=mePoint.y;
var point_a:Point=new Point(55,55);//同上移到55,55
var youPoint:Point=me.globalToLocal(point_a);
bindMc_a.x=youPoint.x;
bindMc_a.y=youPoint.y;
var point_c:Point=new Point(0,0);//将舞台上面的一个显示对象移到舞台上面的显示容器的坐标原点
var hisPoint:Point=me.localToGlobal(point_c);
disbindMc.x=hisPoint.x;
disbindMc.y=hisPoint.y;
trace(disbindMc.x);
trace(me.x);
仔细观察你就能看出来点特殊的地方。无论是从全局到本地还是从本地到全局,一直是一个"中间人-->me"来进行调用localToGlobal,globalToLocal;所以如果小于舞台上面小于三个显示层的话则,To,它能To到哪里呢。接下来就是main了
如果me的子代要到me的父代那里去,仅是一种逻辑的到,其实它还是显示在me里面的。这个时候me得知道它要到me的父代什么地方去,所以就得先获取这个地方的坐标:用Point对象。好了假设接下来知道了它在me 的父代的位置了,但是me的子代还是显示在me里面的,me子代.x .y一直是相对于me的。所以me 的子代要去已经知道坐标的me 的父代位置中去,则得将这个已知父代坐标转换成并不知道它在me中的位置,转换过后就知道了,呵呵。这样转换在同一个显示层上面才有可赋值性。调用me.globalToLocal来进行转换,因为坐标是从全局到本地的。好了成功转换,就可以赋值了。同理如果和me的同一级的对象想到me家里面做做客,也无大碍。
这样的话,想想上面的。一定得先知道这个和me同一级的显示对象要到me的什么位置。假设知道了,但是它还是显示在舞台上面的,并没有调用me.addChild(这个和me同一级对象)。这个时候me这个中间人又得出来主持局面了,me 发话我想看看我自身的一个已知坐标在全局的坐标是怎么样的。这个位置的坐标也就是和me同一级的对象要到me 的地方。所以me就得调用localToGlobal先将这个已知坐标转换成全局的。这样和那个同一级对象才有可赋值性。
呵呵,二层显示对象,也可以进行的,最少也得有二层。就是我上面第二段说的。
我以前没有认真的看过的时候一直是有个误区的,因为就是这个"转换害"的。听起来不仅有到了的意思还有将其本身也弄过去并不只是在位置上面做文章。
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |