flash怎么限制一个可移动的元件的移动范围

flash怎么限制一个可移动的元件的移动范围(舞台)顺便求一个能时常帮助我的大神的QQ(FLASH新手)... flash怎么限制一个可移动的元件的移动范围 (舞台)
顺便求一个能时常帮助我的大神的QQ(FLASH新手)
展开
 我来答
alanbabbage
推荐于2017-11-26 · TA获得超过977个赞
知道小有建树答主
回答量:755
采纳率:0%
帮助的人:1145万
展开全部

给你一个例子参考:(代码:as3.0)

var rect:Rectangle = new Rectangle(0,0,stage.stageWidth,stage.stageHeight);//更改矩形值可以修改限制范围

mc.addEventListener(MouseEvent.MOUSE_DOWN,downFun);

var dragx:Number;
var dragy:Number;

function downFun(e:MouseEvent):void{
dragx = mc.stage.mouseX-mc.x;
dragy = mc.stage.mouseY-mc.y;

mc.stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveFun);
mc.stage.addEventListener(MouseEvent.MOUSE_UP,mouseUpFun);
}

function mouseMoveFun(e:MouseEvent):void{
mc.x = mc.stage.mouseX-dragx;
mc.y = mc.stage.mouseY-dragy;

if(mc.x<rect.x){
mc.x = rect.x;
}else if(mc.x+mc.width>rect.width){
mc.x = rect.width-mc.width;
}

if(mc.y<rect.y){
mc.y = rect.y;
}else if(mc.y+mc.height>rect.height){
mc.y = rect.height-mc.height;
}

e.updateAfterEvent();
}

function mouseUpFun(e:MouseEvent):void{
mc.stage.removeEventListener(MouseEvent.MOUSE_MOVE,mouseMoveFun);
mc.stage.removeEventListener(MouseEvent.MOUSE_UP,mouseUpFun);
}


其中,mc为舞台的元件,注意,为了降低复杂程度和方便理解,故请将元件的注册点设置成元件的左上角。


代码as2.0,

1、使用startDrag来限制

mc.onMouseDown = function(){
mc.startDrag(false,0,0,Stage.width-mc._width,Stage.height-mc._height);
}

_root.onMouseUp = function(){
mc.stopDrag();
}

mc同as3.0的


2、使用onMouseMove来限制

import flash.geom.Rectangle;
var rect:Rectangle = new Rectangle(0,0,Stage.width,Stage.height);

var dragx:Number;
var dragy:Number;

mc.onMouseDown = function(){
dragx = _root._xmouse-this._x;
dragy = _root._ymouse-this._y;

_root.onMouseMove = mouseMoveFun;
_root.onMouseUp = mouseUpFun;
}

function mouseMoveFun(){
mc._x = _root._xmouse-dragx;
mc._y = _root._ymouse-dragy;

if(mc._x<rect.x){
mc._x = rect.x;
}else if(mc._x+mc._width>rect.width){
mc._x = rect.width-mc._width;
}

if(mc._y<rect.y){
mc._y = rect.y;
}else if(mc._y+mc._height>rect.height){
mc._y = rect.height-mc._height;
}

e.updateAfterEvent();
}

function mouseUpFun(){
delete _root.onMouseMove;
delete _root.onMouseUp;
}

判断方法与as3.0相同。


移动限制,请查看mouseMoveFun函数。


代码已经测试通过。如有问题请追问或私信。


需要帮助的话,请私信发信息过来。


PS:本人为上班族,时有不方便,请谅解。

追问

看不懂呢   

我是不想让这只蜘蛛跑出这个框框   

要它到边缘的时候能停下

追答

在设置蜘蛛的x,y之后,再来判断蜘蛛的是否超出舞台了。


由于有角度的旋转,将蜘蛛元件的注册点设置成图形的中心。


注意:最好将蜘蛛制作成正方形,否则在旋转时不方便进行计算,可以在底层添加一个透明的正方形图形来确保蜘蛛是正方形的。


在switch之后,加判断代码,如果超出边边则设置只到边边上去。

if(a_mc.x-a_mc.width/2 < 0){
a_mc.x = a_mc.width/2;
}else if(a_mc.x+mc.width/2> stage.stageWidth){
a_mc.x = stage.stageWidth-a_mc.width/2;
}

if(a_mc.y-a_mc.height/2<0){
a_mc.y = a_mc.height/2;
}else if(a_mc.y+a_mc.height/2> stage.stageHeight){
a_mc.y = stage.stageHeight-a_mc.height/2;
}


另附上附件,请使用CS5.5以上的软件打开。


正牌狼王
2014-04-17 · TA获得超过261个赞
知道小有建树答主
回答量:531
采纳率:100%
帮助的人:551万
展开全部
鼠标拖动吗?
拖动代码就自带限制,比如要拖动 mc那就
mc.startDrag(lockCenter:Boolean=false, bounds:Rectangle=null)

其中 bounds 就是你想限定的一个范围,去代码参考里就能找到相关的用法例子
http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/display/Sprite.html#startDrag()
更多追问追答
追问
键盘上下左右控制~~~   他能跑出舞台  我想把它限制在舞台内   ~~~~要怎么做
追答
在移动的函数里面做判断

if(mc.x stage.stageWidth || mc.y > stage.stageHeight)
{
不动
}
else
{
移动
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式