![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2003
Сообщений: 128
|
Через округление я делал, кажется, так - определял линии привязки через раунд для верхнего левого и нижнего правого, после определял невязку для того и другого. Где невязка меньше - туда и клеить.
Ну и сторону ловить, конечно. Последний раз редактировалось MaxLife; 08.11.2005 в 22:49. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
|
Цитата:
![]() |
|
|||||
|
Регистрация: Nov 2003
Сообщений: 128
|
//init line
lineStyle (0, 0); for (i = 0; i < 11; i++) { moveTo (0, i * 40); lineTo (400, i * 40); moveTo (i * 40, 0); lineTo (i * 40, 400); } // init clip createEmptyMovieClip ("mc", 0); mc.lineStyle (0, 0xFF0000); mc.beginFill (0xFF0000, 50); mc.lineTo (30, 0); mc.lineTo (30, 30); mc.lineTo (0, 30); mc.lineTo (0, 0); mc.endFill (); // mc.onPress = function () { //this.onMouseMove = this.mouseMove; this.startDrag(); }; mc.onRelease = mc.onReleaseOutside = function () { //delete this.onMouseMove; this.stopDrag(); var x1 = Math.floor (this._x / 40); var y1 = Math.floor (this._y / 40); var dx1 = this._x - x1 * 40; var dy1 = this._y - y1 * 40; var x2 = Math.floor ((this._x + this._width) / 40); var y2 = Math.floor ((this._y + this._height) / 40); var dx2 = Math.abs(this._x + this._width - x2 * 40); var dy2 = Math.abs(this._y + this._height - y2 * 40); if (dx1 < dx2) this._x = x1 * 40 else this._x = x2 * 40 - this._width; if (dy1 < dy2) this._y = y1 * 40 else this._y = y2 * 40 - this._height; }; не совсем устойчив, зараза, каюсь. старый не найду - ещё на дельфи писал. срабатывает после отпускания. |
|
|||||
|
Регистрация: Nov 2001
Адрес: Москва
Сообщений: 155
|
Вот классный пример, но я не могу с ним совладать.
Может, кто "асилит" ![]() |
|
|||||
|
Регистрация: Nov 2003
Сообщений: 128
|
теперь банановый
//init line lineStyle (0, 0); for (i = 0; i < 11; i++) { moveTo (0, i * 40); lineTo (400, i * 40); moveTo (i * 40, 0); lineTo (i * 40, 400); } // init clip createEmptyMovieClip ("mc", 0); // shape size var s = 90; mc.lineStyle (0, 0xFF0000); mc.beginFill (0xFF0000, 50); mc.lineTo (s, 0); mc.lineTo (s, s); mc.lineTo (0, s); mc.lineTo (0, 0); mc.endFill (); // mc.onPress = function () { this.startDrag(); }; mc.onRelease = mc.onReleaseOutside = function () { this.stopDrag(); var x1 = Math.round (this._x / 40); var y1 = Math.round (this._y / 40); var dx1 = this._x - x1 * 40; var dy1 = this._y - y1 * 40; var x2 = Math.round ((this._x + this._width) / 40); var y2 = Math.round ((this._y + this._height) / 40); var dx2 = Math.abs(this._x + this._width - x2 * 40); var dy2 = Math.abs(this._y + this._height - y2 * 40); if (dx1 < dx2) this._x = x1 * 40 else this._x = x2 * 40 - this._width; if (dy1 < dy2) this._y = y1 * 40 else this._y = y2 * 40 - this._height; }; |
|
|||||
|
Регистрация: Dec 2003
Адрес: Москва
Сообщений: 176
|
вот, посмотри файл. Вроде работает, как надо
|
|
|||||
|
Регистрация: Dec 2003
Адрес: Москва
Сообщений: 176
|
черт, файл первый раз забыл
![]() |
|
|||||
|
Регистрация: Nov 2001
Адрес: Москва
Сообщений: 155
|
Спасибо! Все здорово!
Всем большое спасибо за помощь и за интересные решения! ![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 09:54. |
|
|
« Предыдущая тема | Следующая тема » |
|
|