[代码整理]游戏中的装备栏装备的拖动 mygamemylove(2008-5-6 11:42:00)举报不良信息
发表时间:2008-5-27 13:15:00

先看效果:




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

代码:


stop();
//游戏中的装备栏装备的拖动
//flash原创代码尽在 www.MyGameMyLove.com
//2008-5-27 整理 smallerbird

//电影符号深度从小到大
//这里用到上次的代码功能:mc电影符号设置深度值的方法 http://www.mygamemylove.com/t_html/573.html
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[i] == mc) {
numI = i;
break;
}
}
//移位并用mc.swapDepths()换深度
if (numI > num) {
for (var i = numI; i > 0; i--) {
arr[i].swapDepths (arr[i - 1]);
var mcTem:MovieClip = arr[i];
arr[i] = arr[i - 1];
arr[i - 1] = mcTem;
}
}
else if (numI < num) {
for (var i = 0; i < numI; i++) {
arr[i].swapDepths (arr[i + 1]);
var mcTem:MovieClip = arr[i];
arr[i] = 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;
}
}


回复主题
内 容: