游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2402|回复: 4

有关Input驱动事件响应的小问题

[复制链接]

5

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
发表于 2004-6-17 23:29:00 | 显示全部楼层 |阅读模式
在我学到Input时出现了个大麻烦。
小弟弄了2天也没有得出个结果,请各位高手帮帮忙。

问题:
创建的Keyboard和Mouse事件驱动都成功创建,就时在获取Keyboard和Mouse事件就时得不到事件状态!

代码片断:
void CD3DApp:rocessInput()
{
        //
        char KeyboardState[256];
        //--------------------------------------------------------
        //在执行到这句时总是得不到Keyboard状态
        if (SUCCEEDED(m_pKeyboard->GetDeviceState(sizeof(KeyboardState), (LPVOID)&KeyboardState)))
        {
                if (KEYDOWN(KeyboardState, DIK_RIGHT))
                        m_rRotate -= 0.5f;
                if (KEYDOWN(KeyboardState, DIK_LEFT))
                        m_rRotate += 0.5f;

                if (KEYDOWN(KeyboardState, DIK_UP))
                        m_rScale -= 0.5f;
                if (KEYDOWN(KeyboardState, DIK_DOWN))
                        m_rScale += 0.5f;
        }
       
        //
        DIMOUSESTATE MouseState;
        //--------------------------------------------------------
        //在执行到这句时总是得不到Mouse状态
        if (SUCCEEDED(m_pMouse->GetDeviceState(sizeof(MouseState), (LPVOID)&MouseState)))
        {
                if (MOUSEBUTTONDOWN(MouseState.rgbButtons[0]))
                        m_nMouseLeft = 1;
                else
                        m_nMouseLeft = 0;
               
                if (MOUSEBUTTONDOWN(MouseState.rgbButtons[1]))
                        m_nMouseRight = 1;
                else
                        m_nMouseRight = 0;

                m_nMouseX += MouseState.lX;
                m_nMouseY += MouseState.lY;
        }
}


学习环境:
vs.net C++ 2003
dx9

附上源代码。


[em17] [em17]

sf_2004617232952.rar

7.71 KB, 下载次数:

17

主题

177

帖子

177

积分

注册会员

Rank: 2

积分
177
QQ
发表于 2004-6-18 07:27:00 | 显示全部楼层

Re:有关Input驱动事件响应的小问题

我也遇到了这个问题,int key[4]={false,false,false,false}来存储上下左右是否被按下,如果左右切换得比较快的话.人物就会原地踏步踏1~2秒然后再走.不知道有没有高手遇到过,怎么解决的呢???????下面的核心代码
void Frame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
switch(nChar)
{
case VK_UP:key[0]=true;break;
case VK_DOWN:key[1]=true;break;
case VK_LEFT:key[2]=true;break;
case VK_RIGHT:key[3]=true;break;
default:break;
}
CFrameWnd::OnKeyDown(nChar, nRepCnt, nFlags);
}
void Frame::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
switch(nChar)
{
case VK_UP:key[0]=false;break;
case VK_DOWN:key[1]=false;break;
case VK_LEFT:key[2]=false;break;
case VK_RIGHT:key[3]=false;break;
default:break;
}
CFrameWnd::OnKeyUp(nChar, nRepCnt, nFlags);
}

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20547
发表于 2004-6-19 17:46:00 | 显示全部楼层

Re:有关Input驱动事件响应的小问题

你们有尝试过DX的例子吗?它的例子应该可以顺利获取的。参考一下可能就有答案了!

1

主题

26

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2004-6-20 10:37:00 | 显示全部楼层

Re:有关Input驱动事件响应的小问题

应该是这样的啊!可能是其它地方有错
我的这部分代码和你差不多,我的没问题

我的作品:http://www.gameres.com/bbs/showthread.asp?threadid=8550

5

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
 楼主| 发表于 2004-6-21 22:14:00 | 显示全部楼层

Re:有关Input驱动事件响应的小问题

感谢各位大侠得指点!

[em13]喔终于发现问题了。 [em2]

要获取Input事件必需先创建窗口Instance。

下面是我修改WinMain函数中的代码

INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, INT)
{
        WNDCLASSEX wc = {sizeof(WNDCLASSEX), CS_CLASSDC, WinProc, 0, 0, GetModuleHandle(NULL),
                NULL, LoadCursor(NULL, IDC_ARROW), NULL, NULL, "MyClass", NULL};
    //wc.hCursor = LoadCursor(NULL, IDC_ARROW);       
        //ShowCursor(FALSE);
        RegisterClassEx(&wc);

        HWND hWnd = CreateWindow("MyClass", "Input Projection", WS_OVERLAPPEDWINDOW,
                20, 20, 500, 500, GetDesktopWindow(), NULL, wc.hInstance, NULL);


//***********************
//更正后先显示窗口,生成实列
//------------------------------------
ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd);


g_pD3DApp = new CD3DApp();
if (SUCCEEDED(g_pD3DApp->Create(hWnd, wc.hInstance)))
{

//刚开始学习DX的时候我一直喜欢吧窗口显示放在这个位置。
//生成DX时,由于没有实列化主窗口,所以会出现得不到input事件
//ShowWindow(hWnd, SW_SHOWDEFAULT);
//UpdateWindow(hWnd);


g_pD3DApp->GameLoop();
}
SAFE_DELETE(g_pD3DApp);                       

        UnregisterClass("MyClass", wc.hInstance);
        return 0;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-7 10:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表