我想用flash做一个交互式动画,用鼠标拖动一个三角形,当三角形靠近参考线时能够吸附捕捉到参考线上
发布网友
发布时间:2023-03-27 23:15
我来回答
共2个回答
热心网友
时间:2023-10-24 23:30
AS2.0还是AS3.0的?
你应该把这些网格的辅助线转为影片剪辑——横线是一个影片剪辑,,给个链接名比如叫Hengxian,竖线是另一个影片剪辑,,给个链接名比如叫Shuxian。
然后遍历场景上的横线与竖线,当三角形的坐标(注册点)靠近的时候,就自动把坐标改成横线或竖线的值……
有点难说明。
你可以加我QQ 2656958,我帮你做个简单的列子给你参考。
//使用以下代码的前提条件是:你的场景上已经有三角形MC和所有网格线条的MC,三角形的实例名是mc,网格线不需要实例名,但是需要有库里的链接类,竖线的链接类叫Shuxian,横线的链接类叫Hengxian
var mc_x,mc_y,mouse_x,mouse_y:Number;
//开始拖动MC的时候是否让MC的注册点移到鼠标上
var lockCenter:Boolean = true;//true or false
//自动吸附的磁力范围
var mf:Number = 10;
//储存竖线索引的数组
var sxArr:Array = new Array();
//储存横线索引的数组
var hxArr:Array = new Array();
addChild(mc);//mc是你的三角形的实例名
for (var i:int = 0; i < this.numChildren - 1; i++)
{
var xian:MovieClip = MovieClip(this.getChildAt(i));
if(xian.constructor == Shuxian)//根据链接类的名称来判断它是横线还是竖线
{
sxArr.push(xian);
}
else
{
hxArr.push(xian);
}
}
//因为不能通过mc.startDrag来实现这个吸附效果,所以必须自己写拖动动作
mc.addEventListener(MouseEvent.MOUSE_DOWN,mcSelected);
function mcSelected(e:MouseEvent)
{
if(lockCenter)
{
mc.x = mouseX;
mc.y = mouseY;
}
mc_x = mc.x;
mc_y = mc.y;
mouse_x = mouseX;
mouse_y = mouseY;
stage.addEventListener(MouseEvent.MOUSE_MOVE,moveHandler);
stage.addEventListener(MouseEvent.MOUSE_UP,stopHandler);
}
function moveHandler(e:MouseEvent):void
{
mc.x = mc_x + mouseX - mouse_x;
mc.y = mc_y + mouseY - mouse_y;
for each(var shuxian in sxArr)
{
//进入竖线磁力范围的时候开始吸附
if(Math.abs(mc.x - shuxian.x) <= mf)
{
mc.x = shuxian.x;
break;
}
}
for each(var hengxian in hxArr)
{
//进入横线磁力范围的时候开始吸附
if(Math.abs(mc.y - hengxian.y) <= mf)
{
mc.y = hengxian.y;
break;
}
}
e.updateAfterEvent();
}
function stopHandler(e:MouseEvent)
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE,moveHandler);
stage.removeEventListener(MouseEvent.MOUSE_UP,stopHandler);
}
热心网友
时间:2023-10-24 23:31
网上有flash教程的那个更好一些!追问网上flash教程我有找过,具体问题没有,如果你有链接能否给个?或者我还是期待高手的解答吧!