打印

[其它] 请教大侠一个问题 "MC位置切换"

MC位置切换:比如说:舞台上有8个MC,实例名为:mc1,mc2,mc3......mc8  纵排下来,当鼠标按下mc8的时候可以拖动,mc8拖动到mc5之上的时候mc5往下移,mc8取代mc5 的位置......

就好像,千千静听,酷狗,等里面的歌曲列表一样,歌曲可以自由拖放到其它的位置上
我本善良~!

TOP

在释放拖动效果的同时,判断它与哪个MC相碰撞了。
比如也可写成一个检查函数:
function check_func(_btn:MovieClip) {
       for (var p:Number = 9; p>=0; p--) {
              if (_btn == this["new_btn"+p]) {
                     continue;
              }
              if (_btn.hitTest(this["new_btn"+p])) {
                     move_func(_btn, this["new_btn"+p]);在这里把相互碰撞的两个MC传递给move_func函数,
在move_func中根据它们的位置来动态调整其它的按钮位位置。

用以上思路做成的示例如下:
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!
http://www.flash023.cn 终极讨厌

TOP

谢谢版主的指导,受益非浅~!
我本善良~!

TOP

谢谢版主的示例.

再想请问一下版主,和两个MC碰撞,是如何计算的.比如,我移到两个MC的中间.?谢谢

TOP

版主啊:帮帮我吧~!

function movie_func(mc1:MovieClip, mc2:MovieClip) {
       mc1.y = mc1.y+mc2.y;
       mc2.y = mc1.y-mc2.y;
       mc1.y = mc1.y-mc2.y;
}
function check_func(ba:MovieClip) {
       for (var p:Number = 9; p>=0; p--) {
              if (ba == this["ba"+p]) {
                     continue;
              }
              if (ba.hitTest(this["ba"+p])) {
                     move_func(ba, this["ba"+p]);
              }
       }
}
onEnterFrame = function () {
       for (i=0; i<=6; i++) {
              this["ba"+i].id = i;
              lanS = this["ba"+i];
              lanS.onPress = function() {
                     startDrag(this);
                     check_func();
                     //trace(this)
              };
              lanS.onRelease = onRollOut=function () {
                     stopDrag();
                     //trace("stop");
                     
              };
       }
};

这个为什么可以拖动,为什么检测不到他们相撞? :eek: :eek:

TOP

onPress 是一次性check_func();所以只在按下的时候检测

应该将check_func()加在enterframe事件中
http://www.liuhuan.com

TOP

也不行啊~!试了

要不你写一个出来,,,好不?

TOP