Actionscript 3 记录用户操作并使用flash cs6+将其保存为swf文件;as3
我正在尝试跟踪我的flash项目上的用户操作,并将其存储为swf文件或视频。请提供帮助 我编写了这段代码来捕获位图并在单击时显示它们 电影唇Actionscript 3 记录用户操作并使用flash cs6+将其保存为swf文件;as3,actionscript-3,flash,flash-cs6,Actionscript 3,Flash,Flash Cs6,我正在尝试跟踪我的flash项目上的用户操作,并将其存储为swf文件或视频。请提供帮助 我编写了这段代码来捕获位图并在单击时显示它们 电影唇 stage.addEventListener(Event.ENTER_FRAME,capture) var ar=new Array() function capture(e:Event) { trace("done") var bd:BitmapData = new BitmapData(stage.sta
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
}
}
stage.addEventListener(事件。输入帧,捕获)
var ar=新数组()
功能捕获(e:事件)
{
跟踪(“完成”)
var bd:BitmapData=新的BitmapData(stage.stageWidth,stage.stageHeight);
bd.draw(阶段);
var屏幕截图:位图=新位图(bd);
ar.push(屏幕截图)
}
vv.addEventListener(MouseEvent.CLICK,gg)
变量xx=0
var intr
var区间
功能gg(e:MouseEvent)
{
间隔=设置间隔(寄存器,24);
}
函数reg_st()
{
stage.removeEventListener(事件。输入帧,捕获)
stage.addChild(ar[xx])
如果(xx跟踪很简单,请将侦听器添加到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);
当输入发生时,处理程序将简单地将事件放入带有时间戳的数组中
更难的部分是播放。或者实际上是交互。你基本上需要模拟整个程序。这可能非常困难,也可能非常简单,这取决于你的应用程序的结构和逻辑。我无法为你提供解决此类问题的代码,但我可以分享一个逐步的逻辑,可能有助于你制定自己的解决方案:
将侦听器添加到所有预期的用户交互,而不是程序的根级别
制作几个收集器,用于存储所有带有时间戳的事件,可能还有对象的指针
获取数据(在用户退出程序或从上一个会话进入程序时发送此数据)
使用时间戳信息提供的时间偏移从用户交互数组调用方法(处理程序)。注意:您需要停止封装并将所有这些方法公开
享受你的“视频”
为什么要直接保留对象上的指针?一旦应用程序结束,这些指针将失效。您必须获取接收用户输入的对象上的元数据,比如说,如果它是源(!)中的“selectDialog.btnToggleParameter”,则必须从stage开始派生实际链接。它类似于表单stage.getChildAt(0)[“selectDialog”][“btnToggleParameter”]
,只有当这些值是公共的时,您才能获取它们。但是,也可以使用另一种方法-stage.getChildAt(0)。getChildAt(7)。getChildAt(11)
,其中数字可以通过查询从event.target开始的DisplayList来派生。接下来,您可以尝试捕获冒泡的事件(有些事件不会冒泡,因此您必须将侦听器附加到它们的目标上,其他事件最终到达阶段),然后使用stage.dispatchEvent(…)调度正确的事件,为正确的事件提供一整套参数
,从字面上模拟用户输入。使用这种方法,不需要封装中断。我认为只要开发人员使用事件模型,您的方法就可以完美地工作。但是如果用户使用信号、回调等。我相信我们只剩下向输入源添加侦听器和跟踪输入。正如我前面所说的呃,复制用户的行为并不难,就像与只有这些数据的GUI交互一样。嗯,我的答案更具理论性,可能不适合计划中的应用程序设计的实际实现。因此,我并不声称我的答案是唯一最好的,有效的或可能的。嗯,我们真的需要键盘吗来自用户的d和鼠标事件,以及来自应用程序的enterframe事件?所有这些都可以在阶段级捕获,我们需要跟踪键盘事件的聚焦组件,因此我们可以通过捕获的显示列表位置调用setFocus
(顺便说一句,如果应用程序是非确定性的,则使用Math.random()
要移动可交互对象,即使这样也会失败,因为我们无法截获Math.random()
调用)并谨慎地分派事件。我只是试图纠正你的一般方法,而不是批评它。你做得很漂亮。读它真的很有趣:)我一定会自己做这件事。很难想象所有的细节和所有的里程碑。你实际上预见到了比我想象的更多的这样一个应用程序的工作流程。