【问题标题】:Record user action and save it as swf file using flash cs6 + as3记录用户操作并使用 flash cs6 + as3 将其保存为 swf 文件
【发布时间】:2013-08-14 06:06:49
【问题描述】:

我正在尝试跟踪用户对我的 Flash 项目的操作并将其存储为 swf 文件或视频,请提供任何帮助 我编写了这段代码来捕获位图并在单击时显示它们 影片剪辑

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
        }
    }

谢谢

【问题讨论】:

    标签: actionscript-3 flash flash-cs6


    【解决方案1】:

    跟踪很简单,将监听器添加到 stange 以跟踪键盘输入和鼠标输入,您会对以下内容感兴趣:

    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. 欣赏您的“视频”。

    【讨论】:

    • 为什么直接持有对象上的指针?一旦应用程序结束,这些将失效。您必须在接收用户输入的对象上获取元数据,例如,如果它是 source(!) 中的“selectDialog.btnToggleParameter”,您将必须从阶段开始派生实际链接。它将以stage.getChildAt(0)["selectDialog"]["btnToggleParameter"] 的形式出现,并且只有当它们是公开的时您才能获得这些值。但是,另一种方法是可能的 - stage.getChildAt(0).getChildAt(7).getChildAt(11) 可以通过从 event.target 开始查询 DisplayList 来推导数字。
    • 接下来,您可以尝试在事件冒泡时捕获它们(有些事件不会冒泡,因此您确实必须在目标上为它们附加侦听器,其他最终到达阶段),然后您dispatch 正确事件为使用stage.dispatchEvent(...) 的正确事件提供整套参数,从字面上模拟用户输入。使用这种方法,不需要封装中断。
    • 我想只要开发人员使用 Event 模型,您的方法就可以完美运行。但是如果用户使用信号、回调等。我相信我们唯一剩下的就是向输入源添加侦听器并跟踪输入。正如我之前所说,重现用户操作并不难,就像与只有这些数据的 GUI 交互一样。好吧,我的回答更具理论性,可能不适合计划中的应用程序设计的实际实现。因此,我并不声称我的答案是唯一最好的、可行的或可能的答案。
    • 嗯,除了来自用户的键盘和鼠标事件以及来自应用程序的输入框事件之外,我们真的需要什么吗?所有这些都可以在舞台级别捕获,我们需要跟踪键盘事件的焦点组件,因此我们可以通过捕获的显示列表位置调用setFocus(顺便说一句,如果应用程序是非确定性的,也就是使用Math.random() 移动可交互对象,即使这样也会失败,因为我们无法拦截 Math.random() 调用)并酌情调度事件。我只是试图纠正你的一般方法,而不是批评它。
    • 你做得很好。读起来真的很有趣:)我一定会自己做这件事。很难想到所有细节和所有里程碑。在我尝试想象此类应用程序的工作流程时,您实际上预见到的远比我想象的要多。
    猜你喜欢
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 2012-11-03
    • 1970-01-01
    • 2014-01-31
    • 2012-12-18
    • 1970-01-01
    相关资源
    最近更新 更多