public void transitScene(TScene scene) { if (transitionDelegate != null) { transitionDelegate(transitionStartTime + 100000); } nextScene = (TScene)scene.clone(); transitionStartTime = sw.ElapsedMilliseconds; transitionDelegate = delegate(long time) { const int duration = 400; //ms int elapsed = (int)(time - transitionStartTime); if (elapsed >= duration / 2 && nextScene != null) { changeScene(nextScene); nextScene = null; } if (elapsed >= duration) { elapsed = duration; transitionDelegate = null; } if (elapsed < duration / 2) { currentScene.alpha = 1 - elapsed / (duration / 2f); } else { currentScene.alpha = elapsed / (duration / 2f) - 1; } }; }
public void changeScene(TScene scene) { // stop/free all sounds and effects of current scene finishCurrentScene(); // assign new scene to current scene currentScene = (TScene)scene.clone(); currentScene.run_emulator = this; currentScene.run_matrix = matrixOfEmulator(); currentScene.run_extraActors = extraActorsOfEmulator(currentScene); // scene have owner bgm if (currentScene.backgroundMusic != "") { playBGM(currentScene.backgroundMusic, currentScene.backgroundMusicVolume); } // fire enter event currentScene.fireEvent(Program.DEFAULT_EVENT_ENTER, true); }