发新话题
打印

[求救] 我想限制拖动的具体范围,比如其他形状,用hitTest()说可以,谁给我个例子啊

我想限制拖动的具体范围,比如其他形状,用hitTest()说可以,谁给我个例子啊

我要拖动电影元件,要在凌型内拖动,谁给我个例子,或代码给我恩~~

TOP

startdrag本来就带范围参数的
水星

TOP

那个是出来坐标不是移动范围啊,不要误导哦~~

TOP

不规则的肯定要用到hittest了,还不用直接用flash自带的hittest,要用bitmapdata的那个hitest,网上有这个类可以下载的,自己去找找吧
水星

TOP

网上这类例子叫什么?我就是找不到才来问的哦~

TOP

帮你做个简单的吧

var mLisenter:Object = {};
mLisenter.onMouseMove = function() {
!l_mc.hitTest(_xmouse, _ymouse, true) && y_mc.stopDrag();
};
Mouse.addListener(mLisenter);
y_mc.onPress = function() {
this.startDrag(true);
};
y_mc.onRelease = function() {
this.stopDrag();
};
未命名-1.fla (48 KB)

[ 本帖最后由 200398sb40whb 于 2008-7-3 09:47 编辑 ]

TOP

谢谢,领教了

TOP

好的,谢谢啊~~

TOP

能否加个碰边反弹呀,要不一到边就卡住

TOP

卡住了你点击菱形和园的重叠的部分又可以拖动小圆的了.

TOP

效果不是很好,贵在简单:
var mLisenter:Object = {};
mLisenter.onMouseMove = function() {
!l_mc.hitTest(_xmouse, _ymouse, true) && y_mc.stopDrag();
};
mLisenter.onMouseUp = function() {
if (l_mc.hitTest(y_mc)) {
  y_mc._x += (y_mc._width/2)*(l_mc._x-y_mc._x)/Math.abs(l_mc._x-y_mc._x);
  y_mc._y += (y_mc._width/2)*(l_mc._y-y_mc._y)/Math.abs(l_mc._y-y_mc._y);
}
};
Mouse.addListener(mLisenter);
y_mc.onPress = function() {
this.startDrag(true);
};
y_mc.onRelease = function() {
this.stopDrag();
};
未命名-1.fla (32 KB)

TOP

能否把被移动的元件以边碰边反弹,不要中心点碰边反弹呀,要不图片大小不一这样如大图碰边会超出,小图没到边就反弹.
有个问题,在被移动元件边上点击,元件也会移动饿~~

TOP

碰边反弹很难实现的。。
一般的hitTest(x,y,false)已经比hitTest(mc)高级了,但是也只能限制在这里。
BitmapData类的hitTest貌似能解决?这个本人不精通。

我说很难实现的意思就是还是有办法实现了。

如果图形规范些,可以不只考虑图形中心点,而是考虑几个点。
比如一个20x20的矩形,
可以不只检测或根本不检测hitTest(this._x,this._y,false)
而是同时检测4个
hitTest(this._x-10,this._y-10,false)
hitTest(this._x-10,this._y+10,false)
hitTest(this._x+10,this._y+10,false)
hitTest(this._x+10,this._y-10,false)
也就是4个顶点,这4个点大致可以围出矩形的全部区域。较大图需要多添加几个要检查的点。

TOP

200398sb40whb,能帮忙改改么~~

TOP

我在网吧,手头没有flash很难办的,
这个原理不是很难,
别人应该能做出来

TOP

好,有时间帮你想想,不过现在很忙呀!

TOP

好的,谢谢啊~

TOP

可以考虑hittest的范围不是圆,而是圆外面的部分
水星

TOP

提供个思路吧:
在菱形的边加多一个线段(_mc),然后检测_mc与圆的碰撞。当然这样的线段得有4跟,位置要和菱形处理好!不能给人看出破绽!

TOP

如果被拖的元件是个矩形就省事了,
是圆形也可。其它规则几何图形都可以.

在游戏区本人写过替代hitTest的Function(那个是检测2个圆碰撞的)

TOP

闪吧里那个不规则碰撞检测的AS2类是你写的?

TOP

没见过那个类,
只是游戏区某君问我足球里面2个圆形运动员碰撞,
怎么不按方形考虑,
就写了个
hitCircle()的function

TOP

楼上把那个地址给我行吗,我看看

TOP

一种罗嗦但终极的做法:检测图形边界:检测图形边界的思路见:http://space.flash8.net/space/?284926/action_viewspace_itemid_372562.html
如下是具体做法:(没完善,功能基本有,碰到边界反弹,虽然反弹不是很好!拖动不要太快!所设执行时间已经很快了,但拖动快还是会有出边想象!)
as:
var xy_array:Array = [];
var _array:Array = [];
var interval:Number;
for (y=_mc._y; y<_mc._height+_mc._y; y++) {
for (x=_mc._x-1; x<_mc._width+_mc._x; x++) {
  if (_mc.hitTest(x, y, true) && !_mc.hitTest(x+1, y, true)) {
   xy_array.push({x:x, y:y});
  } else if (_mc.hitTest(x, y, true) && !_mc.hitTest(x-1, y, true)) {
   xy_array.push({x:x, y:y});
  }
  if (_mc.hitTest(x, y, true) && !_mc.hitTest(x, y+1, true)) {
   xy_array.push({x:x, y:y});
  } else if (_mc.hitTest(x, y, true) && !_mc.hitTest(x, y-1, true)) {
   xy_array.push({x:x, y:y});
  }
}
}
y_mc.onPress = function() {
this.startDrag();
};
y_mc.onMouseUp = function() {
this.stopDrag();
};
function pd() {
for (i=0; i<xy_array.length; i++) {
  if (y_mc.hitTest(xy_array.x, xy_array.y, true)) {
   y_mc.stopDrag();
   //
   y_mc._x += (y_mc._width/2)*(250-y_mc._x)/Math.abs(250-y_mc._x);
   y_mc._y += (y_mc._width/2)*(175-y_mc._y)/Math.abs(175-y_mc._y);
  }
}
}
interval = setInterval(_root, "pd", 0.0001);
未命名-2.fla (336 KB)

TOP

发新话题