Lirim: 2008年7月アーカイブ
本日 2008年7月21日 13時より、
サーバの再起動しました。
13時7分に稼動開始しています。
同タイミングにてwebページ利用されていた方には
ご迷惑おかけしました。
================================
現象は、ディスプレイでの入力受付しなかったため。
1.ローカルキーボードから入力しても、画面上変わらない。
2.sshではつながるし、各コマンドも動作する。
3.各サーバ機能も動いていた様子
4.rebootとかshutdownコマンドしても受け付けていない
うーん。
サーバの再起動しました。
13時7分に稼動開始しています。
同タイミングにてwebページ利用されていた方には
ご迷惑おかけしました。
================================
現象は、ディスプレイでの入力受付しなかったため。
1.ローカルキーボードから入力しても、画面上変わらない。
2.sshではつながるし、各コマンドも動作する。
3.各サーバ機能も動いていた様子
4.rebootとかshutdownコマンドしても受け付けていない
うーん。
Xbox360のコントローラを手にいれた。
Xbox本体とワイヤレスレシーバをレジに持っていったけど、
なにやら非売品の箱もくれた。
家に帰って開けてみると、ワイヤードコントローラw
なんといっきに2つも手に入ったYO
ワイヤレスの方は、Xbox専用にしよう。
レシーバはしばらくお役待ち。
Xnaのバイブレーションのサンプルコードで動かしてみたら、
ものすごくキレイにぶるぶるなるぢゃないですか(・∀・)
ボタン入力部分は、DirectInputでも補足可能でした。
DirectInputのForceFeedBackには対応してなさそ。
しばらく、このパッドで遊ぼう。
ロジクールのワイヤレス、電池抜いてしばらく放置。
Xbox本体とワイヤレスレシーバをレジに持っていったけど、
なにやら非売品の箱もくれた。
家に帰って開けてみると、ワイヤードコントローラw
なんといっきに2つも手に入ったYO
ワイヤレスの方は、Xbox専用にしよう。
レシーバはしばらくお役待ち。
Xnaのバイブレーションのサンプルコードで動かしてみたら、
ものすごくキレイにぶるぶるなるぢゃないですか(・∀・)
ボタン入力部分は、DirectInputでも補足可能でした。
DirectInputのForceFeedBackには対応してなさそ。
しばらく、このパッドで遊ぼう。
ロジクールのワイヤレス、電池抜いてしばらく放置。
MSDNのDirectInput(unmanaged)参考に、
ForceFeedBackのコード書いてみたけど、
EffectObjectのコンストラクタで例外でちゃうよ。
ステップ1と2は、前回のコードに含まれてるゲームパッドデバイス取得とかのあたりなので省略。
例外でるのはいいんだけど、どこがおかしいのかもっと詳しく教えてほしいです(´・ω・`)
むしろ、MSDNのmanagedのサンプルコード載せてください。。
//===============================================
#region ステップ3
// 規定値取得
//ForceFeedbackGuid.Triangle;
// EffectGuid 列挙して取得
//foreach (EffectInformation effectInformation in game_diDevice.GetEffects(EffectType.Periodic))
//{
// Guid effectGuid = effectInformation.EffectGuid;
//}
#endregion
#region ステップ4
DirectInput.Periodic diPeriodic = new Periodic();
diPeriodic.Magnitude = (Int32)DI.NominalMax;
diPeriodic.Offset = 0;
diPeriodic.Phase = 0;
diPeriodic.Period = (Int32)(0.05 * (Int32)DI.Seconds);
DirectInput.Envelope diEnvelope = new Envelope();
diEnvelope.AttackLevel = 0;
diEnvelope.AttackTime = (Int32)(0.5 * (Int32)DI.Seconds);
diEnvelope.FadeLevel = 0;
diEnvelope.FadeTime = (Int32)(1.0 * (Int32)DI.Seconds);
DirectInput.Effect diEffect = new Effect();
diEffect.Flags = EffectFlags.Polar | EffectFlags.ObjectOffsets;
diEffect.Duration = (Int32)(2.0 * (Int32)DI.Seconds);
diEffect.SamplePeriod = 0;
diEffect.Gain = (Int32)DI.NominalMax;
diEffect.TriggerButton = 0;
diEffect.TriggerRepeatInterval = 0;
JoystickState diJoystickState = new JoystickState();
Int32[] axes = { diJoystickState.X, diJoystickState.Y };
Int32[] direction = { 0, 0 };
diEffect.SetAxes(axes);
diEffect.SetDirection(direction);
diEffect.EnvelopeStruct = diEnvelope;
diEffect.Periodic = diPeriodic;
DirectInput.EffectObject diEffectObject = new EffectObject(ForceFeedbackGuid.Triangle, diEffect, game_diDevice);
// 値が有効な範囲じゃないエラーがでる
//DirectInput.EffectObject diEffectObject = new EffectObject(ForceFeedbackGuid.Triangle, game_diDevice);
// これは通るけど、どうやってブルブルさせるんだろ?
#endregion
//===============================================
ForceFeedBackのコード書いてみたけど、
EffectObjectのコンストラクタで例外でちゃうよ。
ステップ1と2は、前回のコードに含まれてるゲームパッドデバイス取得とかのあたりなので省略。
例外でるのはいいんだけど、どこがおかしいのかもっと詳しく教えてほしいです(´・ω・`)
むしろ、MSDNのmanagedのサンプルコード載せてください。。
//===============================================
#region ステップ3
// 規定値取得
//ForceFeedbackGuid.Triangle;
// EffectGuid 列挙して取得
//foreach (EffectInformation effectInformation in game_diDevice.GetEffects(EffectType.Periodic))
//{
// Guid effectGuid = effectInformation.EffectGuid;
//}
#endregion
#region ステップ4
DirectInput.Periodic diPeriodic = new Periodic();
diPeriodic.Magnitude = (Int32)DI.NominalMax;
diPeriodic.Offset = 0;
diPeriodic.Phase = 0;
diPeriodic.Period = (Int32)(0.05 * (Int32)DI.Seconds);
DirectInput.Envelope diEnvelope = new Envelope();
diEnvelope.AttackLevel = 0;
diEnvelope.AttackTime = (Int32)(0.5 * (Int32)DI.Seconds);
diEnvelope.FadeLevel = 0;
diEnvelope.FadeTime = (Int32)(1.0 * (Int32)DI.Seconds);
DirectInput.Effect diEffect = new Effect();
diEffect.Flags = EffectFlags.Polar | EffectFlags.ObjectOffsets;
diEffect.Duration = (Int32)(2.0 * (Int32)DI.Seconds);
diEffect.SamplePeriod = 0;
diEffect.Gain = (Int32)DI.NominalMax;
diEffect.TriggerButton = 0;
diEffect.TriggerRepeatInterval = 0;
JoystickState diJoystickState = new JoystickState();
Int32[] axes = { diJoystickState.X, diJoystickState.Y };
Int32[] direction = { 0, 0 };
diEffect.SetAxes(axes);
diEffect.SetDirection(direction);
diEffect.EnvelopeStruct = diEnvelope;
diEffect.Periodic = diPeriodic;
DirectInput.EffectObject diEffectObject = new EffectObject(ForceFeedbackGuid.Triangle, diEffect, game_diDevice);
// 値が有効な範囲じゃないエラーがでる
//DirectInput.EffectObject diEffectObject = new EffectObject(ForceFeedbackGuid.Triangle, game_diDevice);
// これは通るけど、どうやってブルブルさせるんだろ?
#endregion
//===============================================
DirectX 9 SDKを入れてみた。
時代はC#ということで、Managed DirectXを試してみる。
unmanagedの方は触ったことないので、初DirectX。
ゲームパッドの入力取るところからはじめてみることに。
これが結構てこずった。
結論からすると、ネット上のサンプルで、ほとんど取得は出来てたんだけど、
どこの値見ればいいのかとか、詳しく乗ってなくて困った。
//============================================
// ゲームコントローラ デバイスリスト取得
DirectInput.DeviceList diDeviceList = DirectInput.Manager.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly);
Guid instanceGuid = Guid.Empty;
Guid ffDriverGuid = Guid.Empty;
foreach (DeviceInstance di in diDeviceList)
{
// コントローラのGuid取得。複数あるときの方法考えないと。
ffDriverGuid = di.FFDriverGuid;
instanceGuid = di.InstanceGuid;
}
// コントローラデバイス初期化
DirectInput.Device game_diDevice = new Device(instanceGuid);
// コントローラとの協調性の設定
game_diDevice.SetCooperativeLevel(null, CooperativeLevelFlags.Background | CooperativeLevelFlags.NonExclusive | CooperativeLevelFlags.NoWindowsKey);
// データ書式を、Joystickにする
game_diDevice.SetDataFormat(DeviceDataFormat.Joystick);
// コントローラ内すべてのobjectについてループ。ボタン、軸
foreach (DirectInput.DeviceObjectInstance doi in game_diDevice.Objects)
{
// アナログ方向キーのレンジを、-1000~1000にする。
if ((doi.ObjectId & (Int32)Microsoft.DirectX.DirectInput.DeviceObjectTypeFlags.Axis) != 0)
{
game_diDevice.Properties.SetRange(
Microsoft.DirectX.DirectInput.ParameterHow.ById,
doi.ObjectId,
new Microsoft.DirectX.DirectInput.InputRange(-1000, 1000));
}
}
// 絶対値で取得
game_diDevice.Properties.AxisModeAbsolute = true;
// 監視開始
game_diDevice.Acquire();
//==============================================
ここまでが初期化部分。
んで、
//==============================================
// ゲームデバイスはState取得前に、Poll実施
game_diDevice.Poll();
JoystickState diJoystickState = game_diDevice.CurrentJoystickState;
// ボタン
// Id1が押されていると、buttons[0]=128 となる。押されてないとbuttons[0]=0
Byte[] buttons = diJoystickState.GetButtons();
// ビュースイッチ pointoObView[0] に数値が入る。上が0 右回り45度毎に4500増加
Int32[] pointObView = diJoystickState.GetPointOfView();
//==============================================
この部分を、ループで取得すれば、パッドの状態がわかるっと。
てこずったのは、十字キーとアナログスティックの入力。
持ってるゲームパッドには、十字キーと、アナログスティックが2個付いてる。
どこで3つの入力がわかるんだろう??
いろいろいじってたら、デフォルトでは、
十字キー = ビュースイッチ(POV) となっているようだ。
なので、pointObViewで取得できた。
アナログスティックは、2つではなく、 2軸x2の4軸として扱うようだ。
// 左側スティック
diJoysticState.X
diJoysticState.Y
// 右側スティック
diJoysticState.Z
diJoysticState.Rz
X軸、Y軸 Z軸 は、直交座標系だろうけど、Z回転 なんてのは初耳。
Z軸固定しての回転する方向??
という認識で合ってるのかしら(´・ω・`)?
数学っぽい内容は、画像描画に移った頃にでも。。
さて、次は、うちのパッドぶるぶる機能もあるので、
フォースフィードバックの方法調べよう。
時代はC#ということで、Managed DirectXを試してみる。
unmanagedの方は触ったことないので、初DirectX。
ゲームパッドの入力取るところからはじめてみることに。
これが結構てこずった。
結論からすると、ネット上のサンプルで、ほとんど取得は出来てたんだけど、
どこの値見ればいいのかとか、詳しく乗ってなくて困った。
//============================================
// ゲームコントローラ デバイスリスト取得
DirectInput.DeviceList diDeviceList = DirectInput.Manager.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly);
Guid instanceGuid = Guid.Empty;
Guid ffDriverGuid = Guid.Empty;
foreach (DeviceInstance di in diDeviceList)
{
// コントローラのGuid取得。複数あるときの方法考えないと。
ffDriverGuid = di.FFDriverGuid;
instanceGuid = di.InstanceGuid;
}
// コントローラデバイス初期化
DirectInput.Device game_diDevice = new Device(instanceGuid);
// コントローラとの協調性の設定
game_diDevice.SetCooperativeLevel(null, CooperativeLevelFlags.Background | CooperativeLevelFlags.NonExclusive | CooperativeLevelFlags.NoWindowsKey);
// データ書式を、Joystickにする
game_diDevice.SetDataFormat(DeviceDataFormat.Joystick);
// コントローラ内すべてのobjectについてループ。ボタン、軸
foreach (DirectInput.DeviceObjectInstance doi in game_diDevice.Objects)
{
// アナログ方向キーのレンジを、-1000~1000にする。
if ((doi.ObjectId & (Int32)Microsoft.DirectX.DirectInput.DeviceObjectTypeFlags.Axis) != 0)
{
game_diDevice.Properties.SetRange(
Microsoft.DirectX.DirectInput.ParameterHow.ById,
doi.ObjectId,
new Microsoft.DirectX.DirectInput.InputRange(-1000, 1000));
}
}
// 絶対値で取得
game_diDevice.Properties.AxisModeAbsolute = true;
// 監視開始
game_diDevice.Acquire();
//==============================================
ここまでが初期化部分。
んで、
//==============================================
// ゲームデバイスはState取得前に、Poll実施
game_diDevice.Poll();
JoystickState diJoystickState = game_diDevice.CurrentJoystickState;
// ボタン
// Id1が押されていると、buttons[0]=128 となる。押されてないとbuttons[0]=0
Byte[] buttons = diJoystickState.GetButtons();
// ビュースイッチ pointoObView[0] に数値が入る。上が0 右回り45度毎に4500増加
Int32[] pointObView = diJoystickState.GetPointOfView();
//==============================================
この部分を、ループで取得すれば、パッドの状態がわかるっと。
てこずったのは、十字キーとアナログスティックの入力。
持ってるゲームパッドには、十字キーと、アナログスティックが2個付いてる。
どこで3つの入力がわかるんだろう??
いろいろいじってたら、デフォルトでは、
十字キー = ビュースイッチ(POV) となっているようだ。
なので、pointObViewで取得できた。
アナログスティックは、2つではなく、 2軸x2の4軸として扱うようだ。
// 左側スティック
diJoysticState.X
diJoysticState.Y
// 右側スティック
diJoysticState.Z
diJoysticState.Rz
X軸、Y軸 Z軸 は、直交座標系だろうけど、Z回転 なんてのは初耳。
Z軸固定しての回転する方向??
という認識で合ってるのかしら(´・ω・`)?
数学っぽい内容は、画像描画に移った頃にでも。。
さて、次は、うちのパッドぶるぶる機能もあるので、
フォースフィードバックの方法調べよう。
DirectInputの続きを読む
2008/01/22以前のコンテンツは2008/01/22以前のアーカイブのページで見られます。
