Just to add to what has already been said...
There isn't just one 'screen' when you program in DB. There are two - the 2D screen and the 3D screen.
CLS clears the 2D screen. It has no effect on 3D sections of the screen.
Once you create any 3D objects, the DirectX 3D screen is initialised and the 2D screen is automatically overwritten whenever the 3D screen is updated. This update is at the system's discretion.
If you use 'Sync On' however, it tells DB to do the update when you tell it to - in other words when you issue the 'Sync' command.
So, you alter all the 3D object's positions in your Do..loop and put Sync as the last line inside the loop to synchronise the screen with all the changes in memory.
If you want to put text over the top of the 3D screen, you have a couple of options:
The first is to use the Set Camera View command to define a smaller 3D window - leaving a strip of the underlying 2D screen running across the top (or bottom) of the screen. CLS will then work on this strip - not the 3D window.
The second is to use the Text Command to place the text on top of the 3D window. As any Sync will automatically wipe the text off, the trick is to place the Text commands immediately AFTER the Sync.
That way, the text remains while your new 3D screen is re-calculated and the text is immediately replaced after the next Sync.
(The second method works for DBC, but I'm not sure about DBPro as it may have changed a little so that Sync doesn't wipe out text).
TDK_Man