主题:  某网络公司招聘Flash程序员的AS考题,高手请进

macenjie

职务:普通成员
等级:1
金币:0.0
发贴:27
注册:2000/10/28 15:29:46
#12002/7/23 17:52:15
有一个长方形的MC,名字是a,
然后我写如下代码:
on (press) {
duplicateMovieClip(_root.a,"b",1);
setProperty(_root.b,_rotation,30);
_root.b._width=200;
trace(_root.b._width);
最后trace输出的竟然是178,而不是200
请高手做答
源代码就这几行字,可以在http://asp.6to23.com/macenjie/test.fla下载到



5D限制级

职务:普通成员
等级:6
金币:10.0
发贴:4970
注册:2001/8/16 14:52:34
#22002/7/23 19:29:44
duplicateMovieClip(_root.a,"b",1);
_root.b
不一样吧

这样
duplicateMovieClip(_root.a,"b",1);
setProperty("",_width,30);



Demon.S

职务:版主
等级:5
金币:10.0
发贴:2468
注册:2000/9/15 13:56:49
#32002/7/24 10:12:31
关键是rotation30,就出现一个角度的问题
width也是getter/setter属性,两个的计算方法其实不甚一样,set的时候就设定内部原constructor mc的width,而不是设定instance的;而get的时候会按水平最左边到最右边的宽度来计算,跟constructor mc没关系。



chocobo

职务:普通成员
等级:1
金币:0.0
发贴:15
注册:2001/2/18 12:02:11
#42002/7/25 10:46:37
哈哈,這題目出得真夠摳門的



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
注册:2003/11/27 18:07:11
#52002/7/25 15:08:40
不对呀,将矩形旋转后,bounding box的水平宽度应该比原来的值要大,而这里反且变小了

我以前试过MX中的stage._width & _height属性,它们两个的数值也比在movie properties中预设的要小。这是何故?



手工感情

职务:普通成员
等级:3
金币:10.0
发贴:556
注册:2001/1/3 2:50:20
#62002/7/25 18:37:52
“不对呀,将矩形旋转后,bounding box的水平宽度应该比原来的值要大”???
当然也有这种可能,不过那是长比宽的值要大的矩形。


黑色的风略过我的翅膀,我却无法落下来梳理你的羽毛
————————————————
◆5d.cn互动论坛◆
------|xml版主|------

5D限制级

职务:普通成员
等级:6
金币:10.0
发贴:4970
注册:2001/8/16 14:52:34
#72002/7/25 21:16:30
setProperty(_root.b,_rotation,30);
_root.b._width=200;

各位大哥 小弟迂腐 旋转在宽度赋值之前定义 何来旋转决定宽度?

那后面的宽度赋值有何意义?



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
注册:2003/11/27 18:07:11
#82002/7/25 23:04:09
handmade在上个帖子中说
引用:
当然也有这种可能,不过那是长比宽的值要大的矩形。


有两种情况(这里假设以中心点为旋转中心):
1。长比宽大:在开始旋转到某个特定角度之前(如a度,此时矩形的两个不相邻顶点与另两不相邻顶点分别重合),绑定框的长比原长要大;旋转过a度以后,绑定框的长就比原长小。

2。长比宽小:在旋转到360度之前,绑定框的长总是比原长要大。至360度时,完全重合,与原来相等。



Demon.S

职务:版主
等级:5
金币:10.0
发贴:2468
注册:2000/9/15 13:56:49
#92002/7/26 10:30:54
从x轴的最左边到最x轴最右边的点的最短距离就是mc的宽。



手工感情

职务:普通成员
等级:3
金币:10.0
发贴:556
注册:2001/1/3 2:50:20
#102002/7/28 17:50:06
janlay在上个帖子中说
引用:
有两种情况(这里假设以中心点为旋转中心):
1。长比宽大:在开始旋转到某个特定角度之前(如a度,此时矩形的两个不相邻顶点与另两不相邻顶点分别重合),绑定框的长比原长要大;旋转过a度以后,绑定框的长就比原长小。

2。长比宽小:在旋转到360度之前,绑定框的长总是比原长要大。至360度时,完全重合,与原来相等。

仔细想了一下,是这个情况,看来还是要具体问题具体分析。


黑色的风略过我的翅膀,我却无法落下来梳理你的羽毛
————————————————
◆5d.cn互动论坛◆
------|xml版主|------

janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
注册:2003/11/27 18:07:11
#112002/7/28 22:24:20
呵呵,我也是亲自画图旋转才发现的。以前都没有考虑全面,看来还是要亲力亲为呀

所以那道题要看那个矩形是什么样子的。另外,画魔关于setter & getter的解释还不能令人信服,不知道有没有这方面的官方文档



zaza

职务:普通成员
等级:2
金币:1.0
发贴:490
注册:2002/6/5 17:49:30
#122002/7/29 14:49:07
我运行了下,这个结果和MC的高度是有关的,结果是200*cos30+高度 *tg30吧!
这个width是指旋转后mc的宽度而不是你所看到的矩形的宽度,包括mc(b)的空白部分!



Demon.S

职务:版主
等级:5
金币:10.0
发贴:2468
注册:2000/9/15 13:56:49
#132002/7/30 9:58:21
janlay在上个帖子中说
引用:
呵呵,我也是亲自画图旋转才发现的。以前都没有考虑全面,看来还是要亲力亲为呀 :)

所以那道题要看那个矩形是什么样子的。另外,画魔关于setter & getter的解释还不能令人信服,不知道有没有这方面的官方文档 :rolleyes:

width铁定是getter/setter没错的,否则没办法得到它的值。
instance的宽和constructor的宽是不一样的,但是计算方法都是一样的。
官方文档肯定没有,但计算公式我可以给

mc_width=(x2-x1)/2;
mc_height=(y2-y1)/2;

由此应该知道,如果instance和constructor的角度不一样的话,得到的值当然不一样,另外,如果xscale/yscale有差异的话,得到的值更难想象,总之不会一样。


D:)S