我是Corona和Lua的新手,所以请耐心等待 . 所以我有一个主屏幕,我从我的主文件中去,它工作正常 . 然后我想从一个不同的场景回到那个场景,没有任何反应(但“胜利”是我的consol窗口) .
胜利功能:
function win()
print("win!");
storyboard.gotoScene( "MSCREEN.mscreen" );
end
功能我在哪里调用它:
function scene:enterFrame(inEvent)
--some other stuff
if (ball.x>display.contentWidth and failFlag==false) then
win();
end
end
和我的主要观点:
local scene = storyboard.newScene();
local bg;
local text;
function scene:createScene(inEvent)
bg = display.newImage( "MSCREEN/bg.png");
bg.x = display.contentWidth / 2;
bg.y = display.contentHeight / 2;
text=display.newText( "Touch!", 0,0, fontName, 70);
text.x =display.contentWidth / 2 ;
text.y =display.contentHeight / 2 +230;
self.view:insert(bg);
self.view:insert(text);
end
function scene:enterFrame(inEvent)
tekstBujany(text);
end
function scene:touch(inEvent)
if inEvent.phase == "ended" then
storyboard.gotoScene( "JUMP.GJump" );
end
end
function scene:destroyScene(inEvent)
bg:removeSelf();
bg=nil;
text:removeSelf();
text=nil;
end -- End destroyScene().
scene:addEventListener("createScene", scene);
scene:addEventListener("destroyScene", scene);
Runtime:addEventListener("enterFrame", scene);
Runtime:addEventListener("touch",scene);
return scene;
SOLVED 所以加入
storyboard.purgeOnSceneChange = true;
做了伎俩,不知道为什么 .
2 回答
“enterFrame”事件在Runtime对象的每一帧生成,因此大约30到60次/秒 . 因此,如果可能的话,将在每一帧调用win() . 由于win()导致转换到新场景,如果storyboard.purgeOnSceneChange = false,则会为每个场景调用enterFrame,从而导致win()调用的常量流和到同一场景“MSCREEN.mscreen”的常量转换流(这不可能是好的) . OTOH如果你设置storyboard.purgeOnSceneChange = true那么前一个场景,这里是一个调用win()的enterFrame,被清除,所以win()只会被调用一次 .
总之,设置storyboard.purgeOnSceneChange = true可能有效,但我认为你的逻辑存在问题:不应该在每一帧调用场景转换!如果您正在监视某些条件以声明获胜,则应该在win()中删除enterFrame回调,或者在win()调用一次后确保条件为false:
使用guard变量,它看起来像这样:
小心win()函数,它看起来好像被调用了很多次 . 设置另一个变量并在方法中更改它 .