I get that you want to understand what's going on, but beyond that, is there some problem with just using display.flip?On Thu, Jun 12, 2014 at 3:31 AM, Abhas Bhattacharya <abhasbhattacharya2@xxxxxxxxx> wrote:
The following code draws a circle and moves it by 4px to left every step.Problem is that at about 60 fps or more, the circle flickers and sometimes looks cut off to me (approx. illustration - http://i.imgur.com/4nKzsCP.png). The flickering is not like a screen flicker, more like state switching between full circle and cut-off circle. This problems doesnt occur at all upto 45 fps, couldnt be reproduced by screen capture or pausing the game, as if the problem is only visible to the naked eye.Now, there could be two possibilities:* Screen is not updated over the required region.None of the update code depends on the fps, so the flicker should have been fps-independent. But, the problem disappears at 30/45 fps. But, surprisingly, it is also fixed if display.flip is used instead of update.* V-sync/monitor refresh problemSome other pygame flicker questions mentioned this problem. I thought software rendering doesnt have this problem, but not really sure. Also, why would display.flip fix this?Ver- 1.9.2 a0import pygamew,h=800,200fps=60pygame.init()screen = pygame.display.set_mode([w, h])color=pygame.Color("white")clock=pygame.time.Clock()radius=20x,y=800,100def get_bbox(x,y):  left = x - radius  top = y - radius  width = radius * 2  height = radius * 2  return pygame.Rect((left, top), (width, height))while True:  old_x=x  x-=4  screen.fill(pygame.Color("black"),get_bbox(old_x,y))  pygame.draw.circle(screen, color, (x, y), radius, 1)  pygame.display.update([get_bbox(x,y),get_bbox(old_x,y)])  clock.tick(fps)