PDA

Просмотр полной версии : OnMouseMove и огранечение в передвижении


Kroli4eg
28.05.2008, 14:33
Дотрый день. У меня есть карта которую можно двигать мышкой (в рамках клипа) и размеры которой можно менять. Проблема в том что огранечение по перемещению не всегда сробатывает, например если я резко дерну мышкой, карта вылетает за пределы области, а если двигаю не быстро то все работает. Вот код

_root.onMouseDown = function()
{
a = _root._xmouse - bigmap._x;
b = _root._ymouse - bigmap._y;

_root.onMouseMove = function()
{
s = bigmap._xscale = bigmap._yscale;
l = s*14.47/2;// opedelyaem na skol'ko karta izmenilas' pri maswtabirovanii
k = s*11.024/2;
// opredelyaem 4 to4ki na granyax karti
coord4 = bigmap._x - l;
coord3 = bigmap._x + l;
coord2 = bigmap._y + k;
coord1 = bigmap._y - k;
if ((coord1 < 0)&&(coord2 > 418.9)&&(coord3 > 550)&&(coord4 < 0))
{
// dvigaem kartu tak 4tobi pri nazatii na nee cener karti i poziciya kursora ne bili ravni
bigmap._x = _root._xmouse - a;
bigmap._y = _root._ymouse - b;
}
updateAfterEvent();
}
}

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

iNils
28.05.2008, 15:45
Используйете метод startDrag, указывая в параметрах область драга.

Alex_beginner
28.05.2008, 15:47
1. Движение мыши это процесс прерывистый
2. При быстром движении наблюдаются два граничных момента:
а) позиция мыши не перешла за границы холста
б) позиция мыши вне пограничной области ограничения, но проверять ее уже некому - обработчик onMouseMove работает только в области клипа
Вот и получается, что если Вы быстро двигаете мышь Вы попросту пролетаете пограничную контролируемую область и обработчик неуспивает зафиксировать факт "вне холста".

Kroli4eg
28.05.2008, 18:52
Используйете метод startDrag, указывая в параметрах область драга.

Здорово, как все легко ролучается. ;-) Спасибо огромное!!! Сделала так(если кому интересно):

_root.onMouseDown = function()
{
s = bigmap._xscale = bigmap._yscale;
l = s*1447/200;
k = s*1102/200;
a = 209.44 - k;
b = 275 - l;
coord4 = 209.45 - a;
coord3 = 209.45 + a;
coord2 = 275 + b;
coord1 = 276 - b;
bigmap.startDrag(false, coord2, coord4, coord1, coord3);
}
_root.onMouseUp = function()
{

_root.stopDrag();

}

Не подскажете как привязать теперь отдельные районы на карте, чтоб при наведении на них курсора мыши они подсвечивались. При статичной карте все понятно, но при динамичной.... У меня идея такая: Сделать клип в изначальном масштабе карты, привязать к координатам на карте, потом двигать и масштабировать вместе с картой. Может кто знает как это сделать по проще или по другому? Потому что усли будет не один объект, а несколько, то мне кажетса будет тормозить