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#include <allegro.h>
#include "inicia.h"
#define ancho_pantalla 540
#define alto_pantalla 460
#define maxcols 37
#define maxfils 15
#define tope_mario (ancho_pantalla-37)/2
BITMAP *buffer;
BITMAP *save_buffer;
BITMAP *mario_buffer;
BITMAP *mario_parado;
BITMAP *mario_paradoI;
BITMAP *mario_caminar;
BITMAP *mario_caminarI;
BITMAP *mario_salta;
BITMAP *mario_saltaI;
BITMAP *cielo_dia;
BITMAP *piso_superficie;
BITMAP *montanna;
BITMAP *arbusto;
BITMAP *nube;
BITMAP *sorpresa;
BITMAP *sorp_buffer;
int ancho, alto, posx, posy, Estado, dir, contador, restador;
int cont,cont2,avance, veces=0;
char mapa[maxfils][maxcols]={
" ",
" ",
" ",
" ",
" N ",
" ",
" ",
" ",
" ",
" S ",
" ",
"M a M ",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
};
void Dibujar(){
if (dir == 1){
draw_sprite(buffer,mario_parado,posx,posy);
}
else{
draw_sprite(buffer,mario_paradoI,posx,posy);
}
}
void caminar(){
if (dir==1 and posx < tope_mario){
posx +=10;
}
else if(dir == -1 and posx >= 0){
posx -= 10;
}
}
void Saltar(int veces){
if(posy > 252 && veces < 10){
Estado = 2;
posy-=14;
}
else{
if(posy != 375){
Estado = 2;
posy+=14;
}
}
}
void Dibujar_accion(BITMAP *accion){
if (Estado == 1){
if (dir == 1){
if (contador < 5){
blit(accion,mario_buffer,contador*37,0,0,0,37,37);
draw_sprite(buffer,mario_buffer,posx,posy);
}
else{
contador = 0;
}
contador++;
}
else{
if (restador >= -2){
blit(accion,mario_buffer,restador*37,0,0,0,37,37);
draw_sprite(buffer,mario_buffer,posx,posy);
}
else{
restador = 2;
}
restador--;
}
}
else if(Estado == 2){
draw_sprite(buffer,accion,posx,posy);
}
}
void pantalla(){
blit(buffer, screen, 0, 0, 0, 0, ancho_pantalla, alto_pantalla);
}
void dibujar_mapa(int pos_X,int estado, int dir){
int x=-1,j,i,aux=0;
if (pos_X > tope_mario-40 && estado==1 && dir == 1){
avance+=10;
}
blit(cielo_dia,buffer,0,0,0,0,ancho_pantalla,alto_pantalla);
for ( i=0; i<=maxfils; i++){
for( j=0; j<=maxcols; j++){
if (x < maxcols)
{
x++;
}
else{
x=0;
}
if (mapa[i][j] == 'X'){
blit(piso_superficie,buffer,0,0,(x*34)-avance,i*34,2000,alto_pantalla);
}
else if(mapa[i][j] == 'M'){
masked_blit(montanna,buffer,0,0,(x*34)-avance,i*30,2000,alto_pantalla);
}
else if(mapa[i][j] == 'a'){
masked_blit(arbusto,buffer,0,0,(x*34)-avance,i*33,2000,alto_pantalla);
}
else if(mapa[i][j] == 'N'){
masked_blit(nube,buffer,0,0,(x*34)-avance,i*33,2000,alto_pantalla);
}
else if(mapa[i][j] == 'S'){
if (aux == 0) aux = x;
blit(sorpresa,sorp_buffer,cont2*32,0,0,0,32,32);
masked_blit(sorp_buffer,buffer,0,0,(aux*34)-avance,i*32,2000,alto_pantalla);
}
}
}
cont++;
if (cont == 2){
cont =0;
if (cont2 <2)
cont2++;
else
cont2 = 0;
}
}
//void gravedad(Personaje mario){
// while(posy != )
//}
int main()
{
inicia_allegro(ancho_pantalla,alto_pantalla);
inicia_audio(70,70);
dir = 1;
ancho = 37;
alto = 37;
posx = 0;
posy = 375;
contador = 0;
Estado = 0;
restador = 2;
cont = 0;
buffer = create_bitmap(ancho_pantalla, alto_pantalla);
save_buffer = create_bitmap(ancho_pantalla, alto_pantalla);
mario_buffer = create_bitmap(37,37);
mario_parado = load_bitmap("recursos/parado.bmp",NULL);
mario_paradoI = load_bitmap("recursos/parado_i.bmp",NULL);
mario_caminar = load_bitmap("recursos/caminar_adelante.bmp",NULL);
mario_caminarI = load_bitmap("recursos/caminar_atras.bmp",NULL);
mario_salta = load_bitmap("recursos/salta.bmp",NULL);
mario_saltaI = load_bitmap("recursos/salta_i.bmp",NULL);
cielo_dia = load_bitmap("recursos/cielo_dia.bmp",NULL);
piso_superficie = load_bitmap("recursos/piso_superficie.bmp",NULL);
montanna = load_bitmap("recursos/montanna.bmp",NULL);
arbusto = load_bitmap("recursos/arbusto.bmp",NULL);
nube = load_bitmap("recursos/nube.bmp",NULL);
sorpresa = load_bitmap("recursos/sorpresa.bmp",NULL);
sorp_buffer = create_bitmap(32,32);
while (!key[KEY_ESC]){
if (key[KEY_D]){
if(posy == 375){
dir = 1;
caminar();
Estado = 1;
}
else{
posy+=14;
Estado =2;
}
}
else if(key[KEY_A]){
if (posy == 375){
Estado = 1;
dir = -1;
caminar();
}
else{
posy+=14;
Estado = 2;
}
}
else if (key[KEY_W]){
Estado =2;
veces++;
Saltar(veces);
}
else if (keypressed){
if( posy != 375){
Estado == 2;
posy+=14;
}
else {
Estado = 0;
veces = 0;
}
}
// clear(buffer);
dibujar_mapa(posx,Estado,dir);
if (Estado == 0){
if (dir == 1){
Dibujar();
}
else{
Dibujar();
}
}
else if (Estado == 1){
if(dir == 1) Dibujar_accion(mario_caminar);
else Dibujar_accion(mario_caminarI);
}
else if (Estado == 2){
if (dir == 1) Dibujar_accion(mario_salta);
else Dibujar_accion(mario_saltaI);
}
// gravedad();
pantalla();
rest(70);
}
destroy_bitmap(buffer);
destroy_bitmap(mario_buffer);
destroy_bitmap(mario_caminar);
destroy_bitmap(mario_caminarI);
destroy_bitmap(mario_parado);
destroy_bitmap(mario_paradoI);
destroy_bitmap(cielo_dia);
return 0;
}
END_OF_MAIN();