PDA

Просмотр полной версии : Не получается Перетащить с DragStart()


mAK08
02.06.2013, 12:00
Здравствуйте! Такой вопрос не получается перетащить объект. Как будто его что то держит. Я думаю может это из за Event.ENTER_FRAME, просто когда делаю трассировку он показывает что на последнем кадре останавливается но все еще пишет что он на последнем кадре, как бы мувик остановился но функция еще работает. Как быть? Исходник прилагаю. И на всякий случай код.
import flash.events.Event;
var drag_start:Boolean = false;
var percent:Number = seek1.seekk.width;


if (drag_start == false){

seek1.scrub.addEventListener(Event.ENTER_FRAME,SC);
function SC(e:Event):void {
trace(this.currentFrame)
seek1.scrub.x = seek1.seekk.x + (this.currentFrame/this.totalFrames)*percent;
}
}


seek1.scrub.addEventListener(MouseEvent.MOUSE_DOWN,onPressS);

function onPressS(e:Event):void {

drag_start = true;
seek1.scrub.startDrag(false,new Rectangle(0,0,500,0));
}

seek1.scrub.addEventListener(MouseEvent.MOUSE_UP,onReleaseS);

function onReleaseS(e:Event):void {
drag_start = true;
seek1.scrub.stopDrag();
}


И еще вопросик: Как в AS3 можно заменить ?
OnRelease = OnReleaseOutside

Wolsh
02.06.2013, 12:11
Вы же подписались на ентерфрейм в самом начале, который программно устанавливает позицию скраба (что это? баночка с кремом?). Так что, вы тащите скраб, а программа его возвращает каждый кадр обратно)))
2. seek1.scrub.addEventListener(MouseEvent.MOUSE_UP, onReleaseS);
seek1.scrub.addEventListener(MouseEvent.RELEASE_OUTSIDE, onReleaseS);
3. "function SC" — в AS3 функции не принято называть с заглавной буквы, только Классы. Кроме того, из названий методов должно быть максимально понятно, что они делают. Не надо ничего шифровать.
4. В слушателе отпускания мыши у Вас drag_start = true; А не false ли?

mAK08
02.06.2013, 13:33
Спасибо!) После того как вы обьяснили большая проблема оказывается пустяк!
3.Хорошо, учту в своем коде.
4.С этим тоже перепутал)

Еще один вопрос, если можно))
import flash.events.KeyboardEvent;

var i:int = 0;
stage.addEventListener(KeyboardEvent.KEY_DOWN, down);
stage.addEventListener(KeyboardEvent.KEY_UP, up);

function up(e:KeyboardEvent):void {
stage.addEventListener(KeyboardEvent.KEY_DOWN, down);
}

function down(e:KeyboardEvent):void {
stage.removeEventListener(KeyboardEvent.KEY_DOWN, down);
i++;
trace(i);
}

Для чего тут применяется stage? И что это?
В Хэлпе от ADobe написано: Класс Stage представляет основную область рисования.
Тоесть это замена _root?

Добавлено через 8 минут
RELEASE_OUTSIDE не работает вот такую ошибку выдает.
Монтажный кадр 1, слой "Слой 2", кадр 1, строка 9 1119: Обращение возможного неопределенного свойства RELEASE_OUTSIDE через ссылку со статическим типом Class .

Wolsh
02.06.2013, 16:07
Stage представляет окно плеера и является контейнером для root (экземпляра Класса Документа). То есть это самый главный, самый большой контейнер, в котором содержатся абсолютно все визуальные объекты. кроме того он содержит специфические настройки для всего содержимого вцелом, такие как масштабирование всего ролика и его размещение в окне.
Принято подписываться на события клавиатуры именно от стейдж потому, что он всегда в фокусе, и принимает эти события постоянно, в отличие от всех других объектов, которые могут в процессе воспроизведения много раз терять и снова получать фокус, а значит иногда могут становиться "глухими" к нажатию клавиш.
RELEASE_OUTSIDE доступен, начиная с плеера 11.3
Сейчас на дворе 11.7 и бета 11.8
Укажите в настройках публикации версию плеера 11.3 или выше.