Ver Mensaje Individual
  #10 (permalink)  
Antiguo 22/11/2013, 15:56
josnoc
 
Fecha de Ingreso: noviembre-2013
Mensajes: 5
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: no funciona doble buffering en allegro con c++

Cita:
Iniciado por vosk Ver Mensaje
Ok, hace que no uso allegro4 y crei que me acordaba; acabo de revisarlo (pero no porque no me crea lo que dices amchacon :) ): bloquear solo para hacer mas de una operacion sobre la imagen.

Saludos y perdon por el error
vosk
Ntp y muchisisismas gracias por las respuestas ps lo que ha pasado es que sigue sin funcionar ayer no pude responder por que mi internet estuvo terrible :/ pero bueno ayer me di cuenta que el clear lo genera automáticamente la funcion que yo cree llamada dibujar_accion() no se por que, anexo mi codigo lo volví mejor estructurado y no poo :p no se por que pero aunque no tenga el clear(buffer) mi buffer se limpia solo :O gracias por las respuestas

Código C++:
Ver original
  1. #include <allegro.h>
  2. #include "inicia.h"
  3.  
  4. #define ancho_pantalla 540
  5. #define alto_pantalla 460
  6. #define maxcols 37
  7. #define maxfils 15
  8. #define tope_mario (ancho_pantalla-37)/2
  9.  
  10. BITMAP *buffer;
  11. BITMAP *save_buffer;
  12. BITMAP *mario_buffer;
  13. BITMAP *mario_parado;
  14. BITMAP *mario_paradoI;
  15. BITMAP *mario_caminar;
  16. BITMAP *mario_caminarI;
  17. BITMAP *mario_salta;
  18. BITMAP *mario_saltaI;
  19. BITMAP *cielo_dia;
  20. BITMAP *piso_superficie;
  21. BITMAP *montanna;
  22. BITMAP *arbusto;
  23. BITMAP *nube;
  24. BITMAP *sorpresa;
  25. BITMAP *sorp_buffer;
  26.  
  27. int ancho, alto, posx, posy, Estado, dir, contador, restador;
  28. int cont,cont2,avance, veces=0;
  29.  
  30. char mapa[maxfils][maxcols]={
  31.     "                                    ",
  32.     "                                    ",
  33.     "                                    ",
  34.     "                                    ",
  35.     "          N                         ",
  36.     "                                    ",
  37.     "                                    ",
  38.     "                                    ",
  39.     "                                    ",
  40.     "                   S                ",
  41.     "                                    ",
  42.     "M          a    M                   ",
  43.     "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  44.     "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  45. };
  46.  
  47. void Dibujar(){
  48.     if (dir == 1){
  49.         draw_sprite(buffer,mario_parado,posx,posy);
  50.     }
  51.     else{
  52.         draw_sprite(buffer,mario_paradoI,posx,posy);
  53.     }
  54. }
  55.  
  56. void caminar(){
  57.     if (dir==1 and posx < tope_mario){
  58.         posx +=10;
  59.     }
  60.     else if(dir == -1 and posx >= 0){
  61.         posx -= 10;
  62.     }
  63.  
  64. }
  65.  
  66. void Saltar(int veces){
  67.     if(posy > 252 && veces < 10){
  68.         Estado = 2;
  69.         posy-=14;
  70.     }
  71.     else{
  72.         if(posy != 375){
  73.             Estado = 2;
  74.             posy+=14;
  75.         }
  76.     }
  77. }
  78.  
  79. void Dibujar_accion(BITMAP *accion){
  80.     if (Estado == 1){
  81.         if (dir == 1){
  82.             if (contador < 5){
  83.                 blit(accion,mario_buffer,contador*37,0,0,0,37,37);
  84.                 draw_sprite(buffer,mario_buffer,posx,posy);
  85.             }
  86.             else{
  87.                 contador = 0;
  88.             }
  89.             contador++;
  90.         }
  91.         else{
  92.             if (restador >= -2){
  93.                 blit(accion,mario_buffer,restador*37,0,0,0,37,37);
  94.                 draw_sprite(buffer,mario_buffer,posx,posy);
  95.             }
  96.             else{
  97.                 restador = 2;
  98.             }
  99.             restador--;
  100.         }
  101.     }
  102.     else if(Estado == 2){
  103.         draw_sprite(buffer,accion,posx,posy);
  104.     }
  105. }
  106.  
  107. void pantalla(){
  108.     blit(buffer, screen, 0, 0, 0, 0, ancho_pantalla, alto_pantalla);
  109. }
  110.  
  111. void dibujar_mapa(int pos_X,int estado, int dir){
  112.     int x=-1,j,i,aux=0;
  113.  
  114.     if (pos_X > tope_mario-40 && estado==1 && dir == 1){
  115.         avance+=10;
  116.     }
  117.  
  118.     blit(cielo_dia,buffer,0,0,0,0,ancho_pantalla,alto_pantalla);
  119.     for ( i=0; i<=maxfils; i++){
  120.         for( j=0; j<=maxcols; j++){
  121.             if (x < maxcols)
  122.             {
  123.                 x++;
  124.             }
  125.             else{
  126.                 x=0;
  127.             }
  128.             if (mapa[i][j] == 'X'){
  129.                 blit(piso_superficie,buffer,0,0,(x*34)-avance,i*34,2000,alto_pantalla);
  130.             }
  131.             else if(mapa[i][j] == 'M'){
  132.                 masked_blit(montanna,buffer,0,0,(x*34)-avance,i*30,2000,alto_pantalla);
  133.             }
  134.             else if(mapa[i][j] == 'a'){
  135.                 masked_blit(arbusto,buffer,0,0,(x*34)-avance,i*33,2000,alto_pantalla);
  136.             }
  137.             else if(mapa[i][j] == 'N'){
  138.                 masked_blit(nube,buffer,0,0,(x*34)-avance,i*33,2000,alto_pantalla);
  139.             }
  140.             else if(mapa[i][j] == 'S'){
  141.                 if (aux == 0)   aux = x;
  142.                 blit(sorpresa,sorp_buffer,cont2*32,0,0,0,32,32);
  143.                 masked_blit(sorp_buffer,buffer,0,0,(aux*34)-avance,i*32,2000,alto_pantalla);
  144.             }
  145.         }
  146.     }
  147.     cont++;
  148.     if (cont == 2){
  149.         cont =0;
  150.         if (cont2 <2)
  151.             cont2++;
  152.         else
  153.             cont2 = 0;
  154.     }
  155. }
  156.  
  157. //void gravedad(Personaje mario){
  158. //    while(posy != )
  159. //}
  160.  
  161. int main()
  162. {
  163.     inicia_allegro(ancho_pantalla,alto_pantalla);
  164.     inicia_audio(70,70);
  165.  
  166.     dir = 1;
  167.     ancho = 37;
  168.     alto = 37;
  169.     posx = 0;
  170.     posy = 375;
  171.     contador = 0;
  172.     Estado = 0;
  173.     restador = 2;
  174.  
  175.     cont = 0;
  176.     buffer = create_bitmap(ancho_pantalla, alto_pantalla);
  177.     save_buffer = create_bitmap(ancho_pantalla, alto_pantalla);
  178.     mario_buffer = create_bitmap(37,37);
  179.     mario_parado = load_bitmap("recursos/parado.bmp",NULL);
  180.     mario_paradoI = load_bitmap("recursos/parado_i.bmp",NULL);
  181.     mario_caminar = load_bitmap("recursos/caminar_adelante.bmp",NULL);
  182.     mario_caminarI = load_bitmap("recursos/caminar_atras.bmp",NULL);
  183.     mario_salta = load_bitmap("recursos/salta.bmp",NULL);
  184.     mario_saltaI = load_bitmap("recursos/salta_i.bmp",NULL);
  185.     cielo_dia = load_bitmap("recursos/cielo_dia.bmp",NULL);
  186.     piso_superficie = load_bitmap("recursos/piso_superficie.bmp",NULL);
  187.     montanna = load_bitmap("recursos/montanna.bmp",NULL);
  188.     arbusto = load_bitmap("recursos/arbusto.bmp",NULL);
  189.     nube = load_bitmap("recursos/nube.bmp",NULL);
  190.     sorpresa = load_bitmap("recursos/sorpresa.bmp",NULL);
  191.     sorp_buffer = create_bitmap(32,32);
  192.  
  193.     while (!key[KEY_ESC]){
  194.         if (key[KEY_D]){
  195.             if(posy == 375){
  196.                 dir = 1;
  197.                 caminar();
  198.                 Estado = 1;
  199.             }
  200.             else{
  201.                 posy+=14;
  202.                 Estado =2;
  203.             }
  204.         }
  205.         else if(key[KEY_A]){
  206.             if (posy == 375){
  207.                 Estado = 1;
  208.                 dir = -1;
  209.                 caminar();
  210.             }
  211.             else{
  212.                 posy+=14;
  213.                 Estado = 2;
  214.             }
  215.         }
  216.         else if (key[KEY_W]){
  217.             Estado =2;
  218.                 veces++;
  219.             Saltar(veces);
  220.         }
  221.         else if (keypressed){
  222.             if( posy != 375){
  223.                 Estado == 2;
  224.                 posy+=14;
  225.             }
  226.             else {
  227.                 Estado = 0;
  228.                 veces = 0;
  229.             }
  230.         }
  231. //        clear(buffer);
  232.  
  233.         dibujar_mapa(posx,Estado,dir);
  234.         if (Estado == 0){
  235.             if (dir == 1){
  236.                 Dibujar();
  237.             }
  238.             else{
  239.                 Dibujar();
  240.             }
  241.         }
  242.         else if (Estado == 1){
  243.             if(dir == 1)  Dibujar_accion(mario_caminar);
  244.             else    Dibujar_accion(mario_caminarI);
  245.         }
  246.         else if (Estado == 2){
  247.             if (dir == 1) Dibujar_accion(mario_salta);
  248.             else    Dibujar_accion(mario_saltaI);
  249.         }
  250.  
  251. //        gravedad();
  252.         pantalla();
  253.         rest(70);
  254.     }
  255.  
  256.     destroy_bitmap(buffer);
  257.     destroy_bitmap(mario_buffer);
  258.     destroy_bitmap(mario_caminar);
  259.     destroy_bitmap(mario_caminarI);
  260.     destroy_bitmap(mario_parado);
  261.     destroy_bitmap(mario_paradoI);
  262.     destroy_bitmap(cielo_dia);
  263.  
  264.     return 0;
  265. }
  266. END_OF_MAIN();