andar + sprite sheet - SDL - SOLUCIONADO !!

Losersjuegos cuenta con una secciones de ejemplos en su web. Utilice esta sección para consultar o proponer ideas acerca de ellos.

andar + sprite sheet - SDL - SOLUCIONADO !!

Notapor d00ze » Dom Jun 05, 2011 3:16 pm

Estoy intentando hacer que a la vez que ande mi personaje sobre el escenario, se mueva a la vez el muñeco, lo tengo en un spritesheet.
Lo tengo mas o menos implementado pero me funciona fatal, me lo realiza muy rapido. Os dejo el codigo:

Edito: Esta solucionado en el ultimo post por si ha alguien le es de utilidad.

sprite.cpp
sprite::sprite(){
ando=0;
posx=0;
posy=0;
//partw -> ancho de cada imagen dentro del sprite sheet
partw=60;
parth=120; // alto de cada dibujo del sprite sheet
}
void sprite::andar(){
ando=1;
}
void sprite::parar(){
ando=0;
frame=0;
}
void sprite::avanzar(){
if(ando){
posx+=speedx;
if(frame<2)
frame++;
else{
frame=0;
}
}
}
void sprite::pintar(SDL_Surface *superficie){
SDL_Rect ori,dest;

dest.x=posx+partw;
dest.y=posy;

ori.x=partw*frame;
ori.y=0;
ori.w=partw;
ori.h=parth;

SDL_BlitSurface(img,&ori,superficie,&dest);
}

main.cpp
while(!done){
if(andando){
personaje.avanzar();
}
//...Eventos
//KEYDOWN
case SDLK_RIGHT:
personaje.andar();
andando=true;
break;
//KEYUP
case SDLK_RIGHT:
personaje.parar();
andando=false;
break;
Última edición por d00ze el Lun Jun 06, 2011 6:36 pm, editado 1 vez en total
d00ze
 
Mensajes: 10
Registrado: Sab Jun 04, 2011 7:43 pm

Re: andar + sprite sheet - SDL

Notapor d00ze » Dom Jun 05, 2011 3:30 pm

pretendo realizar lo siguiente
d00ze
 
Mensajes: 10
Registrado: Sab Jun 04, 2011 7:43 pm

Re: andar + sprite sheet - SDL - SOLUCIONADO!!

Notapor d00ze » Lun Jun 06, 2011 6:33 pm

Me autorespondo, la funcion la realiza pero se puede mejorar muchisimo mas, lo dejo de ejemplo por si a alguien le pudiera hacer falta.
Si ha alguien le interesa podria subir la clase entera o el main.

sprite.cpp
sprite::sprite(){
ando=0;
img=NULL; // Del tipo SDL_Surface
frame=1;
partes=7; //numero de muñecos en la fila dentro del sprite sheet
posx=0;
speedx=4;
}
void sprite::estado(char letter){
if(letter=='r')
ando=1;
}
void sprite::avanzar(){
if(ando){
if(frame<partes){
posx+=speedx;
frame++;
}
else{
frame=1;
//ando=0;
}
}
}
void sprite::parar(){
ando=0;
frame=1;
}
void sprite::pintar(SDL_Surface *superficie){
SDL_Rect ori,dest;

dest.x=posx;
dest.y=posy;

ori.x=partw*(frame-1);
ori.y=filah;
ori.w=partw;
ori.h=parth;

SDL_BlitSurface(img,&ori,superficie,&dest);
}


main.cpp
{
//main
LoadSprite();
while(!done){
DibujaSprite(ventana);

if(andando){
personaje.avanzar();
SDL_Delay(15);
}
//eventos
//KEYDOWN
case SDLK_RIGHT:
personaje.estado('r');
andando=true;
break;
//KEYUP
case SDLK_RIGHT:
andando=false;
personaje.parar();
break;
}
DeleteSprite();
}
d00ze
 
Mensajes: 10
Registrado: Sab Jun 04, 2011 7:43 pm


Volver a Ejemplos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado