public void OnPause() { lock (m_StateChanged) { if (IsFinishing) { m_State = GLGameState.Finished; } else { m_State = GLGameState.Paused; } while (true) { try { Monitor.Wait(m_StateChanged); break; } catch (ThreadInterruptedException e) { Debug.WriteLine("ERROR : " + e); } } } }
public void OnDrawFrame(IGL10 gl) { GLGameState state; lock (_stateChanged) { state = this._state; } if (state == GLGameState.Running) { float deltaTime = (Java.Lang.JavaSystem.NanoTime() - _startTime) / 1000000f; _startTime = Java.Lang.JavaSystem.NanoTime(); _screen.Update(deltaTime); _screen.Present(deltaTime); } if (state == GLGameState.Paused) { _screen.Pause(); lock (_stateChanged) { _state = GLGameState.Idle; //модификация } } if (state == GLGameState.Finished) { _screen.Pause(); _screen.Dispose(); lock (_stateChanged) { _state = GLGameState.Idle; } } }
public void OnSurfaceCreated(IGL10 gl, Javax.Microedition.Khronos.Egl.EGLConfig config) { _glGraphics.GL10 = gl; lock (_stateChanged) { if (_state == GLGameState.Initialized) { _screen = GetStartScreen(); } _state = GLGameState.Running; _screen.Resume(); _startTime = Java.Lang.JavaSystem.NanoTime(); } }
public void OnDrawFrame() { GLGameState state = GLGameState.None; lock (m_StateChanged) { state = this.m_State; } if (state == GLGameState.Running) { m_Stopwatch.Stop(); // 前回計測時間からの経過時間の取得 float deltaTime = m_Stopwatch.ElapsedTicks / 10000000.0f; m_Stopwatch.Reset(); m_Stopwatch.Start(); m_Screen.Update(deltaTime); m_Screen.Present(deltaTime); } if (m_State == GLGameState.Paused) { m_Screen.Pause(); lock (m_StateChanged) { this.m_State = GLGameState.Idel; NotifyAll(); } } if (m_State == GLGameState.Finished) { m_Screen.Pause(); m_Screen.Dispose(); lock (m_StateChanged) { this.m_State = GLGameState.Idel; NotifyAll(); } } }
public void OnSurfaceCreated(GLKView glkView) { m_GLGraphics = new GLGraphics(glkView); Debug.WriteLine(string.Format("Width:{0} / Height:{1}", m_GLGraphics.GetWidth(), m_GLGraphics.GetHeight())); m_Input = new IOSInput(); lock (m_StateChanged) { if (m_State == GLGameState.Initialized) { m_Screen = GetStartScreen(); } m_State = GLGameState.Running; m_Screen.Resume(); } }
protected override void OnPause() { base.OnPause(); lock (_stateChanged) { if (this.IsFinishing) { _state = GLGameState.Finished; } else { _state = GLGameState.Paused; } //модификация кода } _wakeLock.Release(); _glView.OnPause(); //модификация кода }