Bonjour,
J'ai deux codes qui chacun de leur côté fonctionnent bien, j'essaie de les fusionner, et évidement plantage, je compile bien , il commence à s'exécuter mais ferme avec nomduprocess a cessé de fonctionner .... pas de access violation etc..
le premier code utilise la lib allegro pour générer un starfield , l'autre un scroll text avec allegro aussi,
j'ai a peu près réussi à localiser ce qui me génère le plantage, ce serait la fonction Draw_Sprite
draw_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y);
si quelqu'un peut m'aider, je peux faire passer les projets DEVC++ par mail , le C++ n'est pas mon premier langage ...
ma fonction main :
int main(int argc, char *argv[]) {
int framecount;
framecount=0;
allegro_init();
install_keyboard();
LOCK_VARIABLE(speed_counter);
LOCK_FUNCTION(increment_speed_counter);
install_int_ex(increment_speed_counter, BPS_TO_TIMER(60));
set_color_depth(8) ; // 8 bit colour
if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, screen_x, screen_y, 0, 0)<0)
{
//set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
set_gfx_mode(GFX_AUTODETECT_WINDOWED, screen_w, screen_h, 0, 0);
allegro_message("Failure to init video mode!\n%s\n", allegro_error);
exit(1); // force abort
}
off_screen = create_bitmap(screen_x, screen_y);
Init_Music();
Init_Font();
install_timer();
Play_Music();
srand(time(NULL));
Star star[maxstars];
while ((!key[KEY_ESC])&&(!key[KEY_SPACE]))
{
clear_bitmap(off_screen);
DrawString((framecount % 2550)-820,508,"TEST SCROLL LEFT TO RIGHT...NO SINUS EFFECT FIRST....");
framecount+=6;
vsync();
blit(off_screen, screen, 0, 0, 0, 0, screen_x, screen_y);
rest(1);
};
while(speed_counter > 0)
{
for(int i = 0; i < maxstars; ++i)
{
star[i].movestars();
}
speed_counter --;
}
draw_sprite(screen, buffer, 0, 0); // La fonction qui semble poser problème
destroy_bitmap(off_screen);
Kill_Music();
Kill_Font();
remove_timer();
return 0;
}
END_OF_MAIN();
J'ai donc la fonction DrawString qui va afficher le texte à l'écran, ( il y a une fonction drawcharacter qui récupère les lettres dans une fonte en .pcx) , et la fonction drawsprite pour génerer le starfield,
ensuite il y a une classe qui place les pixels en position start sur l'écran et qui effectue le mouvement en utilisant buffer :
Star::Star()
{
posx = (rand() % screen_w);
posy = (rand() % screen_h);
speed = (rand() % 5) + 1;
putpixel(buffer, posx, posy, makecol(255, 255, 255));
void Star::movestars()
{
putpixel(buffer, posx, posy, makecol(0, 0, 0));
posx -= speed;
if (posx <= 0)
{
posx = screen_w;
}
putpixel(buffer, posx, posy, makecol(255, 255, 255 ));
}
merci à vous