当前位置: 首页 > 图文教程 > Flash动画 > ActionScript > Flash as3:绝对坐标与相对坐标

ActionScript
FLASH 3D相册之利用BitmapData类制作
Flash 脚本游戏开发教程 第一课
Flash 脚本游戏开发教程第二课
Flash 脚本游戏开发教程第三课
Flash 脚本游戏开发教程第四课
Flash 脚本游戏开发教程第五课
Flash 脚本游戏开发教程第六课
Flash 脚本游戏开发教程第七课
Flash 脚本游戏开发教程第八课
Flash AS实现的蝌蚪摆尾动画的教程
从基础开始深入学Flash AS3教程(4)(译文)
从基础开始深入学Flash AS3教程(5)(译文)
从基础开始深入Flash AS3教程(2)(译文)
从基础开始深入学Flash AS3教程(3)(译文)
Flash AS3对单个图片进行角色动作化处理
从基础开始深入Flash AS3教程(1)(译文)
Flash教程:if条件语句的用法
Flash AS教程:_visible属性的详细讲解
Flash AS教程:图片环绕旋转效
Flash教程:trace()的使用

ActionScript 中的 Flash as3:绝对坐标与相对坐标


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-16   浏览: 101 ::
收藏到网摘: n/a

一个程序员写一个平面的游戏,一般情况下是看不到UI界面的,里面的每个控件和图像的移动和位置都是通过代码来实现,很多团队把这个数据的任务交给了美工,美工在发图的时候就把位置都拍好,并且给程序员。通常这里也有两种模式,一个是给绝对坐标的,这适用于屏幕大小不会改变的,长宽高和位置都是写死不变的。但是这种模式的程序往往比较小型,相反更多的都是相对坐标,这对于Flash版本的客户端来说其实是很容易的事情,那么这个坐标到底怎么设置,经历折磨了我很久。
首先就是直接设置
mc1.x=??; mc1.y=??;
这样mc1就设置好了,as3动态new出来的mc是没有width的,也没有height,而他的长和高本身也是不定,假设你在里面加了一张 300x200的图片,那么他的w和h就会变成300和200,如果你又加了一张400x100的图片,他的w就会变成400而h不变,这在于相对坐标上对应是复杂了很多的,比如我要让这个mc完全居中要怎么做?
如果舞台是1000的宽度,要剧中比较容易 mc1.x = (1000-400)/2; 这样就居中了,来看原理,首先我们要舞台居中,很容易就想到一个数字 1000/2 结果是500 但是x对舞台的中央是不行的 x是左上角,所以这个答案还要再减去 400/2 相当于mc1再左移自己的一般的位置,这样就完全剧中了,答案就是 1000/2-400/2 那么算式就演化出来了。
所以要居中的答案似乎已经出来了 (stage.stageWidth-mc.width)/2 这个坐标一定是最中间的,但是真的如此吗?如果舞台变了呢?如果mc的大小变了呢?他还居中吗?这样想想依然是的。
我曾经也是非常理想的认为这是最好的方法,但是实践告诉我,我错了,当我需要在mc中继续增加原件图片,并且这个图片也要居中,并且这个图片要在mc内,并且这个图片可能大于mc也可能小于mc。来看看情况是怎么样的。
如果mc2在mc1里,并且mc1大于mc2,很好 mc2.x = (mc1.width-mc2.x)/2; 非常好,很显然他们对得很齐,并且mc1不需要在舞台上移动。但是另一种情况呢?通过这个算法也可以得到他们的坐标,但是这个时候mc1.width已经不在是原来的了,因为mc2的width比它大,所以显然是出错,算出来的结果是0,那么大的图片就会和小的图片”左对齐”了,而更新了舞台上mc1的位置后mc1的位置是居中了,可是里面的却错得一塌糊涂,你又要重新对齐原来的图像,2个文件就要来回对其,麻烦不错,很容易对了这个忘了那个,最终结果就是图像莫名其妙错位,痛苦。曾经思考过很多,图像越多就越麻烦。
这个时候很多程序员并不会跳出来,会一直想如何对其,然后一直修复这个问题,其实错了,我们都错了,解决问题有时候不可以死脑筋,如果换思路会如何?有想过?换过以后却是如此的简单,我们再来看看原理。
首先我们把检测他的大小,然后运算居中,但是大小会变,算了外面不能顾及里面,算了里面不能顾及外面,那能不能不算呢!答案是肯定的。其实无论如何大小变有一个点是永远对着舞台中心的,那就是mc的中心,但是width的大小在变,如何才能让中心不变呢,这时我想到了一个关键字(注册点),在FlashIDE里也许这个名词很熟悉,但是到了代码里可能很难联想到这个关键字,所以我们要做的是让mc的中心点永远是0点就可以了。也就是说00点是中间而不是左上角!这个时候我们再来对齐看看??
mc1.x = stage.stageWidth/2;
mc2.x = -(mc2.width/2);
现在再来看看,无论里里面是大是小,永远直接左移,先把自己的中心确定,然后在把这个中心对到舞台的中心,居中行为最终外美的完成了。当然左对齐右对齐都可以用这个思路,你既然设置是00点的位置,那就先让你的图像和00对齐,再让00去对别的地方,这样迭代就不容易出错了。原来就是如此简单的问题,因为开始的时候就错了,于是越来越麻烦,很多时候问题都是类似的,一定要注意。此问题经历深刻,故发表一下!最后来句废话,有兴趣转载请著名出处,谢谢!谢谢支持!谢谢大家。