最近更新 / 特别专题 / 我要上传 / 设为首页
满足眼睛的需求

频道精选


关于组件拖动与位置判断

2007-06-05 来源:xuezhishi.com   内容报错                        

虽然一直在用FLASH,但都是前台的多,后台做得很少。这次因为多媒体中有一个拖动的游戏,搞不定,请各位朋友帮忙。   
我使用的Flash版本是MX中文版,可惜参考资料全是FLASH5英文版的,以为自己一辈子不会用AS的--->>>   
情况如下:   
有一个按钮物件-->“Class”,当鼠标左键按下时拖动,左键放开时停止拖动,这步已经由以下语句完成:   
  
on  (press)  {   
           startDrag("Class",  true);   
}   
on  (release,  releaseOutside)  {   
           stopDrag();   
}   
  
目前遇到的难处是:   
要在鼠标左键放开时判断CLASS是否在65<=X<=190,24<=Y<=145,如果符合条件上,则CLASS缩小到40%停止在鼠标左键放开的位置,如果不合条件,CLASS物件回到原位。   
以上代码应该如何添加代码句,请各位指点,UP无分,本贴分数只给第一个代码经过测试有效并且无错的高手。多谢!   
---------------------------------------------------------------   
  
我的方法有下面几种:   
第1种方法,建一透明的影片,大小和位置设成“65<=X<=190,24<=Y<=145",然后用再用FLASH脚本判断是否在拖动之后与这个重叠(用hittest判断),如果是的话就调整尺寸咯,这个是比较简单的方法咯   
  
第2种方法,不建透明影片,写脚本来判断位置,用_x>?  &&  _x<?  &&  _y>?  &&  _y<?的形式来   
  
第3种方法嘛,没有前两种好,我觉得第一种比较好,代码理少得多,我只说方法,代码你自己写吧,别太懒咯~`````^_^   
---------------------------------------------------------------   
  
  
on  (press)  {   
       startDrag("Class",  true);   
       XXXXX=this._x;   
       YYYYY=this._y;   
}   
  
on  (release,  releaseOutside)  {   
       stopDrag();   
       if  (65<=this._x<=190  and  24<=this._y<=145){   
               this._scale=40;   
       }else{   
               this._x=XXXXX;   
               this._y=YYYYY;   
       }   
}   
  
  
  
---------------------------------------------------------------   
  
//  by  eagle(128)   
var  oldx  =原始X值;  //定义要拖动的影片class的初始x位置   
var  oldY  =原始X值;    //定义要拖动的影片class的初始y位置   
  
this.onMouseDown  =  function()  {   
           class.startDrag(true);    //按下鼠标,拖动   
};   
  
this.onMouseUp  =  function()  {   
           if  (((class._x>=65)  &&  (class._x<=190))  &&((class._y>=24)  &&  (class._y<=145)))  {   
           class._xscale=40;    //满足条件,zscale缩小为40%   
           class._yscale=40;    //满足条件,yscale缩小为40%   
  
           }  else  {   
           class._xscale=100;       
           class._yscale=100;  //这两条不能少,否则就一次之后就不能恢复原状   
  
           class._x=oldx;     
           class._y=oldy;  //这两条回到原始位置   
           }   
           class.stopDrag();  //停止拖动   
};   
  
  
提一点建议,作为游戏,上面定义都只能说太过简单,而且做程序最忌讳用绝对坐标和绝对路径。   
作为单个的对象运行还行,但涉及多个对象时,尽量定义一个结构,可能要省些时间。对于范围的限定,可以用一个影片符号的左、右、上、下来限定。而不是用具体的数值,因为你一旦改变其在影片中的层次,恐怕这个定义就没有任何意义。比如你在场景中是这个值,哪天一旦转成影片符号,又要从新定义,不如用相对值,不论在哪,都不用变。(包括上面的oldx,oldy的定义。)   
    
另外,一旦改变一个对象的属性,如果没有到此结束,记得要设法使它恢复原状。比如上面的   
         class._xscale=100;       
         class._yscale=100;     
这应该是个很单纯的问题。   

评论 点击查看
 

精彩图片