AS3 — Запись щелчка с помощью playHeadTime и использование времени

Я новичок в AS3, поэтому любая помощь будет оценена.

По сути, я пытаюсь сделать что-то похожее на тест «Восприятие опасности», когда вы нажимаете, и он записывает, нажали вы в нужное время или нет.

Что у меня есть до сих пор это:

import flash.events.Event;

videoOverlay.addEventListener(MouseEvent.CLICK,doClick)
function doClick(e:Event):void
{
    trace(myVideo.playheadTime)
}

Мне удалось создать интерактивную область, а затем отобразить время кликов, теперь мне нужно определить, был ли клик в определенный период времени, затем добавить 1 балл, а затем в конце видеоклипа я хотите отобразить счет.

Мне не нужен только код, если бы кто-нибудь мог предложить способ сделать это, он был бы признателен.


person jjhilly    schedule 12.03.2013    source источник


Ответы (2)


Вы можете хранить «правильные моменты» в массиве, xml, что угодно. Скажем что-то вроде этого:

var moments:Array = [{start: "1:01", end: "1:16"}, {start: "1:25", end: "1:26"}, {start: "1:39", end: "1:51"}];
//time is in minutes, so you need to convert it to seconds
function doClick(e:Event):void
{
    for (var i:int = 0; i < moments.lenght; i++)
    {
        var moment:Object = moments[i];
        if (myVideo.playheadTime => toSeconds(moment.start) && myVideo.playheadTime <= toSeconds(moment.end))
        {
            trace("that's the right moment");
            break; //we do not need to check further
        }
    }
}
person strah    schedule 12.03.2013
comment
было бы идеально, если бы не было преобразования строки в число. другими словами, начало, конец должны хранить числовые значения секунд. - person Lukasz 'Severiaan' Grela; 12.03.2013
comment
@Lukasz'Severiaan'Grela Это «дизайнерское» решение: вам нужно значение, удобное для компьютера (число в секундах) или удобное для человека (в формате, например «1:05»). - person strah; 12.03.2013
comment
человекочитаемый может быть только, например. в xml и один раз преобразуется в число, или его можно преобразовать, когда пользователю нужно его просмотреть, но не при сравнении в цикле. - person Lukasz 'Severiaan' Grela; 12.03.2013
comment
Согласен, но человек должен вводить эти значения вручную, будь то массив, XML или любой другой набор данных, который он хочет. Как только данные появятся, их можно будет преобразовать в «удобный для компьютера» формат. Преобразование можно сделать в самом начале или в тот момент, когда нужны цифры. Код выше приведен только для иллюстрации, это не окончательная оптимизированная версия. Так проще было показать идею. Поздравляю :-) - person strah; 12.03.2013

Лучший способ, который я могу придумать, это таймер. Настройте класс таймера и на дисплее события щелчка, а не щелчка, он находится в пределах определенного диапазона времени - если да, то успех, если нет, то сбой.

Попробуйте что-то вроде этого:

counter:Number = 0;
videoOverlay.addEventListener(MouseEvent.CLICK,doClick)
public function doClick(e:Event):void
{
if (counter < 10)
trace("Success, your quick!");
else
  {
   trace("Failure!");
  }
}
addEventListener(Event.ENTER_FRAME, timed_event);

public function timed_event(event:Event) : void
{
counter++;
}

Конечно, скорость зависит и от частоты кадров приложения.

person Ronnie Goodrich    schedule 12.03.2013