flickering problem

Started by
1 comment, last by sakky 19 years, 7 months ago
ok im trying to post the socre on the screen but its flickering so baddly i cant see it maybe i did my double buffering wrong or something because i dont thinks it should be this bad any way heres what i got BTW im using windows dev-c++

#include "breakout.h"
    

BOOL GameInitialize(HINSTANCE hInstance)
{
    _pGame = new GameEngine(hInstance , TEXT("breakout"), TEXT("breakout"), IDI_UFO, IDI_UFO_SM,500, 650);
        if (_pGame == NULL)
        {
            return FALSE;
        }; 
    _pGame->SetFrameRate(40);
    
        _hInstance =hInstance;
        return TRUE;
}
void GameStart(HWND hWindow)
{
    Offscreenbitmap = CreateCompatibleBitmap(GetDC(hWindow),_pGame->GetWidth(), _pGame->GetHeight());
    OffscreenDC = CreateCompatibleDC(GetDC(hWindow));
    RECT BlockBounds = { 0,0,_pGame->GetWidth(), _pGame->GetHeight()};
    for(int j = 0; j<30; j++)
    {
        blockbits[j] = new Bitmap(hDC, IDB_BLOCK , _hInstance);
    };    
    for(int i = 0; i<30; i++)
    {
        blocks = new Sprite(blockbits , BlockBounds , SA_NONE);
        _pGame->AddSprite(blocks);    
    };
    for (int l = 0; l <30; l++)
    { 
        blocks[l]->SetPosition(rand()%500, rand()%450);
        for(int s=0; s < 30; s++)
          if( blocks[l]->TestCollision(blocks) == <span class="cpp-keyword">TRUE</span>)
          {
              <span class="cpp-keyword">if</span> (blocks != blocks[l])
               blocks[l]-&gt;SetPosition(rand()%<span class="cpp-number">500</span>, rand()%<span class="cpp-number">450</span>);
          };    
                      
    };    
        
    RECT BallBounds =  { <span class="cpp-number">0</span> , <span class="cpp-number">0</span> , _pGame-&gt;GetWidth() , _pGame-&gt;GetHeight()};
    RECT PaddleBounds = { <span class="cpp-number">0</span> , <span class="cpp-number">0</span> , _pGame-&gt;GetWidth() , _pGame-&gt;GetHeight()};
    srand(GetTickCount());
    HDC hDC = GetDC(hWindow);
    BackGround = <span class="cpp-keyword">new</span> Bitmap(hDC, IDB_BACKGROUND , _hInstance);
    ballbit = <span class="cpp-keyword">new</span> Bitmap(hDC , IDB_BALL , _hInstance);
    paddlebit = <span class="cpp-keyword">new</span> Bitmap(hDC , IDB_PADDLE , _hInstance);
    ball = <span class="cpp-keyword">new</span> Sprite( ballbit , BallBounds , BA_BOUNCE);
    paddle = <span class="cpp-keyword">new</span> Sprite (paddlebit , PaddleBounds , BA_WRAP);
    ball-&gt;SetVelocity(<span class="cpp-number">0</span>,<span class="cpp-number">5</span>);
    paddle-&gt;SetVelocity(PaddleSpeed,<span class="cpp-number">0</span>);
    paddle-&gt;SetPosition(<span class="cpp-number">250</span>,<span class="cpp-number">600</span>);
    _pGame-&gt;AddSprite(ball);
    _pGame-&gt;AddSprite(paddle);
    
}  
<span class="cpp-keyword">void</span> GameEnd()
{
    _pGame-&gt;CleanupSprites();
    <span class="cpp-comment">//_pGame-&gt;CloseMIDIPlayer();</span>
    <span class="cpp-keyword">delete</span> _pGame;
}
<span class="cpp-keyword">void</span> GameActivate (HWND hWindow)
{
    
}   
<span class="cpp-keyword">void</span> GameDeactivate  (HWND hWindow)
{
    
}  
<span class="cpp-keyword">void</span> GamePaint( HDC hDC)
{
    TCHAR szText[<span class="cpp-number">64</span>];
    RECT rect = { <span class="cpp-number">237</span>, <span class="cpp-number">360</span>, <span class="cpp-number">301</span> };
    wsprintf(szText, <span class="cpp-literal">"%d"</span>, score);
    DrawText(hDC, szText, -<span class="cpp-number">1</span>, &amp;rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
    BackGround-&gt;Draw(hDC, <span class="cpp-number">0</span> , <span class="cpp-number">0</span> , <span class="cpp-keyword">TRUE</span>);
    _pGame-&gt;DrawSprites(hDC);
}
<span class="cpp-keyword">void</span> GameCycle ()
{
     DrawText(hDC, szText, -<span class="cpp-number">1</span>, &amp;rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
    _pGame-&gt;UpdateSprites();
    <span class="cpp-comment">//ball-&gt;Update();</span>
    <span class="cpp-comment">//paddle-&gt;Update();</span>
    InvalidateRect(_pGame-&gt;GetWindow(), NULL, <span class="cpp-keyword">FALSE</span>);
    HWND hWIndow =_pGame-&gt;GetWindow();
    HDC hDC = GetDC(hWindow);
    GamePaint(OffscreenDC);
    BitBlt(hDC, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, _pGame-&gt;GetWidth(), _pGame-&gt; GetHeight(), OffscreenDC, <span class="cpp-number">0</span>, <span class="cpp-number">0</span>, SRCCOPY);
    ReleaseDC(hWindow, hDC);
    <span class="cpp-keyword">if</span>(PaddleSpeed != <span class="cpp-number">0</span> &amp;&amp; PaddleSpeed &lt; <span class="cpp-number">0</span>)
    PaddleSpeed++;
    <span class="cpp-keyword">if</span>(PaddleSpeed != <span class="cpp-number">0</span> &amp;&amp; PaddleSpeed &gt; <span class="cpp-number">0</span>)
    PaddleSpeed–;
    paddle-&gt;SetVelocity(PaddleSpeed,<span class="cpp-number">0</span>);
}
<span class="cpp-keyword">void</span> HandleKeys()
{
    <span class="cpp-keyword">if</span>(GetAsyncKeyState(VK_LEFT) &lt; <span class="cpp-number">0</span>)
    {
        PaddleSpeed = -<span class="cpp-number">7</span>;
        paddle-&gt;SetVelocity(PaddleSpeed, <span class="cpp-number">0</span>);
    };  
    <span class="cpp-keyword">if</span>(GetAsyncKeyState(VK_RIGHT) &lt; <span class="cpp-number">0</span>)
    {
        PaddleSpeed = <span class="cpp-number">7</span>;
        paddle-&gt;SetVelocity(PaddleSpeed, <span class="cpp-number">0</span>);
    };      
    
}
<span class="cpp-keyword">void</span> MouseButtonDown(<span class="cpp-keyword">int</span> x, <span class="cpp-keyword">int</span> y, <span class="cpp-keyword">BOOL</span> bLeft)
{}
<span class="cpp-keyword">void</span> MouseButtonUp(<span class="cpp-keyword">int</span> x, <span class="cpp-keyword">int</span> y, <span class="cpp-keyword">BOOL</span> bLeft)
{}
<span class="cpp-keyword">void</span> MouseMove(<span class="cpp-keyword">int</span> x, <span class="cpp-keyword">int</span> y)
{} 
<span class="cpp-keyword">BOOL</span> SpriteCollision(Sprite* pSpriteHitter, Sprite* pSpriteHittee)
{
  <span class="cpp-keyword">if</span>(pSpriteHitter-&gt;GetBitmap() == ballbit &amp;&amp; pSpriteHittee-&gt;GetBitmap() == paddlebit)
  {
      <span class="cpp-keyword">if</span>(PaddleSpeed != <span class="cpp-number">0</span>)
      ball-&gt;SetVelocity(-PaddleSpeed,-<span class="cpp-number">5</span>);
      <span class="cpp-keyword">else</span> ball-&gt;SetVelocity(<span class="cpp-number">0</span>,-<span class="cpp-number">5</span>); 
  }
  <span class="cpp-keyword">for</span>(<span class="cpp-keyword">int</span> i = <span class="cpp-number">0</span>; i &lt; <span class="cpp-number">30</span>; i++)
  {
      <span class="cpp-keyword">if</span>(pSpriteHitter-&gt;GetBitmap() == ballbit &amp;&amp; pSpriteHittee-&gt;GetBitmap() == blockbits<span style="font-weight:bold;"> &amp;&amp; pSpriteHittee-&gt;IsHidden() != <span class="cpp-keyword">TRUE</span>)
      {
      
           ball-&gt;SetVelocity(<span class="cpp-number">0</span>,<span class="cpp-number">5</span>);
           pSpriteHittee-&gt;SetHidden(<span class="cpp-keyword">TRUE</span>);
      };    
  }; 
  <span class="cpp-keyword">return</span> <span class="cpp-keyword">false</span>;

}              


</pre></div><!–ENDSCRIPT–> 
____________________________"This just in, 9 out of 10 americans agree that 1 out of 10 americans will disagree with the other 9"- Colin Mochrie
Advertisement
i'm using that same engine as you (can't remember the name of the book it came with, though it was blue book). anyways i get that flickering problem too, i think its because of the windows api, though i really have no idea
You are calling InvalidateRect after you draw the text. That may be your problem. Try calling before you draw any thing and see if that helps
Take back the internet with the most awsome browser around, FireFox

This topic is closed to new replies.

Advertisement