|
主题: experts,help!
|
 sui.smile~
职务:普通成员
等级:3
金币:16.0
发贴:1169
|
#12001/11/14 13:20:33
我写了一个给出两点坐标,画出它们之间连线的程序,代码如下 function drawanyline (x1, y1, x2, y2) { attachMovie("line", linemc, 0); a = math.atan2(y2-y1, x2-x1)*180/Math.PI; linelong = Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); ax = x1; ay = y1; linemc._x = ax; linemc._y = ay; linemc._rotation = a; linemc._xscale = linelong; } a = 100; b = 200; c = 200; d = 200; _root.drawanyline(a, b, c, d);
可是无法正常运行,长度和角度已经正确算出,估计错误出在函数中给mc复值那里,请问错在哪里?
|
 5D限制级
职务:普通成员
等级:6
金币:10.0
发贴:4970
|
#22001/11/14 21:02:35
随心smile在上个帖子中说 引用: 我写了一个给出两点坐标,画出它们之间连线的程序,代码如下 function drawanyline (x1, y1, x2, y2) { attachMovie("line", linemc, 0); a = math.atan2(y2-y1, x2-x1)*180/Math.PI; linelong = Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); ax = x1; ay = y1; linemc._x = ax; linemc._y = ay; linemc._rotation = a; linemc._xscale = linelong; } a = 100; b = 200; c = 200; d = 200; _root.drawanyline(a, b, c, d);
可是无法正常运行,长度和角度已经正确算出,估计错误出在函数中给mc复值那里,请问错在哪里?
曾经见过类似的效果 它是两个MC和一条斜着放的直线 它就求两个MC的坐标相减 然后复制斜线把差直给它 MC是可以拖东的 所以他们之间的线也是变化的
|
 vital
职务:普通成员
等级:1
金币:10.0
发贴:194
|
#32001/11/15 17:16:35
主要是function的使用的问题,斑竹给讲讲吧,我顶 ;)
编辑历史:[这消息被vital编辑过(编辑时间2001-11-15 19:28:51)]
|
 5D荣誉斑竹
职务:普通成员
等级:1
金币:10.0
发贴:265
|
#42001/11/15 20:41:17
函数里的a没有定义成局部变量,,和参数有冲突。
|
 vital
职务:普通成员
等级:1
金币:10.0
发贴:194
|
#52001/11/16 9:21:12
哦,还有个错误,attachMovie("line", linemc, 0); 应改为attachMovie("line", "linemc", 0);
|
 vital
职务:普通成员
等级:1
金币:10.0
发贴:194
|
#62001/11/16 9:54:36
但是,如果我要把复制的mc也转化为这个函数的一个参数,应该怎样写?attachMovie复制的mc名可以是变量或者数组元素吗?
|
 vital
职务:普通成员
等级:1
金币:10.0
发贴:194
|
#72001/11/16 10:37:45
已经会了,参考了janlay的程序。不过还是不太明白:
i=1; this.attachMovie("line", "line"+j, j); line[j] = this["line"+j]; line[j]._x=...; ... i++;
这样的过程,复制的这些mc的实名到底是什么呢?line1,line2....?this又是起的什么作用呢?能不能简化掉?
|
 5D限制级
职务:普通成员
等级:6
金币:10.0
发贴:4970
|
#82001/11/16 21:03:00
vital在上个帖子中说 引用: 已经会了,参考了janlay的程序。不过还是不太明白:
i=1; this.attachMovie("line", "line"+j, j); line[j] = this["line"+j]; line[j]._x=...; ... i++; 这样的过程,复制的这些mc的实名到底是什么呢?line1,line2....?this又是起的什么作用呢?能不能简化掉?
THIS是指你对放AS的MC作用 LINE1 LINE2 就是对LINE的反复使用定义的别名
|
 janlay
职务:管理员
等级:7
金币:28.0
发贴:7244
|
#92001/11/17 1:10:20
非也。我写的那个line是一数组对象,只有line[ 1],line[ 2],不存在line1,line2  使用数组的好处我在教程中也说过(这时是node数组,line和它的功能相同): 引用: node[i] = this["n"+i]; 程序把this["n"+i]的值赋给node[i](节点的路径赋给相应的数组单元)。这是用的“传址”的方式,和“传值”不同的是,对被传址的对象的修改会直接影响到源对象。之所以采用这种数组的形式来管理对象,有两点原因: 1.写起来简单 2.把零散的实例绑定到一个对象中集中管理,有利于对它们的连续存取访问。
编辑历史:[这消息被janlay编辑过(编辑时间2001-11-17 01:11:57)]
|
 janlay
职务:管理员
等级:7
金币:28.0
发贴:7244
|
#102001/11/17 1:18:45
随心smile在上个帖子中说 引用: 我写了一个给出两点坐标,画出它们之间连线的程序,代码如下 function drawanyline (x1, y1, x2, y2) { attachMovie("line", linemc, 0); a = math.atan2(y2-y1, x2-x1)*180/Math.PI; ……
把: a = math.atan2(y2-y1, x2-x1)*180/Math.PI; 改为: a = math.atan((y2-y1)/(x2-x1))*180/Math.PI; if(x2-x1<0){a-=180;} 试试
|
 vital
职务:普通成员
等级:1
金币:10.0
发贴:194
|
#112001/11/19 8:58:29
janlay在上个帖子中说 引用: 随心smile在上个帖子中说 引用: 我写了一个给出两点坐标,画出它们之间连线的程序,代码如下 function drawanyline (x1, y1, x2, y2) { attachMovie("line", linemc, 0); a = math.atan2(y2-y1, x2-x1)*180/Math.PI; ……
把: a = math.atan2(y2-y1, x2-x1)*180/Math.PI;
改为: a = math.atan((y2-y1)/(x2-x1))*180/Math.PI; if(x2-x1<0){a-=180;} 试试
为什么要这样?math.atan2的值域本来就是(-pi,pi],用他来代替你写的那段不是更简单?
|
 vital
职务:普通成员
等级:1
金币:10.0
发贴:194
|
#122001/11/19 8:59:47
janlay在上个帖子中说 引用: 非也。我写的那个line是一数组对象,只有line[ 1],line[ 2],不存在line1,line2 
使用数组的好处我在教程中也说过(这时是node数组,line和它的功能相同): 引用: node[i] = this["n"+i]; 程序把this["n"+i]的值赋给node[i](节点的路径赋给相应的数组单元)。这是用的“传址”的方式,和“传值”不同的是,对被传址的对象的修改会直接影响到源对象。之所以采用这种数组的形式来管理对象,有两点原因: 1.写起来简单 2.把零散的实例绑定到一个对象中集中管理,有利于对它们的连续存取访问。
好像有点类似c的指针?
|