3

SlimDX と RawInput を使用して、宇宙ゲームのキーボードとマウス コントロールをセットアップしようとしています。私の現在のコードは次のとおりです。

Device.RegisterDevice(UsagePage.Generic, UsageId.Keyboard, DeviceFlags.None);
Device.KeyboardInput += new EventHandler<KeyboardInputEventArgs>(keyboardInput);
Device.RegisterDevice(UsagePage.Generic, UsageId.Mouse, DeviceFlags.None);
Device.MouseInput += new EventHandler<MouseInputEventArgs>(mouseInput);

しかし、私はここで読んだ:http ://code.google.com/p/slimdx/issues/detail?id=785 WPFの場合、別のオーバーロードを使用する必要があるDevice.RegisterDevice()こと、および使用してHandleMessageを割り当てる必要があることDevice.HandleMessage(IntPtr message)

RegisterDevice() の正しいオーバーロードを見つけました。これは次のとおりです。

RegisterDevice(UsagePage usagePage, UsageId usageId, DeviceFlags flags, IntPtr target, bool addThreadFilter)

ただし、うまくいかないのは次のとおりです。

1) ターゲットを使用する必要がある場合、ターゲットとして何を設定するつもりですか?

2) この IntPtr メッセージはどこから取得できますか?

4

1 に答える 1

2

これは役立つかもしれません。私はポンのゲームのためにこれを作りました。それが役に立てば幸い

            private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Down)
        {
            spaceKeyDown = true;
        }
        if (e.KeyCode == Keys.Up)
        {
            spaceKeyUp = true;
        }
        if (e.KeyCode == Keys.W)
        {
            spaceKeyW = true;
        }
        if (e.KeyCode == Keys.S)
        {
            spaceKeyS = true;
        }
        if (direction == 0)
        {
            if (e.KeyCode == Keys.Space)
            {
                Random rand = new Random();
                direction = rand.Next(1, 5);
            }
        }
    }

    private void Form1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Down)
        {
            spaceKeyDown = false;
        }
        if (e.KeyCode == Keys.Up)
        {
            spaceKeyUp = false;
        }
        if (e.KeyCode == Keys.W)
        {
            spaceKeyW = false;
        }
        if (e.KeyCode == Keys.S)
        {
            spaceKeyS = false;
        }
    }
    private void timer1_Tick(object sender, EventArgs e)
    {
        if (spaceKeyDown == true)
        {
            if (p2y < picPicture.Height - Paddle2.Height)
                p2y += 15;
        }
        if (spaceKeyUp == true)
        {
            if (p2y > 0)
                p2y -= 15;
        }
        if (spaceKeyS == true)
        {
            if (p1y < picPicture.Height - Paddle1.Height)
                p1y += 15;
        }
        if (spaceKeyW == true)
        {
            if (p1y > 0)
                p1y -= 15;
        }
    }
于 2013-04-19T18:03:37.133 に答える