public void Key離された受信(Key Code) { var key = DeviceConstantConverter.TKKtoKey(Code); if (SlimDXKey.Unknown == key) { return; // 未対応キーは無視。 } if (this.bKeyStateForBuff[(int)key] == true) { STInputEvent item = new STInputEvent() { nKey = (int)key, b押された = false, b離された = true, nTimeStamp = CSoundManager.rc演奏用タイマ.nシステム時刻ms, }; this.listEventBuffer.Add(item); this.bKeyStateForBuff[(int)key] = false; } }
public void tポーリング(bool bWindowがアクティブ中, bool bバッファ入力有効) { for (int i = 0; i < 256; i++) { this.bKeyPushDown[i] = false; this.bKeyPullUp[i] = false; } if (bWindowがアクティブ中) { if (bバッファ入力有効) { this.list入力イベント.Clear(); for (int i = 0; i < this.listEventBuffer.Count; i++) { if (this.listEventBuffer[i].b押された) { this.bKeyState[this.listEventBuffer[i].nKey] = true; this.bKeyPushDown[this.listEventBuffer[i].nKey] = true; } else if (this.listEventBuffer[i].b離された) { this.bKeyState[this.listEventBuffer[i].nKey] = false; this.bKeyPullUp[this.listEventBuffer[i].nKey] = true; } this.list入力イベント.Add(this.listEventBuffer[i]); } this.listEventBuffer.Clear(); } else { this.list入力イベント.Clear(); // #xxxxx 2012.6.11 yyagi; To optimize, I removed new(); //----------------------------- KeyboardState currentState = Keyboard.GetState(); if (currentState.IsConnected) { for (int index = 0; index < Enum.GetNames(typeof(Key)).Length; index++) { if (currentState[(Key)index]) { // #xxxxx: 2017.5.7: from: TKK (OpenTK.Input.Key) を SlimDX.DirectInput.Key に変換。 var key = DeviceConstantConverter.TKKtoKey((Key)index); if (SlimDXKey.Unknown == key) { continue; // 未対応キーは無視。 } if (this.bKeyState[(int)key] == false) { if (key != SlimDXKey.Return || (bKeyState[(int)SlimDXKey.LeftAlt] == false && bKeyState[(int)SlimDXKey.RightAlt] == false)) // #23708 2016.3.19 yyagi { var ev = new STInputEvent() { nKey = (int)key, b押された = true, b離された = false, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻ms, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 }; this.list入力イベント.Add(ev); this.bKeyState[(int)key] = true; this.bKeyPushDown[(int)key] = true; } } } { // #xxxxx: 2017.5.7: from: TKK (OpenTK.Input.Key) を SlimDX.DirectInput.Key に変換。 var key = DeviceConstantConverter.TKKtoKey((Key)index); if (SlimDXKey.Unknown == key) { continue; // 未対応キーは無視。 } if (this.bKeyState[(int)key] == true && !currentState.IsKeyDown((Key)index)) // 前回は押されているのに今回は押されていない → 離された { var ev = new STInputEvent() { nKey = (int)key, b押された = false, b離された = true, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻ms, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 }; this.list入力イベント.Add(ev); this.bKeyState[(int)key] = false; this.bKeyPullUp[(int)key] = true; } } } } } //----------------------------- } }
public void tポーリング(bool bWindowがアクティブ中) { for (int i = 0; i < 256; i++) { this.bKeyPushDown[i] = false; this.bKeyPullUp[i] = false; } if (bWindowがアクティブ中) { //this.list入力イベント = new List<STInputEvent>( 32 ); this.list入力イベント.Clear(); // #xxxxx 2012.6.11 yyagi; To optimize, I removed new(); //string d = DateTime.Now.ToString( "yyyy/MM/dd HH:mm:ss.ffff" ); #region [ 入力 ] //----------------------------- OpenTK.Input.KeyboardState currentState = OpenTK.Input.Keyboard.GetState(); if (currentState.IsConnected) { for (int index = 0; index < Enum.GetNames(typeof(OpenTK.Input.Key)).Length; index++) { if (currentState[(OpenTK.Input.Key)index]) { var key = DeviceConstantConverter.TKKtoKey((OpenTK.Input.Key)index); if (SlimDXKey.Unknown == key) { continue; // 未対応キーは無視。 } if (this.bKeyState[(int)key] == false) { if (key != SlimDXKey.Return || (bKeyState[(int)SlimDXKey.LeftAlt] == false && bKeyState[(int)SlimDXKey.RightAlt] == false)) // #23708 2016.3.19 yyagi { var ev = new STInputEvent() { nKey = (int)key, b押された = true, b離された = false, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量, }; this.list入力イベント.Add(ev); this.bKeyState[(int)key] = true; this.bKeyPushDown[(int)key] = true; } //if ( (int) key == (int) SlimDXKey.Space ) //{ // Trace.TraceInformation( "FDK(direct): SPACE key registered. " + ct.nシステム時刻 ); //} } } { // #xxxxx: 2017.5.7: from: DIK (SharpDX.DirectInput.Key) を SlimDX.DirectInput.Key に変換。 var key = DeviceConstantConverter.TKKtoKey((OpenTK.Input.Key)index); if (SlimDXKey.Unknown == key) { continue; // 未対応キーは無視。 } if (this.bKeyState[(int)key] == true && !currentState.IsKeyDown((OpenTK.Input.Key)index)) // 前回は押されているのに今回は押されていない → 離された { var ev = new STInputEvent() { nKey = (int)key, b押された = false, b離された = true, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量, }; this.list入力イベント.Add(ev); this.bKeyState[(int)key] = false; this.bKeyPullUp[(int)key] = true; } } } } //----------------------------- #endregion } }