![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Nov 2001
Адрес: Москва
Сообщений: 155
|
То есть нужно, чтобы при отпускании мыши объект прилеплялся к ближайшей линии.
В пределах клетки добиться удалось путем использования Math.ceil и Math.floor - скачет к ближайшей линии сетки, но вот стоит пересечь эту линию, он скачет к ближайшей линии клетки, которую объект зацепил. Это еще если объект меньше, чем шаг сетки. А если больше, вообще мрак. Вот, к примеру, в подобном ключе вычисляю _x step = 10;
coordx = Math.floor(this._x/step)*step+this._width/2;
coordxnext = coordx + step; // следующая линия сетки - глупость, я понимаю.
if ((this._x + this._width/2) >((coordx + coordxnext)/2)) {
_x = Math.ceil(this._x/step)*step+this._width/2-this._width;
} else {
_x = Math.floor(this._x/step)*step+this._width/2;
}
|
|
|||||
|
Регистрация: Nov 2003
Сообщений: 128
|
Используй округление. Если сетка равномерная, дели расстояние на шаг и округляй. получишь номер линии ячеек.
|
|
|||||
|
Регистрация: Nov 2001
Адрес: Москва
Сообщений: 155
|
А зачем мне номер линии, я пока что-то не врублюсь.
|
|
|||||
|
Регистрация: Nov 2003
Сообщений: 128
|
номер линии * шаг = координата
|
|
|||||
|
Регистрация: Nov 2001
Адрес: Москва
Сообщений: 155
|
Как я понимаю, нужно сравнивать четыре параметра для x - расстояние левого края объекта до ближайших вертикальных линий сетки и соответственно правого края до ближайших ему линий сетки.
А номер линии разве что считать начиная от линии, которая левее левого края объекта? |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
|
//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 (40, 0); mc.lineTo (40, 40); mc.lineTo (0, 40); mc.lineTo (0, 0); mc.endFill (); // mc.onPress = function () { this.onMouseMove = this.mouseMove; //startDrag(false,0,0,360,360) }; mc.onRelease = mc.onReleaseOutside = function () { delete this.onMouseMove; }; mc.mouseMove = function () { var x = Math.floor (_root._xmouse / 40) * 40; var y = Math.floor (_root._ymouse / 40) * 40; x = x < 0 ? 0 : x > 360 ? 360 : x; y = y < 0 ? 0 : y > 360 ? 360 : y; this._x = x; this._y = y; }; |
|
|||||
|
Регистрация: Dec 2003
Адрес: Москва
Сообщений: 176
|
вот, посмотри файл. Вроде работает, как надо
|
![]() |
![]() |
Часовой пояс GMT +4, время: 11:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|