1

I am pretty new to Android development and I am trying to make a game in which my character moves on tiles across the screen. Since each tile is a bitmap of its own I redraw it after the character has moved on it.

Now for some reason every time I draw the character sprite the entire view sort of flickers. It seems like on every even draw the background I created is visible and on every odd draw the background is black. Also, the character sprite leaves a trail but only half of it is visible, depending on whether it's an even or an odd draw. My guess is that for some reason there are two views or something on which the canvas is drawing.

I would've uploaded images but I can't :( Does anyone have a clue what I'm doing wrong? Thanks a lot for any kind of help.

Here is the method moving the character:

// Moves sprite on screen
private void MoveSprite()
{
    // Run as long as the sprite's location didn't reach its destination
    while (m_gameView.m_playerControl.m_MoveDestination.x != m_gameView.m_playerControl.m_CharSprite.m_SpriteLocationOnMatrix.x ||
            m_gameView.m_playerControl.m_MoveDestination.y != m_gameView.m_playerControl.m_CharSprite.m_SpriteLocationOnMatrix.y)
    {
        // Draw sprite with FPS control
        Canvas c = null;
        startTime = System.currentTimeMillis();

        try
        {
            c = m_gameView.getHolder().lockCanvas();

            synchronized (m_gameView.getHolder())
            {
                // Draws player and refreshes the tiles it was previously on
                m_gameView.m_playerControl.onDraw(c);
            }
        }
        finally
        {
            if (c != null)
            {
                m_gameView.getHolder().unlockCanvasAndPost(c);
            }
        }

        sleepTime = ticksPS - (System.currentTimeMillis() - startTime);

        try
        {
            if (sleepTime > 0)
                Thread.sleep(sleepTime);
            else
                Thread.sleep(10);
        }
        catch (Exception e)
        {
        }
    }

    // After drawing char movement, changing flag to false
    m_fIsCharMoved = false;
Loktar
  • 34,764
  • 7
  • 90
  • 104
Sagie Levy
  • 357
  • 3
  • 12

1 Answers1

0
Check out screen width and height based drawing.

you should draw inside the screen.

I think u r drawing the characters out of the screen width or height 
Venkatesh S
  • 5,466
  • 1
  • 25
  • 30