esta pregunta era mas conveniente que la hicieras en el foro de videojuegos.
Lo que te han dicho es cierto, ersulta que cuando estas dibujando en la pantalla, no estas dibujando directamente sobre ella, ya que la pantalla actualiza su contenido cada x cantidad de tiempo, este tiempo por lo general 60 veces por segundo, asi que si estas dibujando en la pantalla en el preciso instante que se esta haciendo el barrido de rayos, el resultado sera un parpadeo, puesto que adicional al refresco que ella hace, le estas obligando a dibujar en otra locacion.
Solucion:
Debes esperar a que pase el barrido de la pantalla, y luego si dibujar lo tuyo..como?
elaborar una funcion en assembler es una buena alternativa, o utilizar una rutina de c.
Por lo general no paso este codigo, puestio que me gusta motivar la investigacion, sin embargo lo voy a hacer esta vez:
código en C
void vsync_JK(void) //retrazado vertical
{
while(!((inportb(0x3DA) & 8)==8)); // Se esta haciendo barrido
while(!((inportb(0x3DA) & 8)==0)); // No se esta haciendo barrido
}
consulta que hace inportb en la documentaion libc, en este link hay una copia de libc si la quieres bajar, para que revices en este manual quie hace inportb..
http://juank-solocodigo.iespana.esPara el caso de turbo C puedes usar esto..aunque ahorita que probe no lo pude hacer en djgpp, asi que si alguien sabe...porfa.
esto es assembler en turbo C superior al 2.0, hace lo mismo pero es que assembler es mucho más optimizado:
void vsync_JK(void) //retrazado vertical
{
asm mov dx, 03DAh
espera1:
asm
{
in al, dx
test al, 08h
jnz espera1
}
espera2:
asm
{
in al, dx
test al, 08h
jz espera2
}
}
Justo antes de que vuelvas a dibujar en pantalla llamas a la funcion y listo...
claro que hay algo muy importante y es que esta es una tecnica basica, ai quieres algo más afectivo indaga acerca de la tecnica del doble buffer, page flipping o dirty rectangles, o incluso triple buffer.
Sin embargo esto que te pase en codigo ya no se usa porque hay librerias que ya las traen hechas como por ejemplo allegro..echale una ojeada al foro de videojuegos aca en solocodigo.
Es probable que tengas que configurar el compilador para que te compile assembler:
en compilador borland entra al menu
Options> Compiler> Advanced Code Generation > Instruction Set
y activa el soporte de instrucciones para 80286.
Suerte.