Цитата:
|
Сообщение от Kikasso
вроде так работает:
 Код:
var XS = ( x1 >= x0 ) === ( x0 >= x2 );
var XS2 = ( x3 >= x0 ) === ( x0 >= x4 );
var YS = ( y1 >= y0 ) === ( y0 >= y2 );
var YS2 = ( y3 >= y0 ) === ( y3 >= y4 );
|
y3 - ошибка?
Сделал для наглядности пример, а то проект у меня очень большой, я проверял почти также и как у тебя, не во всех случаях работает

Код:
var tochka:MovieClip = _root.createEmptyMovieClip("tochka", _root.getNextHighestDepth());
tochka.lineStyle(1, 0x0000ff, 100);
tochka.moveTo(-5,0)
tochka.lineTo(5,0)
tochka.moveTo(0,-5)
tochka.lineTo(0,5)
var par1:MovieClip = _root.createEmptyMovieClip("par1_mc", _root.getNextHighestDepth());
par1._x = 200;
par1._y = 200;
par1.point = {x1:0, y1:0, x2:100, y2:0, x3:75, y3:100, x4:25, y4:100};
par1.lineStyle(2, 0x00ff00, 100);
par1.beginFill(0x00ff00, 30);
par1.moveTo(par1.point.x1, par1.point.y1);
par1.lineTo(par1.point.x2, par1.point.y2);
par1.lineTo(par1.point.x3, par1.point.y3);
par1.lineTo(par1.point.x4, par1.point.y4);
par1.lineTo(par1.point.x1, par1.point.y1);
par1.endFill();
var par2:MovieClip = _root.createEmptyMovieClip("par2_mc", _root.getNextHighestDepth());
par2._x = 150;
par2._y = 150;
par2.point = {x1:0, y1:0, x2:-100, y2:0, x3:-75, y3:-100, x4:25, y4:-100};
par2.lineStyle(2, 0xff0000, 100);
par2.beginFill(0xff0000, 30);
par2.moveTo(par2.point.x1, par2.point.y1);
par2.lineTo(par2.point.x2, par2.point.y2);
par2.lineTo(par2.point.x3, par2.point.y3);
par2.lineTo(par2.point.x4, par2.point.y4);
par2.lineTo(par2.point.x1, par2.point.y1);
par2.endFill();
par1.onPress = function() {
this.startDrag();
};
par1.onRelease = function() {
this.stopDrag();
checkIt(this, par2);
};
function checkIt(par1, par2) {
var myPoint1:Object = {x:0, y:0};
par1.localToGlobal(myPoint1);
var myPoint2:Object = {x:0, y:0};
par2.localToGlobal(myPoint2);
for (var i1 = 1; i1<=4; i1++) {
var i2:Number = i1+1;
if (i2 == 5) {
i2 = 1;
}
var dgx:Number = (myPoint1.x+par1.point["x"+i2])-(myPoint1.x+par1.point["x"+i1]);
var dgy:Number = (myPoint1.y+par1.point["y"+i2])-(myPoint1.y+par1.point["y"+i1]);
var c1:Number = ((myPoint1.x+par1.point["x"+i1])*dgy)-((myPoint1.y+par1.point["y"+i1])*dgx);
//
var toch1Xmin:Number = myPoint1.x+par1.point["x"+i1];
var toch1Xmax:Number = myPoint1.x+par1.point["x"+i2];
var toch1Ymin:Number = myPoint1.y+par1.point["y"+i1];
var toch1Ymax:Number = myPoint1.y+par1.point["y"+i2];
for (var j1 = 1; j1<=4; j1++) {
var j2:Number = j1+1;
if (j2 == 5) {
j2 = 1;
}
var dsx:Number = (myPoint2.x+par2.point["x"+j2])-(myPoint2.x+par2.point["x"+j1]);
var dsy:Number = (myPoint2.y+par2.point["y"+j2])-(myPoint2.y+par2.point["y"+j1]);
var c2:Number = ((myPoint2.x+par2.point["x"+j1])*dsy)-((myPoint2.y+par2.point["y"+j1])*dsx);
var det:Number = dsx*dgy-dgx*dsy;
//
var toch2Xmin = myPoint2.x+par2.point["x"+j1];
var toch2Xmax = myPoint2.x+par2.point["x"+j2];
var toch2Ymin = myPoint2.y+par2.point["y"+j1];
var toch2Ymax = myPoint1.y+par2.point["y"+j2];
//
if (det != 0) {
var X = -(c2*dgx-c1*dsx)/det;
var Y = (dsy*c1-dgy*c2)/det;
var XS = (toch1Xmin>=X) === (X>=toch1Xmax);
var XS2 = (toch2Xmin>=X) === (X>=toch2Xmax);
var YS = (toch1Ymin>=Y) === (Y>=toch1Ymax);
var YS2 = (toch2Ymin>=Y) === (Y>=toch2Ymax);
//
if (XS && XS2 && YS && YS2) {
trace("X="+X);
trace("Y="+Y);
var myPoint:Object = {x:X, y:Y};
tochka.duplicateMovieClip("toch_mc"+i1+"_"+j1, _root.getNextHighestDepth(), {_x:myPoint.x, _y:myPoint.y});
}
}
}
}
}
Думаю, что дело в том что toch1Xmin может быть больше toch1Xmax, т.е. их надо сначала проверять и если надо менять местами.