这是我的情况:我正在开发一款基于AS3的游戏,我希望有一个“报告问题!”游戏中的功能,以便用户可以向我提交反馈。
当我的用户报告问题时,我想尽可能多地获取有关游戏状态的信息;基本上是什么对象在内存中,所有这些对象中的所有变量的值是什么;当我在调试器中遇到断点时,我可以得到的信息基本相同。
有一种简单的方法吗?我担心我会花几天的时间尝试写一堆函数来获取所有这些信息给我,但之后有人告诉我,“哦,你为什么不调用ASUtils.getSnapshot()” ?
答案 0 :(得分:7)
在AS3中没有通用的方法来转储变量的状态,但我们做了几件你可能会觉得有用的事情:
com/adobe/images
陷阱断言和未处理的异常,并通过点击活动和呼叫历史记录跟踪将其记录到您的服务器。未处理的异常侦听器是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
枚举类和对象属性,但这仅适用于公共成员。谷歌周围,你会发现一些人们已经编写的函数,使用这个枚举技巧递归转储对象和数组数据。
答案 1 :(得分:1)
我想将其添加为评论,但不想丢失代码格式
这就是我用来追踪复杂对象的东西:
private function parseObject(o:Object, prefix:String = '>'):String {
var retStr:String = '';
for (var s:String in o) {
retStr += prefix + s + ' = ' + o[s] + '\n';
if (typeof(o[s]) == 'object') {
retStr += parseObject(o[s], prefix + '>');
}
}
return retStr;
}
希望它有所帮助