2013-08-14 2 views
0

Я пытаюсь отслеживать действия пользователя в моем проекте Flash и хранить его в виде файла SWF или видео. Help Я пишу этот код, который захватывает растровые изображения и показывает их, когда нажмите мувиклипЗапишите действие пользователя и сохраните его как файл swf с помощью flash cs6 + as3

stage.addEventListener(Event.ENTER_FRAME,capture) 
    var ar=new Array() 
    function capture(e:Event) 
    { 
     trace("done") 
    var bd:BitmapData = new BitmapData(stage.stageWidth,stage.stageHeight); 
    bd.draw(stage); 
    var screenshot:Bitmap = new Bitmap(bd); 
    ar.push(screenshot) 
    } 
    vv.addEventListener(MouseEvent.CLICK,gg) 
    var xx=0 
    var intr 
    var interval 
    function gg(e:MouseEvent) 
    {  
    interval = setInterval(reg_st, 24); 


    } 
    function reg_st() 
    { 
     stage.removeEventListener(Event.ENTER_FRAME,capture) 

     stage.addChild(ar[xx]) 
     if(xx<ar.length-1) 
     { 
     xx++ 
     } 
     else 
     { 
      xx=0 
     } 
    } 

Thank в

ответ

1

Tracking проста, добавить слушателей Штанге для отслеживания ввода с клавиатуры и мыши, вы будете заинтересованы в следующих:

stage.addEventListener(KeyboardEvent.KEY_DOWN, onUserKeyDown); 
stage.addEventListener(KeyboardEvent.KEY_UP, onUserKeyUP); 
stage.addEventListener(MouseEvent.MOUSE_MOVE, onUserMouseMove); 
stage.addEventListener(KeyboardEvent.MOUSE_DOWN, onUserMouseUp); 
stage.addEventListener(KeyboardEvent.MOUSE_UP, onUserMouseDown); 

Обработчики просто помещают события в массив с меткой времени при входе.

Более сложная часть - воспроизведение. Или на самом деле - взаимодействие. Вам в основном нужно смоделировать всю программу. Это может быть безумно сложно или довольно легко, в зависимости от структуры и логики вашего приложения. Я не буду в состоянии предоставить Вам с кодом для такой проблемы, но я могу разделить логику шаг за шагом, который может помочь вам сделать ваше собственное решение:

  1. Добавить слушателей всех ожидаемых взаимодействий пользователей не корневой уровень программы
  2. Сделайте несколько коллекционеров, которые будут хранить все события с отметками времени и, возможно, указателем на объект.
  3. Получить данные (отправить эти данные пользователю, покидающему программу, или ввести программу из предыдущего сеанса)
  4. Вызвать методы (обработчики) из массива взаимодействия пользователя с временным смещением, предоставленным информацией о метке времени. ПРИМЕЧАНИЕ. Вам нужно будет заблокировать инкапсуляцию и сделать все эти методы общедоступными.
  5. Наслаждайтесь своим «видео».
+0

Почему непосредственно держите указатели на объект? Они недействительны после завершения приложения. Вы должны получить метаданные на объекте, который получает вход пользователя, скажем, если это «selectDialog.btnToggleParameter» в источнике (!), Вам нужно будет получить фактическую ссылку, начиная со стадии. Это будет выглядеть в форме 'stage.getChildAt (0) [" selectDialog "] [" btnToggleParameter "]', и вы можете получить эти значения только в том случае, если они являются общедоступными. НО, возможен другой способ - 'stage.getChildAt (0) .getChildAt (7) .getChildAt (11)', где числа выводятся путем запроса DisplayList, начиная с 'event.target'. – Vesper

+0

Далее вы можете попытаться захватить события, когда они начнут пузыриться (какое-то событие не пузырится, поэтому вам действительно нужно приложить слушателей к ним по своим целям, другие - в конечном итоге), а затем вы ** отправляете ** правильные события обеспечивая полный набор параметров для правильного события, используя 'stage.dispatchEvent (...)', буквально имитирующий пользовательский ввод. При таком подходе не требуется перерыв в инкапсуляции. – Vesper

+0

Предполагаю, что ваш метод будет работать отлично, если разработчик использует модель Event. Но если пользователь использует сигналы, обратные вызовы и т. Д., Я считаю, что единственное, что нам осталось, - это добавить слушателей к источникам входных данных и входам отслеживания. Как я уже говорил, нетрудно воспроизвести действия пользователей, так же как взаимодействие с графическим интерфейсом, имеющим только эти данные. Ну, мой ответ более теоретический и может не соответствовать реальной реализации запланированного дизайна приложения. Поэтому я не утверждаю, что мой ответ - единственный лучший, рабочий или возможный. –

Смежные вопросы