Vous n'êtes pas identifié.
J'expose le problème :
Il y à un decors à afficher et un sprite qui peut se déplacer.
Donc voilà ce qui se passe :
_decors seul : affichage OK;
_sprite seul : affichage OK;
_les deux ensembles : affichage PAS OK;
Hors ligne
ben quand ya les deux la bmp ne s'affiche pas .
ou elle s'affichen mais presque pas visible .
faut peut etre vous montrer la source ?
Hors ligne
En fait quand on affiche les deux ensemble, le décors n'est plus visible correctement, ça devient tous moche, une bouillie de pixels en vracs (les salops :mrgreen: )
Hors ligne
envoi ton code ...
c la meilleure facon de trouV une reponse rapidement ... sinon on va jouer o devinettes pendant un mois ...
Hors ligne
voila pour le code :
#include <stdio.h>
#include <conio.h>
#include <db-lib.h>
#include <sprite.h>
#define GA 0
#define DR 1
#define BAS 2
#define HAUT 3
unsigned char marketcod1[]={
0, 0, 0, 0, 0, 96,255,255,255,255,255, 2, 0, 32, 0, 0,
0, 0, 0, 0, 0,192,193,255,255,255,255, 3, 0, 32, 0, 0,
0, 0, 0, 0, 0,248,255,255,255,255,127, 0, 0, 32, 0, 0,
0, 0, 0, 0, 0, 0,254,255,255,255, 31, 0, 0, 32, 0, 0,
0, 0, 0, 0, 0, 0,252,255,255, 31, 0, 0, 0, 32, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
240, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0,255,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0,128,255, 15, 0, 0, 0, 0, 0, 0, 0, 64, 0, 2,
0, 0, 0, 0, 0,240, 7, 0, 0, 0, 0, 0, 0, 64, 0, 3,
0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 64, 0, 3,
0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 64, 0, 3,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 64, 0, 3,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 64, 0, 3,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 7, 0, 64, 0, 3,
0, 0, 0, 0, 0, 0,128, 0, 0, 0,254, 4, 0, 64, 0, 3,
0, 0, 0, 0, 0, 0,128, 0, 0,240, 1, 3, 0, 64, 64, 3,
0, 0, 0, 0, 0, 0,128, 0, 0, 12, 0, 3, 0, 64, 64, 3,
0, 0, 0, 0, 0, 0,128, 0, 0, 4, 0, 2, 0, 64, 64, 3,
0, 0, 0, 0, 0, 0,128, 0, 0, 2, 0, 2, 0, 64, 64, 3,
0, 0, 0, 0, 0, 0,128, 0, 0, 2, 0, 2, 0, 64, 64, 3,
0, 0, 0, 0, 0, 0,128, 0, 0, 2, 0, 2, 0, 64,192, 3,
0, 0, 0, 0, 0, 0,128, 0, 0, 2, 0, 3, 0, 64,192, 3,
0, 0, 0, 0, 0, 0,128, 0, 0, 12,128, 0, 0, 64,192, 2,
0, 0, 0, 0, 0, 0,128, 0, 0, 48,192, 0, 0, 64,192, 2,
0, 0, 0, 0, 0, 0,128, 0, 0,192, 96, 0, 0, 64,192, 2,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 31, 0, 0, 64,192, 2,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 64,192, 2,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 64,192, 2,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 32,192, 2,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 32,192, 2,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 16,192, 4,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 8,192, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 4, 64, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 4, 64, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 2, 64, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 2, 64, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 2, 64, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 2, 64, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 1, 64, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 1, 64, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 1, 64, 0,
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,128, 0, 96, 0,
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,128, 0, 96, 0,
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 64, 0, 96, 0,
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 64, 0, 96, 0,
0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 32, 0, 32, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0};
unsigned char marketcod2[]={
0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 2, 0, 32, 0, 0,
0, 0, 0, 0, 0,192, 0, 0, 0, 0,128, 3, 0, 32, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 32, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 32, 0, 0,
0, 0, 0, 0, 0, 0,252,255,255, 31, 0, 0, 0, 32, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
240, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0,254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0,255,127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0,128,255, 15, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0,240, 7, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 7, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0,254, 4, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0,240, 1, 3, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 12, 0, 3, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 4, 0, 2, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 2, 0, 2, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 2, 0, 2, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 2, 0, 2, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 2, 0, 3, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 12,128, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 48,192, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0,192, 96, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 31, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 32, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 32, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 16, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 8, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 4, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 4, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 2, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 2, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 2, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 2, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,128, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,128, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 64, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 64, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 32, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
u_char CLADBAS[]= { 8,8, // Hauteur | Largeur sprite vers bas
1,25,102,255,102,255,1,25,3,3,3,3,3,3,3,3,0 };
u_char CLADHAUT[]= { 8,8, // Hauteur | Largeur sprite vers haut
192,192,192,192,192,192,192,192,128,152,102,255,102,255,128,152,0 };
u_char CLADGA[]= { 8,8, // Hauteur | Largeur sprite vers gauche
0,6,6,6,6,6,0,15,0,15,6,6,246,246,249,255,0 };
u_char CLADDR[]= { 8,8, // Hauteur | Largeur sprite vers droite
159,255,111,111,96,96,0,240,0,240,96,96,96,96,0,96,0 };
u_char *sprites_clad[]={CLADGA,CLADDR,CLADBAS,CLADHAUT};
void copypage(int source ,int target)//sa c une fct ke g trouV je C plu ou é ke g modifié p remplacer celle de DB-lib passke en c++ è march pa ... (je croi ki fo fer #extern C ou un truc kom sa ... mé bon cel la è march tré bien moi je fé avec sa
{
asm{ //Copy la page source a la page target - Superna //modif par moi(f4)
push ds
mov es,target
mov di,0
mov ds,source
mov si,0
cld
mov cx,512
rep movsw
pop ds
};
}
void refresh()
{
/* REFRESH: BUFFERS --> ECRAN: SEG2 --> SEG1
SEG4 --> SEG3 */
asm {
push ds
mov cx,0x1A60
mov ds,cx // adresse du premier buffer ( 0x1A60 ) dans ds
sub cx,0x40
mov es,cx // adresse de la premiere page video ( 0x1A20 ) dans es
xor di,di
xor si,si // di=si=0 : on commence au début des pages
mov cx,512 // il faut copier 512 mots
cld // incrémentation automatique de di et de si à chaque movsw
rep movsw // copie cx mots de ds:si a es:di ( premiere page )
add di,1024
add si,1024 // saute une page
mov cx,512 // remet le compteur à 512
rep movsw // copie la deuxieme page
pop ds
}
}
void clearbuff()
{
asm {
mov ax,0x1A60
mov es,ax // adresse du buffer dans es
xor di,di // on commence a 0
mov cx,512 // on copie 512 mots
xor ax,ax // valeur a copier ( 0 ) dans ax
cld // incrémentation automatique de di à chaque stosw
rep stosw // on copie cx fois le contenu de ax a l'adresse es:di ---> efface la 1ere page
add di,1024 // saute une page pour recommencer sur le 2eme buffer
mov cx,512 // on remet le compteur cx a 512
rep stosw // ---> efface la 2eme page
}
}
int sprite=0; // numero du sprite a afficher
int main()
{
int c,d; //coordonees du sprite
c=30;
d=25;
clear3(SEG1);
db_on(); //passe en mode DB,rŠgle le contraste
while(testkey(4,7)==0)
{
temps(150);
if(testkey(1,9)) //gauche
{
if (c>5) c--;
sprite=GA;
}
if (testkey(4,9)) //droite
{
if (c<120) c++;
sprite=DR;
}
if (testkey(2,9)) //haut
{
if (d>5) d--;
sprite=HAUT;
}
if (testkey(3,9)) //bas
{
if (d<60) d++;
sprite=BAS;
}
clearbuff();
disp_bmp(marketcod1,SEG1);
disp_bmp(marketcod2,SEG3);
drawsprite(c,d,sprites_clad[sprite]);
refresh;
}
db_off(); //sort du mode DB
return(0);
};
Hors ligne
En fait moi j'ai l'impression que le 'disp_bmp' n'est pas trés amis avec les 'clearbuff' et 'refresh', mais comment faire :?
Hors ligne
le pb vient avec le rafresh je crois , pk quand j'enleve le clearbuff c'est pareil pour le pb .
Hors ligne
essaye ça :
... disp_bmp(marketcod1,SEG1); disp_bmp(marketcod1,SEG2); disp_bmp(marketcod2,SEG3); disp_bmp(marketcod2,SEG4); ...
Hors ligne
disp_bmp(marketcod1,SEG1);
disp_bmp(marketcod2,SEG3);
Ca, c'est pour afficher sur l'écran (SEG 1 et 3).
Affiche ton truc sur les buffers (SEG 2 et 4), avant d'afficher ton perso et de faire un refresh, y'a des chances pour que ca soit plus "propre"...
disp_bmp(marketcod1,SEG2);
disp_bmp(marketcod2,SEG4);
Hors ligne
vais voir .
avec ton truc krach ya que la bmp qui s'affiche.
Hors ligne
bin la julien sa fait ecran blanc , rien n'apparait .
Hors ligne
t'es sur d'avoir laissé le refresh au moins?
Hors ligne
(et "refresh()" plutot que "refresh", c mieux.)
Hors ligne
lol, en effet, moi même je vais tester car j'ai les même problèmes
Hors ligne
Evidemment le double buffering et le mode DB c pas un truc évident à avaler qd on débute... vous pouviez pas commencer par un petit prog en C3 sans buffer comme tout le monde?
Hors ligne
dsl de bruler les etapes et merci de nous aider autant ...
heureusement pour vous j'ai plus msn lol
Hors ligne
ils ont meme pas fait le printf("Hello world !n); LOL :ptdr:
Hors ligne
si t'inquite pas sa je connais ainsi que scan et tout ce qui en suit ...
merci julien sa marche parfaitement , bon maintenant je crois connaitre assez de trucs en graph pour faire mon jeu , comme les fonctions principales pour les algorythmes ne sont pas si dur a utiliser je dis BANZAI !!
je remercis tous ceux du forums qui m'ont aidés , tous ceux que j'ai fait ch***
sur msn (ya pas d'autres mots) comme julien, huji , x-thunder , neo, casiomax dsl pour ceux que j'oublis
Hors ligne
Donc maintenant que tu as compris, ça donne quoi exactement cette fin de code?
Hors ligne
sa , faut mettre le buffers 2 et 4
pour "enregistrer" l'image au lieu de juste l'afficher a l'ecran .
clearbuff();
disp_bmp(marketcod1,SEG2);
disp_bmp(marketcod2,SEG4);
drawsprite(c,d,sprites_clad[sprite]);
refresh();
}
Hors ligne
Ba nan, ça fait des vieux clipping, c'est immonde. Pourtant j'utilise la même méthode
**********
Tu convertis tes BMP avec quel prog?
Quelle est ta fonction 'disp_bmp'?
Je suis quasiment sûre que l'erreur vient de là
Hors ligne
non ce qu'a écrit fantasy est correct, maintenant faut voir si ta fonction refresh() est la bonne... reessaie avec celle de son code.
Les problemes de "clipping" comme tu dis (qui n'en sont pas, le clipping c autre chose) sont liés au fait que tu dessines tes sprites et tes bmp n'importe ou. En général, on dessine toujours dans un buffer, et puis on appelle la fonction refresh qui envoie d'un coup le contenu du buffer à l'écran, et puis on efface le buffer, on redessine et on recommence.
Ici, puisque tu es en DB, l'écran est en SEG1 et SEG3. Le buffer le plus "naturel" que l'on choisit est généralement sur le SEG2 et le SEG4. Par dégaut, c'est là que drawsprite affiche les sprites, et la fonctio refresh fait une "copie" du SEG2 vers le SEG1 et du SEG4 vers le SEG3.
Donc quand tu affiches un bmp, il faut bien mettre chacune de ses couches sur le SEG2 et sur le SEG4.
Vola ca c'est pour la théorie, je crois que je l'ai assez répétée comme ca.
Si tu fais ca convenablement et que ca déconne, c que tes fonctions sont mauvaises ou mal adaptées.
Hors ligne
Je connais ces histoires de SEG, de buffers et d'écran, j'ai trés bien compris, de plus j'utilise la même fonction 'refresh();' que lui.
Sauf que j'ai remarqué que ces BMP n'étaient pas codées de la même façon que les mienne, je m'explique :
_les siennes :
unsigned char marketcod1[]={ 0, 0, 0, 0, 0, 96,255,255,255,255,255, 2, 0, 32, 0, 0, ...
_les miennes :
BMPTabType img21 = { 0xFF,0xFF,0xFF,0x7F,0x0,0x0,0x0,0x0,0xC8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, ...
Hors ligne
disp_bmp c'est avec db_lib .
Hors ligne