this code compiles, but doesn't work how it should
here is my main.cpp from my direct x project. moving the bitmap left and right works good, but it still doesn't move up and down. someone look at this and tell me whats wrong? (i only included the important parts.
Code:
enum Actions
{
ACTIONS_LEFTRIGHT,
ACTIONS_UPDOWN,
ACTIONS_LEFT,
ACTIONS_RIGHT,
ACTIONS_UP,
ACTIONS_DOWN,
ACTIONS_QUIT,
ACTIONS_HELP,
ACTIONS_CONFIGURE,
ACTIONS_MUSIC,
ACTIONS_PAUSE,
ACTIONS_NONE
};
bool g_bQuit, g_bShowHelp, g_bPaused, g_bDoConfig;
bool g_bLeft, g_bRight, g_bUp, g_bDown;
DIACTION g_rgActions[] =
{
// Genre-defined virtual axes
{ ACTIONS_LEFTRIGHT, DIAXIS_ARCADES_LATERAL, 0, "Left/Right" },
{ ACTIONS_UPDOWN, DIAXIS_ARCADES_MOVE, 0, "Up/Down" },
// Genre-defined virtual buttons
{ ACTIONS_LEFT, DIBUTTON_ARCADES_LEFT_LINK, 0, "Left" },
{ ACTIONS_RIGHT, DIBUTTON_ARCADES_RIGHT_LINK, 0, "Right" },
{ ACTIONS_UP, DIBUTTON_ARCADES_FORWARD_LINK, 0, "Up" },
{ ACTIONS_DOWN, DIBUTTON_ARCADES_BACK_LINK, 0, "Down" },
{ ACTIONS_PAUSE, DIBUTTON_ARCADES_PAUSE, 0, "Pause" },
// Keys
{ ACTIONS_LEFT, DIKEYBOARD_LEFT, 0, "Left" },
{ ACTIONS_LEFT, DIKEYBOARD_NUMPAD4, 0, "Left" },
{ ACTIONS_RIGHT, DIKEYBOARD_RIGHT, 0, "Right" },
{ ACTIONS_RIGHT, DIKEYBOARD_NUMPAD6, 0, "Right" },
{ ACTIONS_UP, DIKEYBOARD_UP, 0, "Up" },
{ ACTIONS_UP, DIKEYBOARD_NUMPAD8, 0, "Up" },
{ ACTIONS_DOWN, DIKEYBOARD_DOWN, 0, "Down" },
{ ACTIONS_DOWN, DIKEYBOARD_NUMPAD2, 0, "Down" },
{ ACTIONS_PAUSE, DIKEYBOARD_P, DIA_APPFIXED, "Pause" },
{ ACTIONS_MUSIC, DIKEYBOARD_M, DIA_APPFIXED, "Music on/off" },
{ ACTIONS_HELP, DIKEYBOARD_F1, DIA_APPFIXED, "Help" },
{ ACTIONS_CONFIGURE, DIKEYBOARD_F2, DIA_APPFIXED, "Configure" },
{ ACTIONS_QUIT, DIKEYBOARD_ESCAPE, DIA_APPFIXED, "Quit" },
};
//skip all this blah blah
void HandleAction(UINT nAction, DWORD dwData)
{
int nAxisPos = (int)dwData;
switch (nAction)
{
case ACTIONS_LEFTRIGHT:
if (nAxisPos < -AXIS_THRESHOLD)
{
g_bLeft = true;
g_bRight = false;
}
else if (nAxisPos > AXIS_THRESHOLD)
{
g_bRight = true;
g_bLeft = false;
}
else
{
g_bLeft = g_bRight = false;
}
break;
case ACTIONS_UPDOWN:
if (nAxisPos < -AXIS_THRESHOLD)
{
g_bUp = true;
g_bDown = false;
}
else if (nAxisPos > AXIS_THRESHOLD)
{
g_bDown = true;
g_bUp = false;
}
else
{
g_bUp = g_bDown = false;
}
break;
case ACTIONS_LEFT:
g_bLeft = (dwData != 0);
break;
case ACTIONS_RIGHT:
g_bRight = (dwData != 0);
break;
case ACTIONS_UP:
g_bUp = (dwData != 0);
break;
case ACTIONS_DOWN:
g_bDown = (dwData != 0);
break;
case ACTIONS_PAUSE:
if(dwData != 0)
g_bPaused = !g_bPaused;
break;
case ACTIONS_QUIT:
g_bQuit = true;
break;
default:
break;
}
}
////////////////////////////////////////////////////////////////////////////////
// Idle-time processing function.
void OnIdle(void)
{
if (g_lpPrimary == NULL)
return;
if (!g_bActive)
return;
CheckInput();
if (g_bQuit)
{
PostMessage(hWndMain, WM_CLOSE, 0, 0);
return;
}
RECT r;
// Draw the background to the screen.
r.left = 0;
r.top = 0;
r.right = 640;
r.bottom = 480;
BackBlt(0, 0, lpA, &r, DDBLTFAST_NOCOLORKEY | DDBLTFAST_WAIT);
// Move a sprite around with the input.
static int xSprite;
static int ySprite;
if(!g_bPaused)
{
if (g_bLeft)
xSprite--;
if (g_bRight)
xSprite++;
if (g_bUp)
ySprite--;
if(g_bDown)
ySprite++;
r.left = 64;
r.right = 128;
r.top = 0;
r.bottom = 64;
BackBlt(288 + xSprite, 150 + ySprite, lpSprites, &r, DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT);
g_lpPrimary->Flip(NULL, DDFLIP_WAIT);
}
}