两种方法:
1最简单的方法:
在侦听MouseEventMOUSE_DOWN的函数下使用mcstartDrag(),然后在侦听MouseEventMOUSE_UP的函数下使用mcstopDrag();
缺点:每次只能拖拽一个对象,偶尔会有误判导致鼠标释放了还是跟随鼠标
2常用的方法
侦听MouseEventMOUSE_DOWN、MouseEventMOUSE_UP、MouseEventMOUSE_MOVE
设一个Point变量记录之前的点击点或经过的点,在MouseEventMOUSE_MOVE的侦听函数中实时改变位置然后将这个变量设为当前的坐标
第2个方法可以避免第一个方法中的问题,而且可以一次拖拽多个物体
假设元件是mc,代码如下:
第一种方法:
//最好用stage侦听,避免误判的情况出现stageaddEventListener(MouseEventMOUSE_DOWN,dragHandle);
stageaddEventListener(MouseEventMOUSE_UP,dragHandle);
//函数
function dragHandle(e:MouseEvent):void
{
//确保点击的是mc
if (etarget==mc)
{
if (etype==MouseEventMOUSE_DOWN)
{
mcstartDrag();
}
if (etype==MouseEventMOUSE_UP)
{
mcstopDrag();
}
}
}
第二种方法:
//最好用stage侦听,避免误判的情况出现stageaddEventListener(MouseEventMOUSE_DOWN,dragHandle);
stageaddEventListener(MouseEventMOUSE_UP,dragHandle);
//声明一个储存位置的点,这个点可以保证移动鼠标后元件相对于鼠标的位置不变
var position:Point = new Point();
//指示当前是否按下了鼠标
var mouseDown:Boolean = false;
//函数
function dragHandle(e:MouseEvent):void
{
//确保点击的是mc,用contains函数更准确一些
if (etargetcontains(mc))
{
if (etype==MouseEventMOUSE_DOWN)
{
positionx = mcmouseX;
positionx = mcmouseY;
mouseDown = true;
}
if (etype==MouseEventMOUSE_UP)
{
mouseDown = false;
}
if (etype==MouseEventMOUSE_MOVE && mouseDown)
{
mcx = mcparentmouseX - positionx;
mcy = mcparentmouseY - positiony;
}
}
}
希望能帮到你!
您好,您可以在 AS3 中使用 stageaddEventListener(MouseEventMOUSE_MOVE, onMouseMove); 来监听鼠标的移动事件,然后在 onMouseMove 函数中处理鼠标的移动。举个例子,你可以将鼠标的坐标与舞台的中心进行比较,如果鼠标移出了舞台,就让鼠标瞬间移动到舞台中央。
stageaddEventListener(MouseEventMOUSE_MOVE, onMouseMove);
function onMouseMove(e:MouseEvent):void {
var stageCenter:Point = new Point(stagestageWidth/2, stagestageHeight/2);
if (!contains(etarget as DisplayObject)) {
Mousecursor = MouseCursorAUTO;
Mousehide();
stagemouseX = stageCenterx;
stagemouseY = stageCentery;
}
}
//设被移动的物体为jumpmc,楼主有n个mc可能会被移动。以下as写在时间轴上
var jumpmc:Sprite;
mc1addEventListener(MouseEventCLICK,jump);
mc2addEventListener(MouseEventCLICK,jump);
mc3addEventListener(MouseEventCLICK,jump);
mcnaddEventListener(MouseEventCLICK,jump);
function jump(e:MouseEvent):void{
jumpmc=etarget;
}
thisaddEventListener(MouseEventCLICK,jump2);
function jump2(e:MouseEvent):void
{
if (jumpmc){
jumpmcx=mouseX;
jumpmcy=mouseY;
jumpmc=null;
}
}
//以上只是简单的测试,直接输入的,可能有大小写或者标点符号有错误,我没有进行过测试。另外,你可以使用for循环给想要移动的物体增加监听。可以根据类似于childAt(),当然啦,每个输一次监听这样的笨办法也是可以的。
//此外,你要判断你鼠标是否点到了物体上,(为了避免重合,这个你可以进行判断),以及其他的。这只是一个基本的模块。 另外,还需要其他注意的地方,很有可能你使用不成功,这是由于相对坐标与鼠标坐标不同的原因。这个自己想办法解决吧。
给你一个思路,的大小必须固定例如高1600,宽1200。
然后舞台大小也固定好尺寸例如高700,宽1200。
获取鼠标坐标,把鼠标乘于(高度减去舞台高度700),然后确定移动的多少。
pic_mcy = - mouseY 9 / 7;
具体代码如下,叫做pic_mc,如果不明白可以看看附件。
addEventListener(EventENTER_FRAME, fl_EnterFrameHandler);
function fl_EnterFrameHandler(event:Event):void
{
pic_mcy = - mouseY (1600-700) / 700;
}
//以下代码是让鼠标点击播放下一张的。
pic_mcaddEventListener(MouseEventCLICK, fl_MouseClickHandler);
function fl_MouseClickHandler(event:MouseEvent):void
{
pic_mcplay();
}
就算鼠标不动,对象自身移入了鼠标范围,会自动执行 MouseEventROLL_OVER;同理对象自身移出了鼠标范围也会执行MouseEventROLL_OUT,
没必要使用EventENTER_FRAME吧?
数组保存路径点数据,然后关联x轴或y轴的数值读取,物体对应坐标显示就可以了
数据可以写一个onEnterFrame+trace
读出,自己整理成数组数据就可以了
如果是类似模拟旋钮之类的规则弧线运动,比如音量调节按钮,直接用三角函数计算角度值,半径算出坐标即可
以上就是关于as3.0鼠标向左向右移动检测全部的内容,包括:as3.0鼠标向左向右移动检测、问:撰写AS3的3D函数——有没有办法控制鼠标不离开舞台啊、flash as3.0 怎么实现鼠标点击后,一物体跳跃到被点击的物体处,能写个简单的as参考一下吗一直不明白等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)