/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Necesito saber todo sobre doble Buffer

 
      Índice del Foro elrincondelc.com -> Gráficos
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Che_Quique



Registrado: 25 Oct 2006
Mensajes: 52
Ubicación: Lanus Este Bs As Argentina

MensajePublicado: 07/06/2007 6:43 am
Título: Necesito saber todo sobre doble Buffer

Pregunto, una vez que entendiera como funciona doble buffer,
como se recuepra la imagen de fondo de un juego determinado?
como una variable mas, que se imprime por doble buffer
constantemente?

Si es posible, pasen ejemplo de la imprecion de una imagen pequeña
en movimiento y como se recupera la imagen de fondo.

Saludos.
_________________

"No experimentaremos una alegria miserable, sino una alegria que pertenecera a millones"

Che Quique.
Volver arriba
Killrazor



Registrado: 24 Ene 2006
Mensajes: 1182
Ubicación: Barcelona

MensajePublicado: 07/06/2007 7:31 am
Título:

Pero a ver, yo diria que aunque lo has comprendido, solo lo has hecho en teoria. Cada sistema grafico lo hace de una manera diferente. En los sistema de este siglo, es una funcion que llama a un mecanismo interno del API grafico, que a su vez activa este mecanismo dentro del hardware grafico. Para poner un ejemplo deberiamos hablar de assembler (o quizas algo peor) de targetas y la verdad como que no tngo ni idea.

En cambio, en sistemas del siglo pasado, los graficos iban en una zona de la memoria mapeada llamada memoria de video y lo que se hacia era un cambio de localizacion de puntero. Asi escribiamos en la zona oculta y mostrabamos la apuntada.

Y asi, con los datos que me das la verdad es que es lo unico que se me ocurre.
_________________
I wanna heal i wanna feel like I'm close to something real.
I wanna find something I've wanted all along
somewhere i belong
Volver arriba
Che_Quique



Registrado: 25 Oct 2006
Mensajes: 52
Ubicación: Lanus Este Bs As Argentina

MensajePublicado: 07/06/2007 8:26 am
Título: Doble buffer en Allegro

Me refiero a doble buffer con Allegro. Si tengo que usarlo para cada
variable grafica en movimiento, incluso para la imagen de fondo,
constantemente para que el mismo se recupere.

De todos modos creo que debo empezar con un solo ejemplo sobre
uan sola imagen, sobre una imagen de fondo y despues usar la teoria
de la relatividad. ja!
_________________

"No experimentaremos una alegria miserable, sino una alegria que pertenecera a millones"

Che Quique.
Volver arriba
nwg



Registrado: 09 Ago 2006
Mensajes: 40

MensajePublicado: 07/06/2007 8:38 am
Título:

El doble buffer lo que hace es almacenar la imagen en otro buffer que no sea la pantalla y cuando este listo se intercambia con la pantalla.

El doble buffer sirve para que no se vea el pestañeo constante en una animacion.

No se como es en Allegro pero al iniciar el modo de video deberias tener una llamada al doble buffer y despues en las cargas de imagenes o animaciones tambien deberia de haber una llamada para el intercambio del buffer a la pantalla.

Hace unos dias te deje un link a una pagina de juegos en otro post, te reitero que tambien tiene tutoriales de allegro donde explican todo eso, primero lee y relee esos tutoriales para poder entender estas cosas.

Saludos
Volver arriba
Che_Quique



Registrado: 25 Oct 2006
Mensajes: 52
Ubicación: Lanus Este Bs As Argentina

MensajePublicado: 07/06/2007 4:59 pm
Título: Si me acuerdo

Si me acuerdo nwg, loserjuegos, pero en este instante estoy imprimiendo
un turorial en castellano, excelente, elaborado por una universidad.

En cuanto este en carerra sigo preguntando, pero no viene mal
algun ejemplo comentado de doble buffer en allegro, le que lo sepa.

Saludos a todos y gracias.
_________________

"No experimentaremos una alegria miserable, sino una alegria que pertenecera a millones"

Che Quique.
Volver arriba
Che_Quique



Registrado: 25 Oct 2006
Mensajes: 52
Ubicación: Lanus Este Bs As Argentina

MensajePublicado: 08/06/2007 7:23 am
Título: Gracias de todos modos

Seguramente, no supe preguntar, por eso nadie me supo responder.

Segun la excelente introduccion de Allegro que tengo doble buffer es
la creacion de un solo bitmap que contiene a todos los bitmap en
aparente movimiento que se actualiza constantemente, llamado por el
temporizador varias veces por segundo y para que la imagen no titilee.

Es asi o me equivoco en algo? Si es asi, no es tan dificil como para
que algunos locos digan que para hacer un juego hay que saberse
a Pitagoras y Newton de memoria.

Recomiendo leer el tutorial de allegro que tengo yo, al principiante que
en c que rapidamente quiera entrar en el mundo de los videojuegos.

Que me lo pida por mail a
_________________

"No experimentaremos una alegria miserable, sino una alegria que pertenecera a millones"

Che Quique.
Volver arriba
Killrazor



Registrado: 24 Ene 2006
Mensajes: 1182
Ubicación: Barcelona

MensajePublicado: 08/06/2007 11:41 am
Título:

Es asi en 2D. Pero cuando hablan de bitmap se refieren a mapas de bits y no a bmps de windows. Se refieren a matrices de pixeles alojados en la memoria. En 3D es parecido al final, pero la idea es que los puntos se transforman para pasarlos a 2D. El problema de un juego viene con el 3D, por que requiere mucha matematica. Hacer un juego en 2D es sencillo si el juego es sencillo.
_________________
I wanna heal i wanna feel like I'm close to something real.
I wanna find something I've wanted all along
somewhere i belong
Volver arriba
Che_Quique



Registrado: 25 Oct 2006
Mensajes: 52
Ubicación: Lanus Este Bs As Argentina

MensajePublicado: 11/06/2007 9:42 am
Título: Necsito saber esto..............

Nesesitaria que alguien comente linea por linea este simple test de
manejo de auto:
---------------------------------------------------------------------------

#include <allegro.h>
#include "imageInfo.h"
volatile long speedCounter = 0;
void incrementSpeedCounter();
int main(int argc, char* argv[])
{
allegro_init();
install_keyboard();
install_timer();
install_int_ex(incrementSpeedCounter, BPS_TO_TIMER(60));
set_color_depth(16);
set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0);
BITMAP *image1;
BITMAP *bg;
BITMAP *buffer;
BITMAP *boom;
BITMAP *mine[4];
//cause im lazy Smile
for(int i=0;i<4;i++)
{
mine[i]=load_bitmap("mine.bmp",NULL);
}
buffer=create_bitmap(640,480);
image1=load_bitmap("square.bmp",NULL);
bg=load_bitmap("background.bmp",NULL);
boom=load_bitmap("boom.bmp",NULL);
image cImage1;
cImage1.xPos=2;
cImage1.yPos=426;
cImage1.bbLeft=cImage1.xPos;
cImage1.bbTop=cImage1.yPos;
cImage1.bbRight=(cImage1.xPos+image1->w);
cImage1.bbBottom=(cImage1.yPos+image1->h);
image mineCoords[4];
mineCoords[0].xPos=39;
mineCoords[0].yPos=426;
mineCoords[0].bbLeft=mineCoords[0].xPos;
mineCoords[0].bbTop=mineCoords[0].yPos;
mineCoords[0].bbRight=(mineCoords[0].xPos+mine[0]->h);
mineCoords[0].bbBottom=(mineCoords[0].yPos+mine[0]->w);
mineCoords[1].xPos=168;
mineCoords[1].yPos=404;
mineCoords[1].bbLeft=mineCoords[1].xPos;
mineCoords[1].bbTop=mineCoords[1].yPos;
mineCoords[1].bbRight=(mineCoords[1].xPos+mine[1]->h);
mineCoords[1].bbBottom=(mineCoords[1].yPos+mine[1]->w);
mineCoords[2].xPos=360;
mineCoords[2].yPos=426;
mineCoords[2].bbLeft=mineCoords[2].xPos;
mineCoords[2].bbTop=mineCoords[2].yPos;
mineCoords[2].bbRight=(mineCoords[2].xPos+mine[2]->h);
mineCoords[2].bbBottom=(mineCoords[2].yPos+mine[2]->w);
mineCoords[3].xPos=487;
mineCoords[3].yPos=404;
mineCoords[3].bbLeft=mineCoords[3].xPos;
mineCoords[3].bbTop=mineCoords[3].yPos;
mineCoords[3].bbRight=(mineCoords[3].xPos+mine[3]->h);
mineCoords[3].bbBottom=(mineCoords[3].yPos+mine[3]->w);


while(!key[KEY_ESC])
{

while(speedCounter>0)
{
if(key[KEY_UP])
{
cImage1.yPos--;
}
if(key[KEY_DOWN])
{
cImage1.yPos++;
}
if(key[KEY_LEFT])
{
cImage1.xPos--;
}
if(key[KEY_RIGHT])
{
cImage1.xPos++;
}

//Updating collison info
cImage1.bbLeft=cImage1.xPos;
cImage1.bbTop=cImage1.yPos;
cImage1.bbRight=(cImage1.xPos+image1->w);
cImage1.bbBottom=(cImage1.yPos+image1->h);
//To keep image from going off the road
if(cImage1.yPos<=397)
{
cImage1.yPos++;
}
if(cImage1.bbBottom>=435)
{
cImage1.yPos--;
}
if(cImage1.xPos<=0)
{
cImage1.xPos++;
}
//check to see if we made it to the end
if(cImage1.bbRight>=640)
{
textout_ex(screen,font,"You Won", 1, 1, 10,-1);
rest(200);
return 0;
}
for(int i=0;i<4;i++)
{
bool image1Collison=cImage1.checkCollision(mineCoords[i].bbLeft,mineCoords[i].bbRight,mineCoords[i].bbTop,mineCoords[i].bbBottom);
bool mineCollison=mineCoords[i].checkCollision(cImage1.bbLeft,cImage1.bbRight,cImage1.bbTop,cImage1.bbBottom);
if(image1Collison)
{
clear_bitmap(buffer);
blit(bg,buffer,0,0,0,0,640,480);
draw_sprite(buffer,boom,mineCoords[i].xPos,mineCoords[i].yPos);
blit(buffer,screen,0,0,0,0,640,480);
textout_ex(screen,font,"You Blew UP", 1, 1, 30,-1);
rest(2000);
return 0;
}
if(mineCollison)
{
clear_bitmap(buffer);
blit(bg,buffer,0,0,0,0,640,480);
draw_sprite(buffer,boom,mineCoords[i].xPos,mineCoords[i].yPos);
blit(buffer,screen,0,0,0,0,640,480);
textout_ex(screen,font,"You Blew UP", 1, 1, 30,-1);
rest(2000);
return 0;
}
}



speedCounter--;
}
acquire_screen();
blit(bg,buffer,0,0,0,0,640,480);
draw_sprite(buffer, image1, cImage1.xPos, cImage1.yPos);
for(int i=0;i<4;i++)
{
draw_sprite(buffer,mine[i],mineCoords[i].xPos,mineCoords[i].yPos);
}
blit(buffer, screen, 0,0,0,0,640,480);
clear_bitmap(buffer);
release_screen();
}
destroy_bitmap(image1);
for(int i=0;i<4;i++)
{
destroy_bitmap(mine[i]);
}
destroy_bitmap(bg);
destroy_bitmap(boom);
destroy_bitmap(buffer);
allegro_exit();
return 0;
}
END_OF_MAIN();
void incrementSpeedCounter()
{
speedCounter++;
}
END_OF_FUNCTION(incrementSpeedCounter);

-----------------------------------------------------------------------------

Por favor, que contiene imagen en movimiento y creo que doble buffer.

El que quiera todos los archivos del test que me lo pida.
_________________

"No experimentaremos una alegria miserable, sino una alegria que pertenecera a millones"

Che Quique.
Volver arriba
      Índice del Foro elrincondelc.com -> Gráficos
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com