3,882
社区成员
发帖
与我相关
我的任务
分享
BOOL CDirectInput::GetKey( WORD& input )
{
#define KEYDOWN(key) (buffer[key] & 0x80)
HRESULT hr;
char buffer[256];
input = 0;
hr = m_pdevKeyboard->GetDeviceState( sizeof(buffer), &buffer );
if( FAILED(hr) )
{
if( hr == DIERR_INPUTLOST )
hr = Acquire();
return FALSE;
}
if( KEYDOWN( DIK_UP ) )
input |= KEY_UP;
else if( KEYDOWN( DIK_DOWN ) )
input |= KEY_DOWN;
else if( KEYDOWN( DIK_LEFT ) )
input |= KEY_LEFT;
else if( KEYDOWN( DIK_RIGHT ) )
input |= KEY_RIGHT;
if( KEYDOWN( DIK_SPACE ) )
input |= KEY_FIRE;
return TRUE;
}
BOOL CPlayer::ProcessInput( WORD input, DWORD time )
{
DIRECTION dir;
if( input & KEY_UP )
dir = DIR_UP;
else if( input & KEY_DOWN )
dir = DIR_DOWN;
else if( input & KEY_LEFT )
dir = DIR_LEFT;
else if( input & KEY_RIGHT )
dir = DIR_RIGHT;
if( input & KEY_DIRECTION )
{
if( m_dir == dir )
Move();
else
ChangeDirection( dir );
}
if( input & KEY_FIRE )
return Fire();
return FALSE;
}