| | |
Directx9 bitmap movement problem.
![]() |
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..
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);
} You call this function multiple times right? Via a timer callback or in a while loop with a sleep?
If so, you're not keeping the rect2 variable around: every time this function gets called the variable is reset to it's initial value, and then any changes you make are lost when the function exits.
Not sure why the image appears duplicated. That sounds like you're not clearing the draw buffer properly... I don't have much recent experience with DirectX though, so can't help you much there.
If so, you're not keeping the rect2 variable around: every time this function gets called the variable is reset to it's initial value, and then any changes you make are lost when the function exits.
Not sure why the image appears duplicated. That sounds like you're not clearing the draw buffer properly... I don't have much recent experience with DirectX though, so can't help you much there.
Last edited by MattEvans; Jun 12th, 2009 at 4:45 am.
Plato forgot the nullahedron..
![]() |
Similar Threads
- Logitech QuickCam Sphere (Orbit) Tilt Problem (USB Devices and other Peripherals)
- problem in Drawing a Unicode string on an Bitmap image in VC++ (C++)
- 32 bit color depth bitmap problem with XP (C++)
- Mouse Movement is slow in VMware Guest OS (Windows NT / 2000 / XP)
- Texture mapping for sphere! (Game Development)
- Microsoft wireless mouse will not allow Dell laptop to activate screensaver (Windows NT / 2000 / XP)
- A problem with transparency in Win32 controls (C)
- Big Problem, Generic Error (VB.NET)
- IE "Save Image as;" Bitmap, wont in JPEG??? (Web Browsers)
- gaming problem in windows (Windows 95 / 98 / Me)
Other Threads in the Game Development Forum
- Previous Thread: help opengl
- Next Thread: Need a starting point for developing a small game in Visual C++ with DirectX
| Thread Tools | Search this Thread |
3d advertising ai algorithm ban c++ cambridge camera censorship china competition console development engine fov fpx game gamer games gaming gauntanamo government idaho in-gameadvertisement intellectualproperty laracroft live manhunt math mathematics matrix mercenaries microsoft mmorpg modded msn naked news nintendo obama palin physics pirate playstation politics projection ps3 rpg search software sony stephenhawking stocks studio technology terrorism tombraider uk videogame web wii world-of-warcraft xbox xbox-live xbox360






