我的游戏中有一段代码看起来很像这样:
MultiplayerAPI.createGameRoom(function(){ successFunction(new Object()); });
基本上,执行createGameRoom,一旦成功,我运行的函数就会运行。
但是我最近遇到了一些奇怪的错误,我想知道,是“new Object();”的实例。每次运行回调函数时都一样吗?
每次都需要是一个不同的,新鲜的Object实例,但是我遇到了一些垃圾收集问题,这让我觉得每次触发事件回调都会传递相同的对象,
任何人都知道Flash如何处理这个问题?
答案 0 :(得分:1)
功能参考&功能调用
function myFunction(parameter:String):String
{
return 'hello '+parameter;
}
var myFunctionReference:Function = myFunction;
trace(myFunctionReference); // function Function() {}
trace(myFunctionReference('world')); // 'hello world'
var myFunctionReturnValue:String = myFunction('moon');
trace(myFunctionReturnValue); // 'hello moon'
工作示例
package
{
import flash.display.Sprite;
public class MethodTest extends Sprite
{
public function MethodTest()
{
trace('MethodTest Constructor');
trace('---');
invoke(successFunction,'first',{id:123,type:'foo'});
trace('---');
invokeByApply(successFunction,'second',{id:456,type:'bar'});
}
public function invoke(method:Function,someName:String, someObject:Object):void{
trace('MethodTest invoke');
method(someName,someObject);
}
public function invokeByApply(method:Function,...arguments):void{
trace('MethodTest invokeByApply');
method.apply(null,arguments);
}
public function successFunction(someName:String, someObject:Object):void{
trace('MethodTest successFunction');
trace('someName: '+someName);
for(var key:String in someObject)trace(key+': '+someObject[key]);
}
}
}
答案 1 :(得分:0)
在您给出的示例中编写AS3代码(在调用其他方法时定义新函数),就像在JavaScript中一样,您会发现调试非常困难。
我建议使用Hall / Wan查看“OOP with ActionScript”,并利用面向对象的编程设计原则,因为它可以让您的生活更长远:
http://www.amazon.com/Object-Oriented-Programming-ActionScript-Branden-Hall/dp/0735711836