Forum Graph100

Forum Graph100

Vous n'êtes pas identifié.

Annonce

Bonjour et bienvenue sur le nouveau Forum Graph100 !
L'intégralité des données a été transférée sur un forum PunBB et tout les comptes sont fonctionnels avec le même nom d'utilisateur et mot de passe.
Un wiki est aussi disponible avec le même compte ! N'oubliez pas de remettre votre avatar, bon surf !
Pour plus d'informations, consultez ce post.

#1 01 Jun 2002 11:16:16

casioworld
Programmeur Graph100
Lieu: Palaiseau (Essonne)
Date d'inscription: 08 Feb 2002
Messages: 1843
Site web

Comment afficher un SPrite borderl !!!

voila, je travaille sur l'adaptation de virtualBoxing en C (le moteur du jeu est fini) . Mais je ne sais pas affihcher un sprite. Alors je souhaiterais que quelqu'un m'explique par exemple le plus simple possible, comment afficher le sprites le simple qui puisse exister!
merci


- http://www.casioworld.wb.st  --> plus grande base de données pour Graph100+
- http://efreidelirium.free.fr --> vive l'EFREI mdr

Hors ligne

 

#2 01 Jun 2002 11:29:25

Superna
Ex-Trouvetou G100
Lieu: Sous Linux ^^
Date d'inscription: 01 Feb 2002
Messages: 2275
Site web

Re: Comment afficher un SPrite borderl !!!

G pas le temps, Deather, mail lui tes sources de Foot (les premieres) tu peut faire confiance a CasioWorld

Hors ligne

 

#3 01 Jun 2002 11:46:34

deather
Membre Communauté Graph100
Lieu: Banlieue parisienne (Fresnes)
Date d'inscription: 05 May 2002
Messages: 909

Re: Comment afficher un SPrite borderl !!!

bon je me demairderai pour ma fonction mé bon sa risk de prendre  du tps (jen suis a la 3ème ki marche pas  :?  :? ) pour afficher un sprite :
créé un table de type :

Code:

char <nom du sprite>[5][5] = {
{0,0,0,0,0},
{1,1,0,1,0},
{1,1,0,1,0},
{1,0,0,1,0},
{1,1,0,1,0}};

ensuite voila la routine :

Code:

drawsprite(x,y,page){ char i,j;
for(i=1;i<5;i++){
for(j=1;j<5;j++){
x++;
y++;
if(<nom du sprite>==1)setPix(x,y,0);
}
}
}

bon c bien posible ke yai des erreur mé bon... mail moa si ya un prob a+ \De@TheR//


..:: Deather ::..
deather.dede@gmail.com.NO.SPAM

Hors ligne

 

#4 01 Jun 2002 13:47:54

mastermage
Magicien G100
Lieu: Charleville-Mézières,Compiègne
Date d'inscription: 31 Jan 2002
Messages: 1008

Re: Comment afficher un SPrite borderl !!!

Voila, je suis pas totalement inactif... big_smile  big_smile  big_smile


En utilisant par exemple

Code:

unsigned char monsprite[8]={
0xAA, //10101010
0x55, //01010101
0xAA, //10101010
0x55, //01010101
0xFF, //11111111
0x00, //00000000
0xFF, //11111111
0x00}; //00000000

sprite8or(20,39,monsprite);

Voila vous compilez ca(le code ci-dessous) avec nasm (ne prenez que les fonctions necessaires...) pour en faire un .obj, et apres on peut le linker avec des programmes faits avec nasm ou turbo c(parce qu'il faut savoir que turbo c rajoute un "_" (sans les ") avant chaque nom, quand on ecrit  sprite8(...) turbo c ecrit _sprite8) voila pour les questions repondez au post.

ne vous inquietez pas pour la taille de la routine, c'est beaucoup lus rapide (meme si c'est pas optimisé).

les _specialLeft et les _SpecialRight sont a garder avec la routine principale, ils gerent les bord gauche et droite de l'ecran...

Code:

SEGMENT _TEXT class=CODE

GLOBAL _Sprite8
GLOBAL _Sprite8or
GLOBAL _Sprite8xor

GLOBAL _Sprite8_noclip
GLOBAL _Sprite8or_noclip
GLOBAL _Sprite8xor_noclip

;------------> Sprite8 <-----------
;Affiche le sprite8 à DS:SI
;DX=y CX=x
;registres détruits: AX,BX,CX,DX,SI,DI
;----------------------------------
;void Sprite8(int x,int y,void* spr);

_Sprite8:
    mov cx,[sp+2]
    mov dx,[sp+4]
    mov si,[sp+6]

Sprite8:
    mov di,1023
    mov bx,8

    cmp dx,0
    jge .clippedTop
    
    add si,dx
    add bx,dx
    xor dx,dx
    cmp bx,0
    jg .clippedy
    ret
.clippedTop:
    cmp dx,56
    jle .clippedy
    
    mov ax,dx
    sub ax,56
    sub bx,ax
    jg .clippedy
    ret
.clippedy:
    sub di,dx
    cmp cx,0
    jge .OKLeft
    jmp Sprite8_SpecialLeft
.OKLeft:
    cmp cx,120
    jl .OKRight
    jmp Sprite8_SpecialRight
.OKRight:
    sub di,64
    mov ax,cx
    and ax,0xfff8
    shl ax,3
    sub di,ax
    and cx,7
    mov dx,0
    sub dx,bx
    xor bx,bx
.loopdisplay:
    xor al,al
    or ah,0xff
    shr ax,cl
    and [es:di+bx],ah
    and [es:di+bx+64],al
    xor ah,ah
    lodsb
    xchg al,ah
    shr ax,cl
    or [es:di+bx],al
    or [es:di+bx+64],ah
    dec bx
    cmp bx,dx
    jne .loopdisplay
    ret
    
Sprite8_SpecialRight:
    cmp cx,128
    jl .OKclipped
    ret
.OKclipped:
    mov ax,cx
    and ax,0xfff8
    shl ax,3
    sub di,ax
    and cx,7
    mov dx,0
    sub dx,bx
    xor bx,bx
.loopdisplay:
    xor al,al
    or ah,0xff
    shr ax,cl
    and [es:di+bx],al
    xor ah,ah
    lodsb
    xchg al,ah
    shr ax,cl
    xor [es:di+bx],ah
    dec bx
    cmp bx,dx
    jne .loopdisplay
    ret

Sprite8_SpecialLeft:
    cmp cx,-8
    jg .OKclipped
    ret
.OKclipped:
    add cx,8
    and cx,7
    mov dx,0
    sub dx,bx
    xor bx,bx
.loopdisplay:
    xor al,al
    or ah,0xff
    shr ax,cl
    and [es:di+bx],ah
    xor ah,ah
    lodsb
    xchg al,ah
    shr ax,cl
    xor [es:di+bx],al
    dec bx
    cmp bx,dx
    jne .loopdisplay
    ret

;void Sprite8or(int x,int y,void* spr);

_Sprite8or:
    mov cx,[sp+2]
    mov dx,[sp+4]
    mov si,[sp+6]

Sprite8or:
    mov di,1023
    mov bx,8

    cmp dx,0
    jge .clippedTop
    
    add si,dx
    add bx,dx
    xor dx,dx
    cmp bx,0
    jg .clippedy
    ret
.clippedTop:
    cmp dx,56
    jle .clippedy
    
    mov ax,dx
    sub ax,56
    sub bx,ax
    jg .clippedy
    ret
.clippedy:
    sub di,dx
    cmp cx,0
    jge .OKLeft
    jmp Sprite8or_SpecialLeft
.OKLeft:
    cmp cx,120
    jl .OKRight
    jmp Sprite8or_SpecialRight
.OKRight:
    sub di,64
    mov ax,cx
    and ax,0xfff8
    shl ax,3
    sub di,ax
    and cx,7
    mov dx,0
    sub dx,bx
    xor bx,bx
.loopdisplay:
    xor ah,ah
    lodsb
    xchg al,ah
    shr ax,cl
    or [es:di+bx],al
    or [es:di+bx+64],ah
    dec bx
    cmp bx,dx
    jne .loopdisplay
    ret
    
Sprite8or_SpecialRight:
    cmp cx,128
    jl .OKclipped
    ret
.OKclipped:
    mov ax,cx
    and ax,0xfff8
    shl ax,3
    sub di,ax
    and cx,7
    mov dx,0
    sub dx,bx
    xor bx,bx
.loopdisplay:
    xor ah,ah
    lodsb
    xchg al,ah
    shr ax,cl
    xor [es:di+bx],ah
    dec bx
    cmp bx,dx
    jne .loopdisplay
    ret

Sprite8or_SpecialLeft:
    cmp cx,-8
    jg .OKclipped
    ret
.OKclipped:
    add cx,8
    and cx,7
    mov dx,0
    sub dx,bx
    xor bx,bx
.loopdisplay:
    xor ah,ah
    lodsb
    xchg al,ah
    shr ax,cl
    xor [es:di+bx],al
    dec bx
    cmp bx,dx
    jne .loopdisplay
    ret

;void Sprite8xor(int x,int y,void* spr);

_Sprite8xor:
    mov cx,[sp+2]
    mov dx,[sp+4]
    mov si,[sp+6]

Sprite8xor:
    mov di,1023
    mov bx,8

    cmp dx,0
    jge .clippedTop
    
    add si,dx
    add bx,dx
    xor dx,dx
    cmp bx,0
    jg .clippedy
    ret
.clippedTop:
    cmp dx,56
    jle .clippedy
    
    mov ax,dx
    sub ax,56
    sub bx,ax
    jg .clippedy
    ret
.clippedy:
    sub di,dx
    cmp cx,0
    jge .OKLeft
    jmp Sprite8xor_SpecialLeft
.OKLeft:
    cmp cx,120
    jl .OKRight
    jmp Sprite8xor_SpecialRight
.OKRight:
    sub di,64
    mov ax,cx
    and ax,0xfff8
    shl ax,3
    sub di,ax
    and cx,7
    mov dx,0
    sub dx,bx
    xor bx,bx
.loopdisplay:
    xor ah,ah
    lodsb
    xchg al,ah
    shr ax,cl
    or [es:di+bx],al
    or [es:di+bx+64],ah
    dec bx
    cmp bx,dx
    jne .loopdisplay
    ret
    
Sprite8xor_SpecialRight:
    cmp cx,128
    jl .OKclipped
    ret
.OKclipped:
    mov ax,cx
    and ax,0xfff8
    shl ax,3
    sub di,ax
    and cx,7
    mov dx,0
    sub dx,bx
    xor bx,bx
.loopdisplay:
    xor ah,ah
    lodsb
    xchg al,ah
    shr ax,cl
    xor [es:di+bx],ah
    dec bx
    cmp bx,dx
    jne .loopdisplay
    ret

Sprite8xor_SpecialLeft:
    cmp cx,-8
    jg .OKclipped
    ret
.OKclipped:
    add cx,8
    and cx,7
    mov dx,0
    sub dx,bx
    xor bx,bx
.loopdisplay:
    xor ah,ah
    lodsb
    xchg al,ah
    shr ax,cl
    xor [es:di+bx],al
    dec bx
    cmp bx,dx
    jne .loopdisplay
    ret

;-----------> Sprite8_noclip <-----------
;Pareil que Sprite8, mais ne gere pas le clipping
;Attention aux limites de l'ecran !!
;----------------------------------------
;void Sprite8_noclip(int x,int y,void* spr);

_Sprite8_noclip:
    mov cx,[sp+2]
    mov dx,[sp+4]
    mov si,[sp+6]

Sprite8_noclip:
    mov di,959 ;1023-64
    mov bx,8
    sub di,dx
    mov ax,cx
    and ax,0xfff8
    shl ax,3
    sub di,ax
    and cx,7
    mov dx,0
    sub dx,bx
    xor bx,bx
.loopdisplay:
    xor al,al
    or ah,0xff
    shr ax,cl
    and [es:di+bx],ah
    and [es:di+bx+64],al
    xor ah,ah
    lodsb
    xchg al,ah
    shr ax,cl
    or [es:di+bx],al
    or [es:di+bx+64],ah
    dec bx
    cmp bx,dx
    jne .loopdisplay
    ret

;void Sprite8or_noclip(int x,int y,void* spr);

_Sprite8or_noclip:
    mov cx,[sp+2]
    mov dx,[sp+4]
    mov si,[sp+6]

Sprite8or_noclip:
    mov di,959 ;1023-64
    mov bx,8
    sub di,dx
    mov ax,cx
    and ax,0xfff8
    shl ax,3
    sub di,ax
    and cx,7
    mov dx,0
    sub dx,bx
    xor bx,bx
.loopdisplay:
    xor ah,ah
    lodsb
    xchg al,ah
    shr ax,cl
    or [es:di+bx],al
    or [es:di+bx+64],ah
    dec bx
    cmp bx,dx
    jne .loopdisplay
    ret

;void Sprite8xor_noclip(int x,int y,void* spr);

_Sprite8xor_noclip:
    mov cx,[sp+2]
    mov dx,[sp+4]
    mov si,[sp+6]

Sprite8xor_noclip:
    mov di,959 ;1023-64
    mov bx,8
    sub di,dx
    mov ax,cx
    and ax,0xfff8
    shl ax,3
    sub di,ax
    and cx,7
    mov dx,0
    sub dx,bx
    xor bx,bx
.loopdisplay:
    xor ah,ah
    lodsb
    xchg al,ah
    shr ax,cl
    xor [es:di+bx],al
    xor [es:di+bx+64],ah
    dec bx
    cmp bx,dx
    jne .loopdisplay
    ret

Hors ligne

 

#5 02 Jun 2002 02:36:50

Guest
Invité

Re: Comment afficher un SPrite borderl !!!

j'ai voulu faire comme deather mais ca ne marche, j'ai rien à l'ecran:

#include <stdio.h>
#include <dos.h>
#include <bios.h>

void aff_pixel(unsigned short int x, unsigned short int y,char state)
    {
    asm push ax;
    asm push cx;
    asm push dx;
    asm mov cx,x;
    asm mov dx,y;
    asm mov ax,0x1A20;
    asm mov es,ax;
    asm mov al,state;
    asm mov si,0x003f;
    asm sub si,dx;
    asm sub cx,0x80;
    asm not cx;
    asm push cx;
    asm and cl,0xf8;
    asm shl cx,0x03;
    asm add si,cx;
    asm pop cx;
    asm and cl,0x07;
    asm mov ah,0xfe;
    asm rol ah,cl;
    asm and es:[si],ah;
    asm mov ah,al;
    asm rol ah,cl;
    asm or es:[si],ah;
    asm pop dx;
    asm pop cx;
    asm pop ax;
    }

char bombe[5][5] = {
{0,0,0,0,0},
{1,1,0,1,0},
{1,1,0,1,0},
{1,0,0,1,0},
{1,1,0,1,0}};

void drawsprite(x,y,image)
{char i,j;
for(i=1;i<5;i++){
for(j=1;j<5;j++){
x++;
y++;
if(image==1)aff_pixel(x,y,0);}}}

void main(void)
{
drawsprite(20,20,bombe);
getch();

exit();
}

pourtant je suis persuader de ne pas etre bien loin !!!

 

#6 02 Jun 2002 03:49:48

mastermage
Magicien G100
Lieu: Charleville-Mézières,Compiègne
Date d'inscription: 31 Jan 2002
Messages: 1008

Re: Comment afficher un SPrite borderl !!!

deja il faut ecrire ca:

Code:

void drawsprite(int x,int y,unsigned char image[][]) 
{
    char i,j; 
    for(i=0;i<5;i++)
    { 
        for(j=0;j<5;j++)
        { 
            aff_pixel(x+i,y+j,image[j][i]);
        }
    }
} 

perce que ta routine elle affichait un pixel blanc si "image" pointait vers le premier octet du programme, ce qui n'est pas vrai.

avec ce que je t'ai mis ca ira

Hors ligne

 

#7 02 Jun 2002 09:12:09

casioworld
Programmeur Graph100
Lieu: Palaiseau (Essonne)
Date d'inscription: 08 Feb 2002
Messages: 1843
Site web

Re: Comment afficher un SPrite borderl !!!

c'est bon, j'ai reussit à afficher mon sprite et meme un police de caractere (avec tes sources KTR).c'etait le fete ce matin (devant le match de l'argentine).
je n'ai qu'une chose à dire merci à vous tous !!!


- http://www.casioworld.wb.st  --> plus grande base de données pour Graph100+
- http://efreidelirium.free.fr --> vive l'EFREI mdr

Hors ligne

 

#8 02 Jun 2002 13:04:53

Superna
Ex-Trouvetou G100
Lieu: Sous Linux ^^
Date d'inscription: 01 Feb 2002
Messages: 2275
Site web

Re: Comment afficher un SPrite borderl !!!

C quopi cette routine de tapé de la tête Mastermege ?
roll  roll  roll

Hors ligne

 

#9 02 Jun 2002 15:15:26

casioworld
Programmeur Graph100
Lieu: Palaiseau (Essonne)
Date d'inscription: 08 Feb 2002
Messages: 1843
Site web

Re: Comment afficher un SPrite borderl !!!

pardon mais je n'ai rien compris !


- http://www.casioworld.wb.st  --> plus grande base de données pour Graph100+
- http://efreidelirium.free.fr --> vive l'EFREI mdr

Hors ligne

 

#10 02 Jun 2002 15:28:34

KTr
Haut fonctionnaire graph100.com
Lieu: Saint Etienne
Date d'inscription: 19 Mar 2002
Messages: 1909
Site web

Re: Comment afficher un SPrite borderl !!!

Mais c'est magnifik !!! Bravo, continu... c vrai ke mastermage va chercher compliké pour trois ligne de code en c franchement..


(¯`·.¸¸.·´¯`·.¸¸.-> www.ktr.fr.fm  ktr@fr.fm <-.¸¸.·´¯`·.¸¸.·´¯)

Hors ligne

 

#11 06 Jun 2002 09:47:11

Azor
Le Coté Obscur De La G100
Lieu: glop glop!
Date d'inscription: 04 May 2002
Messages: 5479
Site web

Re: Comment afficher un SPrite borderl !!!

au fait je fait un exec windows qui permet de convertir un sprite à dessiner soi-meme à un tableau qui permet d' afficher un sprite avec une fonction bien à moi.

Je le mettrais sur mon site quand les deux seront au point(le site et l' exec).

(le site c [url] www.thunderboom.ifrance.com
  ou aussi[url[ www.ifrance.com/thunderboom/
)

Allez @+[/url]


Anciennement X-thunder28
Cats shall rule teh world!

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr