public void Start() { // 模拟器下启动时键盘模拟重力 if (LSystem.IsEmulator()) { _state._isConnected = true; LSystem.CallScreenRunnable(new SensorThread(this, accelerometerValues)); return; } #if !WINDOWS&&!XBOX if (!_state._isConnected && manager == null) { if (Microsoft.Devices.Sensors.Accelerometer.IsSupported) { if (this.manager == null) { this.manager = new Microsoft.Devices.Sensors.Accelerometer(); this.manager.TimeBetweenUpdates = (TimeSpan.FromMilliseconds(_sleep)); this.manager.CurrentValueChanged += (new EventHandler<Microsoft.Devices.Sensors.SensorReadingEventArgs<Microsoft.Devices.Sensors.AccelerometerReading>>(this.accelerometer_CurrentValueChanged)); } _state._isConnected = true; } else { _state._isConnected = false; } if (_state._isConnected) { if (this.manager != null) { try { this.manager.Start(); } catch (InvalidOperationException ex) { Loon.Utils.Debugging.Log.Exception(ex); } return; } } #endif // 如果无法正常启动,则开启伪重力感应 if (!_state._isConnected) { _state._isConnected = true; LSystem.CallScreenRunnable(new SensorThread(this, accelerometerValues)); } } }
private void SetScreen(Screen screen, bool put) { if (currentControl != null && currentControl.IsOnLoadComplete()) { return; } lock (this) { if (screen == null) { this.isInstance = false; throw new RuntimeException( "Cannot create a [Screen] instance !"); } GLLoader.Destory(); if (!LSystem.isLogo) { if (currentControl != null) { SetTransition(screen.OnTransition()); } else { LTransition transition = screen.OnTransition(); if (transition == null) { switch (MathUtils.Random(0, 3)) { case 0: transition = LTransition.NewFadeIn(); break; case 1: transition = LTransition.NewArc(); break; case 2: transition = LTransition .NewSplitRandom(LColor.black); break; case 3: transition = LTransition .NewCrossRandom(LColor.black); break; } } SetTransition(transition); } } screen.SetOnLoadState(false); if (currentControl == null) { currentControl = screen; } else { lock (currentControl) { currentControl.Destroy(); currentControl = screen; } } this.isInstance = true; if (screen is EmulatorListener) { SetEmulatorListener((EmulatorListener)screen); } else { SetEmulatorListener(null); } screen.OnCreate(LSystem.screenRect.width, LSystem.screenRect.height); LSystem.CallScreenRunnable(new _LoadingScreen(this, screen)); if (put) { screens.AddLast(screen); } loading_Control = null; } }