我有下面的代码。使用allShaders.forEach
的清洁版不起作用,所以这是暂时的;这是另外一个问题。
static loadAndCompileAll(Function onLoad, Function onFail) {
Function functionQueue = () { onLoad(); };
for (int i=0; i < allShaders.length; ++i){
Shader s = allShaders[i];
Function previous = functionQueue;
functionQueue = () { s.loadAndCompile(() => previous(), onFail); };
}
functionQueue();
}
我有一个问题,其中的着色器似乎没有加载或编译。调试表明,for循环中的最后一行(第7行)没有被执行。我可以逐步执行这个循环,在经过第6行之后,它会返回到第4行,我不知道为什么。
目前这种方法是这样使用的:
Shader.loadAndCompileAll(
() { print("Loaded shaders"); },
() { print("Failed to load shaders"); }
);
我确实注意到,查看调试器中的局部变量,onLoad
和onFail
似乎显示为空,即在调试器窗口中,它显示名称onLoad
和值()
。也许这跟这事有关?虽然我无法想象这会导致它跳过一行,除非这是一个bug。我对语言和编辑很陌生,所以我不知道这是否是匿名函数的结果。
发布于 2014-08-31 04:02:43
调试器似乎跳过了行,但是当调用functionQueue()
时,调用loadAndCompile()
而不是onLoad()
。这表示执行了赋值语句。调试器(我用WebStorm尝试过)似乎存在一个问题,即函数分配不被认为是一个停止点。调试器也没有在static loadAndCompileAll
的第一行上停止。
当您的代码格式稍有不同时,您至少可以设置调试器在实际调用该函数时停止的断点。
static loadAndCompileAll(Function onLoad, Function onFail) {
Function functionQueue = () {
onLoad(); // set breakpoint here
};
for (int i=0; i < allShaders.length; ++i){
Shader s = allShaders[i];
Function previous = functionQueue;
functionQueue = () {
s.loadAndCompile(() => previous(), onFail); // set breakpoint here
};
}
functionQueue();
}
您能为这个调试器问题在http://dartbug.com/new上创建一个bug报告吗?
https://stackoverflow.com/questions/25589130
复制