这是我的情况:我正在开发一款基于AS3的游戏,并且希望收到“报告问题!”游戏中的功能,以便用户可以向我提交反馈。

当我的用户报告问题时,我希望获得尽可能多的有关他们的游戏状态的信息。基本上是什么对象在内存中,所有这些对象中所有这些变量的值是什么?当我在调试器中遇到断点时,可以获得的信息基本上相同。

有没有简单的方法可以做到这一点?恐怕我会花几天时间尝试编写一堆函数来为我获取所有这些信息,然后才有人告诉我:“哦,为什么不直接调用ASUtils.getSnapshot()” ?

最佳答案

AS3中没有通用的方法可以转储变量的状态,但是我们可以做一些有用的事情:

  • 捕获最近点击事件的日志。使用舞台事件监听器记录点击次数,并将对象“路径”沿父链向上追溯到舞台。对象路径就是所有DisplayObject名称,例如:screenMain.dialogBu​​yItem.buttonBuy
  • 捕获屏幕截图,将其缩小为较小的缩略图,对其进行JPEG编码,然后将其与反馈一起上传到您的服务器。当出现异常时,我们也会执行此操作(请参阅#4)。 as3corelibcom/adobe/images中具有JPEG编码功能
  • 在发布它之前,可以在AS3代码上运行一个命令行Pearl或PHP脚本,该脚本将在每个函数调用的顶部插入调用跟踪。这样可以记录通话记录。尽管它不如完整的堆栈好,但它可以为您提供一些有关您的代码最近在做什么的指示。
  • Trap断言和未处理的异常,并将它们与单击事件和调用历史记录一起记录到您的服务器中。未处理的异常监听器是Flash 10.1中的新增功能,但大多数用户都具有此功能。您可以检查该支持并添加一个监听器,如下所示:
    // Check for the presence of the Flash 10.1 global Error event (exception) handler class.
    // If it exists, we'll listen for it and it will allow us to report errors to our server.
    if ( loaderInfo.hasOwnProperty( 'uncaughtErrorEvents' ) )
        loaderInfo.uncaughtErrorEvents.addEventListener( "uncaughtError", onUncaughtError ); // UncaughtErrorEvent.UNCAUGHT_ERROR
    
  • 如果您要使用反馈记录全局状态变量,则可以编写一个函数以将其转储为字符串以与用户反馈一起上载。虽然您可以使用for each枚举类和对象的属性,但这仅适用于公共(public)成员。到处都是Google,您会发现人们编写了一些函数来使用此枚举技巧递归地转储对象和数组数据。
  • 关于actionscript-3 - ActionScript是否具有 "core dump"的等效项?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7135162/

    10-10 23:23