943,866 Members | Top Members by Rank

Ad:
Jun 11th, 2009
0

Directx9 bitmap movement problem.

Expand Post »
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);
}
Similar Threads
Reputation Points: 10
Solved Threads: 1
Light Poster
Pikachumanson is offline Offline
45 posts
since May 2008
Jun 12th, 2009
0

Re: Directx9 bitmap movement problem.

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.
Last edited by MattEvans; Jun 12th, 2009 at 4:45 am.
Moderator
Featured Poster
Reputation Points: 522
Solved Threads: 64
Veteran Poster
MattEvans is offline Offline
1,091 posts
since Jul 2006
Jun 18th, 2009
0

Re: Directx9 bitmap movement problem.

The problem was I took out the first RECT function. So when I put it back in I didn't have that problem anymore. Anyway I got the program fixed. I needed to use static ints to make the sphere move around the smoothly instead of just appearing in another spot like in my original program.
Reputation Points: 10
Solved Threads: 1
Light Poster
Pikachumanson is offline Offline
45 posts
since May 2008

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in Game Development Forum Timeline: help opengl
Next Thread in Game Development Forum Timeline: Learning the game





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC