查看完整版本: 游戏中的装备栏装备的拖动

smallerbird 2008-5-27 13:33

游戏中的装备栏装备的拖动

先看效果:
[flash]http://www.mygamemylove.com/demo/2008527131848.swf[/flash]

原文地址:[url=http://www.mygamemylove.com/t_html/586.html]http://www.mygamemylove.com/t_html/586.html[/url]
这个例子,主要用到就是上次发布的代码:
mc电影符号设置深度值的方法 [url=http://www.mygamemylove.com/t_html/573.html]http://www.mygamemylove.com/t_html/573.html[/url]
因为我们在拖动某一个装备的时候都要让他在最前。不然后就会被叠在下边,这个不是我们希望的。
原理简单的说一下:就是循环给每一个装备加上事件:
按下:拖动该装备
松开:测试是否在拖动动目标区域,如果在就不显示.如果不在,就返回到原来的位置。
放在上面:相应的大图显示还有效果。
代码:

stop();
//游戏中的装备栏装备的拖动
//flash原创代码尽在 [url=http://www.mygamemylove.com/]www.MyGameMyLove.com[/url]
//2008-5-27 整理 smallerbird
//电影符号深度从小到大
//这里用到上次的代码功能:mc电影符号设置深度值的方法 [url=http://www.mygamemylove.com/t_html/573.html]http://www.mygamemylove.com/t_html/573.html[/url]
var arr:Array = [btn2, btn1, btn3, btn4, btn8, btn7, btn5, btn6, btn9, btn10];
//setDepth (mc:要指定深度的电影符号,位置(注:从0开始), 排序数组)
function setDepth (mc:MovieClip, num:Number, arr:Array)
{
//找到设置深度mc的位置
var numI:Number = 0;
for (var i = 0; i < arr.length; i++) {
  if (arr == mc) {
   numI = i;
   break;
  }
}
//移位并用mc.swapDepths()换深度
if (numI > num) {
  for (var i = numI; i > 0; i--) {
   arr.swapDepths (arr[i - 1]);
   var mcTem:MovieClip = arr;
   arr = arr[i - 1];
   arr[i - 1] = mcTem;
  }
}
else if (numI < num) {
  for (var i = 0; i < numI; i++) {
   arr.swapDepths (arr[i + 1]);
   var mcTem:MovieClip = arr;
   arr = arr[i + 1];
   arr[i + 1] = mcTem;
  }
}
}
//用于保存当前拖动的mc
var mcDrag:MovieClip;
//是否可以拖动
var isDrag:Boolean = true;
//
var numEndFrame:Number=158
//处理
function thisDo ()
{
mcDrag.stopDrag ();
mcDrag._visible=false

}
//
for (var i = 1; i <= 10; i++) {
//效果
_root["eBak" + i]._visible = false;
_root.eTak["mc" + i]._visible = false;
//
_root["btn" + i].lastx = _root["btn" + i]._x;
_root["btn" + i].lasty = _root["btn" + i]._y;
_root["btn" + i].value = i;
_root["btn" + i].onPress = function ()
{
  if (!isDrag) {
   return false;
  }
  //
  if(_root._currentframe!=_root.numEndFrame){
   _root.gotoAndStop(_root.numEndFrame)
  }
  //
  _root["eBak" + this.value]._visible = false;
  _root.eTak["mc" + this.value]._visible = false;
  //
  if (mcDrag != undefined) {
   mcDrag.stopDrag ();
   mcDrag._x = mcDrag.lastx;
   mcDrag._y = mcDrag.lasty;
  }
  mcDrag = this;
  _root.setDepth (this, 0, _root.arr);
  startDrag (this, true);
};
_root["btn" + i].onRollOver = function ()
{
  _root["eBak" + this.value]._visible = true;
  _root.eTak["mc" + this.value]._visible = true;
};
_root["btn" + i].onDragOut = _root["btn" + i].onRollOut = function ()
{
  _root["eBak" + this.value]._visible = false;
  _root.eTak["mc" + this.value]._visible = false;
};
}
someListener = new Object ();
someListener.onMouseUp = function ()
{
if (!isDrag) {
  return false;
}
_root["eBak" + mcDrag.value]._visible = false;
_root.eTak["mc" + mcDrag.value]._visible = false;
//检测是否到了拖动的目标
if (mcDrag.hitTest (_root.mcHit)) {
  _root.thisDo ();
}
else {
  //
  mcDrag.stopDrag ();
  mcDrag._x = mcDrag.lastx;
  mcDrag._y = mcDrag.lasty;
}
};
Mouse.addListener (someListener);
//恢复装备的位置
btnIni.onRelease=function(){
for (var i = 1; i <= 10; i++) {
  _root["btn" + i]._visible=true
  _root["btn" + i]._x = _root["btn" + i].lastx;
  _root["btn" + i]._y= _root["btn" + i].lasty;
}
}

smallerbird 2008-5-29 09:37

ding

dingding

michaelkua 2008-6-3 05:02

高薪诚聘!!!深圳市iLemon网络科技高薪诚聘WebGame程序开发人才加盟

*** 作者被禁止或删除 内容自动屏蔽 ***
页: [1]
查看完整版本: 游戏中的装备栏装备的拖动