Metoden med att hålla reda på varifrån något objekt kommer och "sudda" bakom är jag väl bekant med och är den enda som fungerar tillfredställande om man bara har riktigt slöa grafikrutiner (som i basic tex, eller om man använder delphi's canvas funktioner, dessa är iochförsig ganska snabba om man använder dem på rätt sätt).
Metoden som används i "riktiga" spel är följande: (observera att detta gäller 2d-spel.)
1, istället för att rita ut direkt på skärmen används en (eller flera) s.k. buffer. Denna buffert är egentligen som en bitmap med samma storlek som skärmen.
Allt ritande sker till bufferten och när man ritat klart ritas bufferten till sist ut på skärmen (detta tar bort eventuellt "flimmer" som du säkert upplevt tidigare)
2, varje fps (dvs typ 25-35 gånger i sekunden) töms buffertern (tex målas helt svart) och allt ritas om från början. Tex börja med bakgrund och lägg sist på eventuella sprites.
När jag mekade med java för ungefär ett år sedan använde jag helt enkelt ett bildobject som buffert, och har för mig att jag skrev över programmets skärmutritningsprocedur till att bara rita buffertobjektet till skärmen.
I delphi brukar jag använda ett TBitmap eller ännu hellre TDIBUltra. (dessa använder jag direkt genom en kombination av asm och att läsa/skriva direkt till minnet.
I Direct X under delphi (med Delphi X) används directsurface som buffert.
Vad man använder i C/C++ har jag ingen aning om, men antagligen är det något liknande.
Teorin är helt enkelt att du skapar en bild lika stor som skärmen och ritar på den (börjar från noll varje gång) och sedan ritar ut denna bild på skärmen.
:)