ok I am almost done doing what I need to do and that is getting a portion of a bitmap to appear on the screen and have it move around using directional controls. My problem is that while I get the the bitmap move it leaves the original behind and a new one appears in the direction I pressed. Then when I take my finger off the button it returns to the middle.
So basically I want to make the bitmap that was in the previous position disappear and have the bitmap stay in the position I put it in so I can move it around like if I was playing zelda. The bitmap problem is the problem I really want to solve.
Here is my Game_Run function where all the magic happens
Let me know if you need the whole program..
void Game_Run(HWND hwnd)
{
HRESULT result;
RECT rect2;
rect2.left = 164;
rect2.top = 0;
rect2.right = 320;
rect2.bottom = 160;
//load surface from file
result = D3DXLoadSurfaceFromFile(
surface, //destination surface
NULL, //destination palette
NULL, //destination rectangle
"spheres.bmp", //source filename
&rect2, //source rectangle
D3DX_DEFAULT, //controls how image is filtered
0, //for transparency (0 for none)
NULL); //source image info (usually NULL)
//return okay
if(d3ddev == NULL)
return;
//start rendering
if (d3ddev ->BeginScene())
{
if (KEY_DOWN(VK_DOWN))
{
d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0);
rect2.top = rect2.top + 10;
rect2.bottom = rect2.bottom + 10;
if (rect2.bottom > SCREEN_HEIGHT)
{
rect2.top = rect2.top - 10;
rect2.bottom = rect2.bottom - 10;
}
}
if(KEY_DOWN(VK_UP))
{
d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0);
rect2.top = rect2.top - 10;
rect2.bottom = rect2.bottom - 10;
if (rect2.top == 0)
{
rect2.top = rect2.top + 10;
rect2.bottom = rect2.bottom + 10;
}
}
if(KEY_DOWN(VK_RIGHT))
{
d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0);
rect2.left = rect2.left + 10;
rect2.right = rect2.right + 10;
if(rect2.right > SCREEN_WIDTH)
{
rect2.right = rect2.right - 10;
rect2.left = rect2.left - 10;
}
}
if(KEY_DOWN(VK_LEFT))
{
d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0);
rect2.left = rect2.left - 10;
rect2.right = rect2.right - 10;
if(rect2.left == 0)
{
rect2.left = rect2.left + 10;
rect2.right = rect2.right + 10;
}
}
//draw surface to the back buffer
d3ddev ->StretchRect(surface, NULL, backbuffer, &rect2, D3DTEXF_NONE);
//create pointer to the back buffer
d3ddev ->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &backbuffer);
//stop rendering
d3ddev ->EndScene();
}
//display the back buffer on the screen
d3ddev ->Present(NULL, NULL, NULL, NULL);
//check for escape key (to exit program)
if (KEY_DOWN(VK_ESCAPE))
PostMessage(hwnd, WM_DESTROY, 0, 0);
}