PDA

Просмотр полной версии : Эта неуловимая "мышь" - отлов координат курсора над MovieClip


Шурик_2
11.06.2012, 20:15
Задача следующая: на поверхности MovieClip отлавливать координаты движущегося нажатого курсора мыши. Нужна координаты места нажатия (получаются без проблем), а затем все последующие координаты точек через которые проходит нажатый курсор.
код размещен в первом кадре MovieClip'а "_ov"
import flash.events.Event;
import flash.events.MouseEvent;

var cx:Number;
var cy:Number;
var nx:Number;
var ny:Number;
var down:Boolean;

function refr(e:Event):void
{
//координаты точек, через которые проходит нажатый курсор
cx = mouseX;
cy = mouseY;
trace("x:",cx,"y:",cy);

}

this.addEventListener(MouseEvent.MOUSE_DOWN, reg);
function reg(r:MouseEvent):void
{
//координаты точки в которой был нажат курсор
nx = mouseX;
ny = mouseY;
trace("сохранены начальные координаты х:",nx,"y:",ny);

if (r.buttonDown == true)
{
this.addEventListener(MouseEvent.MOUSE_MOVE, refr);

}
else
{
this.removeEventListener(MouseEvent.MOUSE_MOVE, refr);
}
}
Проблема в том, что не могу заставить код не отслеживать координаты курсора после отпускания клавиши мыши.:wacko:

FlashRus
11.06.2012, 20:17
import flash.events.Event;
import flash.events.MouseEvent;

var cx:Number;
var cy:Number;
var nx:Number;
var ny:Number;
var down:Boolean;

function refr(e:Event):void
{
//координаты точек, через которые проходит нажатый курсор
cx = mouseX;
cy = mouseY;
trace("x:",cx,"y:",cy);

}

this.addEventListener(MouseEvent.MOUSE_DOWN, reg);
function reg(r:MouseEvent):void
{
//координаты точки в которой был нажат курсор
nx = mouseX;
ny = mouseY;
trace("сохранены начальные координаты х:",nx,"y:",ny);


this.addEventListener(MouseEvent.MOUSE_MOVE, refr);
this.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);

}

function onMouseUp(e:MouseEvent):void {
this.removeEventListener(MouseEvent.MOUSE_MOVE, refr);
this.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}




код размещен в первом кадре MovieClip'а "_ov"

Следует писать в классах.

Шурик_2
11.06.2012, 20:19
Спасибо вам! Действительно решение простое!

Добавлено через 12 минут
А какой смысл написание кода в классе Main?
Почему нельзя по-старинке?

FlashRus
11.06.2012, 21:02
http://www.flasher.ru/forum/showthread.php?t=163989

Суть не в классе Main а в парадигме ООП.
Код в классах значительно проще отлаживать, он более читабелен для вас и для других программистов.

Шурик_2
11.06.2012, 21:05
Я так понял, что это вопрос удобства...

FlashRus
11.06.2012, 21:13
Не только.
Когда вы пишете код в кадрах, то вызывается метод addFrameScript()
Погуглите...


Да и в целом... большой проект в кадрах превратиться помойку кода, который в лучшем случае сможет понять его разработчик.
Писанина в кадрах сказывается на производительности, отрубает и(или) усложнят реализацию более сложных структур.

Wolsh
12.06.2012, 00:03
Писанина в кадрах — пережиток времен, когда по сути не было языка программирования, а были только команды управления анимацией и примитивная интерактивность. С 2004 года, то есть уже 8 лет, как код ActionScript пишется в классах и является полноценным программным кодом.
Разбираться в проекте, где куски кода распиханы по внутренностям символов в библиотеке, когда совершенно невозможно понять, в какой момент и при каких условиях эти фрагменты вступят в действие — сущий ад для разработчика. Не говоря уже о собственно концепциях проектирования и командной разработки, и тем более — поддержки и развития проекта.

Шурик_2
12.06.2012, 11:56
Значит буду практиковаться в написании кода в классах. У меня просто специфика - баннерная реклама.