1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
#include <SDL/SDL.h>
#include "csprite.h"
// Sprite Class implementation
void CFrame::load(char *path) {
img=SDL_LoadBMP(path);
// Asignamos el color transparente al color rojo.
SDL_SetColorKey(img,SDL_SRCCOLORKEY|SDL_RLEACCEL, SDL_MapRGB(img->format,255,0,0));
img=SDL_DisplayFormat(img);
}
void CFrame::unload(){
SDL_FreeSurface(img);
}
CSprite::CSprite(int nf) {
sprite=new CFrame[nf];
nframes=nf;
cont=0;
}
CSprite::CSprite() {
int nf=1;
sprite=new CFrame[nf];
nframes=nf;
cont=0;
}
void CSprite::addframe(CFrame frame) {
if (cont<nframes) {
sprite[cont]=frame;
cont++;
}
}
void CSprite::selframe(int nf) {
if (nf<=nframes) {
estado=nf;
}
}
int CSprite::getx() {return posx;}
int CSprite::gety() {return posy;}
int CSprite::getw() {return sprite[estado].img->w;}
int CSprite::geth() {return sprite[estado].img->h;}
void CSprite::draw(SDL_Surface *superficie) {
SDL_Rect dest;
dest.x=posx;
dest.y=posy;
SDL_BlitSurface(sprite[estado].img,NULL,superficie,&dest);
}
int CSprite::colision(CSprite sp) {
int w1,h1,w2,h2,x1,y1,x2,y2;
w1=getw(); // ancho del sprite1
h1=geth(); // altura del sprite1
w2=sp.getw(); // ancho del sprite2
h2=sp.geth(); // alto del sprite2
x1=getx(); // pos. X del sprite1
y1=gety(); // pos. Y del sprite1
x2=sp.getx(); // pos. X del sprite2
y2=sp.gety(); // pos. Y del sprite2
if (((x1+w1)>x2)&&((y1+h1)>y2)&&((x2+w2)>x1)&&((y2+h2)>y1)) {
return TRUE;
} else {
return FALSE;
}
}
|