Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - Puyover

#1
Hola a todos!

Bueno veréis, resulta que yo tengo este código, dentro de una función que controla la nave:

if(Nave.dstrect.x - 19 > 480) Nave.dstrect.x = 0;
else if(Nave.dstrect.x + 19 < 0) Nave.dstrect.x = 480; // No funciona
else if(Nave.dstrect.y - 19 > 272) Nave.dstrect.y = 0;
else if(Nave.dstrect.y + 19 < 0) Nave.dstrect.y = 272; // No funciona


El problema es que yo quiero que cuando la nave se meta por ejemplo por el lado izquierdo de la pantalla, aparezca por el derecho, pero lo único que consigo es que se pare en seco.

Las lineas con comentarios son las que deberían funcionar, y no lo hacen mientras que las demas si que funcionan -.-U

Al principio pense que era porque lo estaba haciendo para la psp, pero ejecutandolo en el pc, me pasa lo mismo. Por si sirve de ayuda, la configuración que estoy usando de video esta:

SDL_SetVideoMode(480, 272, 16, SDL_HWSURFACE | SDL_DOUBLEBUF);

Bueno, gracias y salu2!!

EDITO: Acabo de hacer una prueba moviendo 6 sprites al limite izquierdo y superior, y nada, se bloquean al llegar al final de la pantalla :(
#2
CRM32Pro / Problemas con la velocidad...
08 de Diciembre de 2007, 08:28:18 PM
Vaya asi que podría ser por los pngs...
Le pondré bmps mejor, porque le pase el exe a un amigo para ver que tal le iba y aun teniendo los fps limitados a 60 se le un numero de fps mu grande de 4 cifras que no podía ver por lo rapido que cambiaba xD

Salu2!!
#3
CRM32Pro / Problemas con la velocidad...
06 de Diciembre de 2007, 08:08:32 PM
Oka voy a hacer lo que dices a ver si sube un poco :S

Gracias de nuevo xD

EDITO: Perfecto. Me coje hasta 300 fps.

Muchas gracias por toda la ayuda!!
#4
CRM32Pro / Problemas con la velocidad...
06 de Diciembre de 2007, 07:38:11 PM
Pff madre mia esto me sigue yendo lento:

SE = new cMSSE;
   SE->Init("Acto_1");
   SE->SetRenderTarget(CRM32Pro.screen);
   SE->ImportImage(0, "mapa_fg.png", 32, 32);  
   SE->SetLayerStatus(0, SE_LAYERSTATUS_EXECUTE_SPEED);
   SE->SetLayerLoop(0, SE_LAYERLOOP_X);


Cargo el mapa con la funcion import, desde una imagen de 2048x640, para hacer un scroll de forma horizontal, pero me sigue funcionando a la misma velocidad (unos 40 fps) :S

Si alguien me pudiera decir que hago mal.

Grcias y salu2!
#5
CRM32Pro / Problemas con la velocidad...
06 de Diciembre de 2007, 05:58:49 PM
Perfecto.

Muchas gracias, ya me funcionan los ejemplos :D

Salu2!!!
#6
CRM32Pro / Problemas con la velocidad...
06 de Diciembre de 2007, 02:39:41 PM
Pues me gustaría poder usarlo pero ningun ejemplo me compila :S
Puse el archivo MSScrollEngine.lib en la carpeta lib del code blocks y aun asi me dice 'undefined reference to `cMSSE::cMSSE()' y asi con todas las funciones que hagan uso de ellas.

¿Me podrías decir que ide usas?

Gracias.
#7
CRM32Pro / Problemas con la velocidad...
05 de Diciembre de 2007, 09:34:07 PM
Hola a todos!

Bueno veréis estoy intentando mostrar un mapa de tiles de 32x32, de 64 tiles de ancho y 20 tiles de alto. Lo muestro en la función que se le pasa a SetRenderCallback(...) para luego poder hacer un scroll horizontal, ya que si muestro el mapa una vez, el scroll no funciona.

La cuestión es que lo hago así, y el juego me va a unos 43 ~ 45 frames, por lo que al mover el personaje, éste se mueve bastante lento.

Aquí os dejo el contenido de la función que renderiza todo en pantalla y la que muestra el mapa:

// Renderizado de los graficos
void RenderAll(int bLogicUpdate) {
   // Dibuja el mapa de tiles
   DibujarMapa();

   // Realiza los calculos de movimiento
   MoverTombi();
   if(Tombi.saltando) Saltar();

   // Funcion que dibuja a Tombi
   Koka.gfx->Draw();
   Tombi.gfx->Draw();

   // Muestra los frames por segundo
   ShowFPS();
}


// Dibuja los mapas segun convenga
void DibujarMapa() {
   short x, y;

   for(x = 0; x < 64; x++) {
    for(y = 0; y < 20; y++) {
        Level1.tile->SetPosition(x * TILE_SIZE, y * TILE_SIZE);
        Level1.tile->Draw(NULL, stage1[Level1.posY + y][Level1.posY + x]);
    }
}
}


Y por si acaso os dejo la estructura Map:

struct Map {
   CRM32Pro_CTile* tile;
   int posX, posY;
   int posX_off, posY_off;
} Level1;


Las variables posX_off y posY_off aun no las he usado xD.

Bueno salu2 y gracias!
#8
Programación gráfica / Problema con disparos en Blitz3D
12 de Septiembre de 2007, 11:21:15 AM
Mirad lo que he encontrado: http://www.sjbaker.org/steve/omniv/keyboards_are_evil.html

Simplemente he cambiado la tecla de disparo a la tecla 'S' y ya funciona perfectamente!

Gracias a todos y saludos!
#9
Programación gráfica / Problema con disparos en Blitz3D
09 de Septiembre de 2007, 02:47:20 AM
Se me habia olvidado decir que dispara hacia todas las direcciones excepto hacia esa en particular :S lo siento.

De todas formas si mientras te mueves en esa direccion intentas disparar, no lo hace, mientras que si te quedas quieto en esa direccion y disparas si que lo hace.

La verdad es que es un poco raro todo esto.
#10
Programación gráfica / Problema con disparos en Blitz3D
08 de Septiembre de 2007, 11:11:55 PM
Hola a todos!

Vereis estoy haciendo un juego tipo asteroids en Blitz3D y funciona todo perfectamente excepto un pequeño detalle: Si mientras me muevo en la direccion Abajo+Izquierdas y pulso la tecla disparar, la nave no dispara, solo lo hace si me quedo QUIETO en esa direccion :S

Os dejo el codigo de las funciones referentes al movimiento de la nave y las balas:

Citar
Function UpdateBullet()
   For Bala.BULLETS = Each BULLETS
      If Bala\Direccion = BABAJO_I Then
         Bala\Y = Bala\Y + Bala\Velocidad
         Bala\X = Bala\X - Bala\Velocidad
      ElseIf Bala\Direccion = BARRIBA_D Then
         Bala\Y = Bala\Y - Bala\Velocidad
         Bala\X = Bala\X + Bala\Velocidad
      ElseIf Bala\Direccion = BDERECHA_A Then
         Bala\Y = Bala\Y + Bala\Velocidad
         Bala\X = Bala\X + Bala\Velocidad
      ElseIf Bala\Direccion = BIZQUIERDA_A Then
         Bala\Y = Bala\Y - Bala\Velocidad
         Bala\X = Bala\X - Bala\Velocidad
      ElseIf Bala\Direccion = BARRIBA Then
         Bala\Y = Bala\Y - Bala\Velocidad
      ElseIf Bala\Direccion = BDERECHA Then
         Bala\X = Bala\X + Bala\Velocidad
      ElseIf Bala\Direccion = BABAJO Then
         Bala\Y = Bala\Y + Bala\Velocidad
      ElseIf Bala\Direccion = BIZQUIERDA Then
         Bala\X = Bala\X - Bala\Velocidad
      EndIf
      
      DrawImage(Bala\Grafico, Bala\X, Bala\Y, 0)
      
      If Bala\X > X_Final Then
         Delete Bala
      ElseIf Bala\X < X_Inicial Then
         Delete Bala
      ElseIf Bala\Y > Y_Final Then
         Delete Bala
      ElseIf Bala\Y < Y_Inicial Then
         Delete Bala
      EndIf
      
      For rock.ASTEROIDE = Each ASTEROIDE ;Recorremos todos los asteroides
         If Bala <> Null Then ;Si la Bala existe entonces...
            If ImagesCollide(Bala\Grafico, Bala\X, Bala\Y, 0, rock\Grafico, rock\X, rock\Y, 0) Then               
               PlaySound sndExplosion
               Explosionar(rock\X, rock\Y)
               Colision = 1
               rock\NivelHP = rock\NivelHP + 1
               rX = rock\X: rY = rock\Y
               Delete Bala
               If rock\NivelHP > 7 Then
                  Asteroides_Destruidos = Asteroides_Destruidos + 1
                  Delete rock
               EndIf
            EndIf
         EndIf
      Next
   Next
End Function

Citar
Function Disparar()
   Municion = Municion + 1
   PlaySound sndDisparo
   Bala.BULLETS = New BULLETS
   Bala\Grafico = LoadAnimImage("gfx/SpriteSheet.png", 64, 64, 8, 8)
   Bala\X = ship\X
   Bala\Y = ship\Y
   Bala\Velocidad = 4
   MaskImage Bala\Grafico, 255, 0, 255
   HandleImage Bala\Grafico, 2, 3
   
   If ship\Direccion = ARRIBA_D Then Bala\Direccion = BARRIBA_D
   If ship\Direccion = IZQUIERDA_A Then Bala\Direccion = BIZQUIERDA_A
   If ship\Direccion = DERECHA_A Then Bala\Direccion = BDERECHA_A
   If ship\Direccion = ABAJO_I Then Bala\Direccion = BABAJO_I
   If ship\Direccion = ARRIBA Then Bala\Direccion = BARRIBA
   If ship\Direccion = DERECHA Then Bala\Direccion = BDERECHA
   If ship\Direccion = ABAJO Then Bala\Direccion = BABAJO
   If ship\Direccion = IZQUIERDA Then Bala\Direccion = BIZQUIERDA
End Function

Citar
Function MoverNave()
   If KeyDown(DUP) And KeyDown(DRIGHT) Then
      ship\Y = ship\Y - ship\Velocidad ;...Si se pulsa arriba y derecha entonces...
      ship\X = ship\X + ship\Velocidad
      ship\Direccion = ARRIBA_D
   
   ElseIf KeyDown(DLEFT) And KeyDown(DUP) Then
      ship\Direccion = IZQUIERDA_A
      ship\Y = ship\Y - ship\Velocidad ;...Si se pulsa izquierda y arriba entonces...
      ship\X = ship\X - ship\Velocidad
      
   ElseIf KeyDown(DRIGHT) And KeyDown(DDOWN) Then
      ship\X = ship\X + ship\Velocidad ;...Si se pulsa derecha y abajo entonces...
      ship\Y = ship\Y + ship\Velocidad
      ship\Direccion = DERECHA_A
      
   ElseIf KeyDown(DDOWN) And KeyDown(DLEFT) Then
      ship\Y = ship\Y + ship\Velocidad ;...Si se pulsa abajo e izquierda entonces...
      ship\X = ship\X - ship\Velocidad
      ship\Direccion = ABAJO_I
   
   ElseIf KeyDown(DUP) Then
      ship\Y = ship\Y - ship\Velocidad ;...Si se pulsa arriba entonces...
      ship\Direccion = ARRIBA
   
   ElseIf KeyDown(DRIGHT) Then
      ship\X = ship\X + ship\Velocidad ;...Si se pulsa derecha entonces...
      ship\Direccion = DERECHA
   
   ElseIf KeyDown(DDOWN) Then
      ship\Y = ship\Y + ship\Velocidad ;...Si se pulsa abajo entonces...
      ship\Direccion = ABAJO
      
   ElseIf KeyDown(DLEFT) Then
      ship\X = ship\X - ship\Velocidad ;...Si se pulsa izquierda entonces...
      ship\Direccion = IZQUIERDA
   EndIf
   
   If ship\Y < Y_Inicial Then ship\Y = Y_Final
   If ship\Y > Y_Final Then ship\Y = Y_Inicial
   If ship\X < X_Inicial Then ship\X = X_Final
   If ship\X > X_Final Then ship\X = X_Inicial
   
   If KeyHit(57) Then Disparar()
   
   DrawImage ship\Grafico, ship\X, ship\Y, ship\Direccion
End Function

En fin, gracias adelantadas por vuestra ayuda!
#11
CRM32Pro / Colisiones con tiles, en un tileset.
10 de Marzo de 2007, 03:21:30 PM
Ha! Ya he conseguido cargar los tiles. Lo que pasaba era que cargaba la imagen, y la matriz la dejaba ahí suelta. Vale ahora el problema es que sigue sin colisionar nada  :(

const short Pradera_map0[30][40] = { valores }

void DrawMap(void) {
   for(Pradera.posY = 0; Pradera.posY < 30; Pradera.posY++) {
    for(Pradera.posX = 0; Pradera.posX < 40; Pradera.posX++) {
        Pradera.tile->SetPosition(Pradera.posY * 32, Pradera.posX * 32);
        Pradera.tile->Draw(NULL, Pradera_map0[Pradera.posX][Pradera.posY]);
        Pradera.tile->Draw(NULL, Pradera_map1[Pradera.posX][Pradera.posY]);
    }
}
}


void PJHandler(void) {
   for(Link.bucle = 0; Link.bucle < 4; Link.bucle++){
       Link.toca[Link.bucle] = 0;
   }
// Realizamos un mapeado del teclado
   keyboard = SDL_GetKeyState(NULL);

   Link.posX = Link.lastX;
   Link.posY = Link.lastY;

// Comprobamos los movimientos de Link y las colisiones
   if(keyboard[SDLK_UP]) {
       Link.GFX->SelectAnim(SPRSTATE_UP);
       Link.GFX->Resume();
       Link.lastY -= Link.velY;
   }
   if(keyboard[SDLK_LEFT]) {
       Link.GFX->SelectAnim(SPRSTATE_LEFT);
       Link.GFX->Resume();
       Link.lastX -= Link.velX;
   }
   if(keyboard[SDLK_RIGHT]) {
       Link.GFX->SelectAnim(SPRSTATE_RIGHT);
       Link.GFX->Resume();
       Link.lastX += Link.velX;
   }
   if(keyboard[SDLK_DOWN]) {
       Link.GFX->SelectAnim(SPRSTATE_DOWN);
       Link.GFX->Resume();
       Link.lastY += Link.velY;
   }
   if(!keyboard[SDLK_UP] && !keyboard[SDLK_DOWN] && !keyboard[SDLK_LEFT]  && !keyboard[SDLK_RIGHT]) {
       Link.GFX->Pause();
       Link.GFX->SelectFrame(0);
   }

   Link.tX = Link.lastX / 32;
   Link.tY = Link.lastY / 32;
   Link.tX2 = (Link.lastX + 80) / 32;
   Link.tY2 = (Link.lastY + 80) / 32;

   Link.toca[0] == Pradera_map0[Link.tX][Link.tY];
   Link.toca[1] == Pradera_map0[Link.tX2][Link.tY];
   Link.toca[2] == Pradera_map0[Link.tX][Link.tY2];
   Link.toca[3] == Pradera_map0[Link.tX2][Link.tY2];

   if(Pradera_map0[Link.tY][Link.tX] == 1) Link.libre = true;

   for(Link.bucle = 0; Link.bucle < 4; Link.bucle++){
       if(Link.toca[Link.bucle] == 1) Link.libre = true;
   }

   if(Link.libre == true) {
       Link.GFX->SetPosition(Link.lastX, Link.lastY, 0);
   } else {
       Link.posX = Link.lastX;
       Link.posY = Link.lastY;
   }
}


Creo que ya casi esta hecho, pero hay un error y no me doy cuenta...
Una cosa: a DrawMap() solo la llamo una vez, en el main, sin entrar en bucle ni nada. Es que si la meto en el rendercallback, el juego me funciona MUY lento.

Salu2!!
#12
CRM32Pro / Colisiones con tiles, en un tileset.
10 de Marzo de 2007, 03:45:35 AM
Vale he acoplado el sistema que me ha dado a mi juego, y he pasado un mapa hecho con mappy a .h

int Pradera_map[30][40] = { todos los valores }

void DrawMap(void) {
// Dibujamos el mapa
   for(Pradera.posY = 0; Pradera.posY < 30; Pradera.posY++) {
    for(Pradera.posX = 0; Pradera.posX < 40; Pradera.posX++) {
        Pradera_map[Pradera.posY][Pradera.posX] = (Pradera.posY * 40) + Pradera.posX;
        Pradera.GFX->SetPosition(Pradera.posX * 32, Pradera.posY * 32);
        Pradera.GFX->Draw(NULL, Pradera_map[Pradera.posY][Pradera.posX] + 1);
    }
}
}

.....

   Link.tX = Link.lastX / 32;
   Link.tY = Link.lastY / 32;
   Link.tX2 = (Link.lastX + 70) / 32;
   Link.tY2 = (Link.lastY + 70) / 32;

   Link.toca[0] == Pradera_map[Link.tY][Link.tX];
   Link.toca[1] == Pradera_map[Link.tY][Link.tX2];
   Link.toca[2] == Pradera_map[Link.tY2][Link.tX];
   Link.toca[3] == Pradera_map[Link.tY2][Link.tY2];

   for(Link.bucle = 0; Link.bucle < 4; Link.bucle++){
       if(Link.toca[Link.bucle] != 1) Link.libre = 1;
   }

   if(Link.libre == 0){
       Link.GFX->SetPosition(Link.lastX, Link.lastY, 0);
   } else {
       Link.posX = Link.lastX;
       Link.posY = Link.lastY;
   }
.....


No se si influirá que mi sprite sea de 80x80. La cosa es que ahora se supone que debería de colisionar con cualquier tile que no sea 1, ya que el 1 es por donde se puede andar. Tampoco sé si he acoplado bien la matriz al mapa .png, ya que no puedo comprobarlo...

Muchas gracias por la ayuda y siento ponerme tan pesado :oops:
#13
CRM32Pro / Colisiones con tiles, en un tileset.
09 de Marzo de 2007, 10:03:05 PM
Nada que no lo consigo xD.
He creado estructuras para Sprites y Mapas para que este todo mas organizado.

Aquí os dejo el nuevo código:


// Cargamos el mapa e inicializamos sus variables
   Pradera.GFX = new CRM32Pro_CTile();
   Pradera.GFX->Load(TILESET_RESOURCE, "Pradera");
   Pradera.GFX_collision_old = new CRM32Pro_CTile();
   Pradera.GFX_collision_old->Load(TILESET_RESOURCE, "Pradera_Mask");
   Pradera.GFX_collision_new = Pradera.GFX_collision_old->GetSurface();
   Pradera.offset.x = 0;
   Pradera.offset.y = 0;
   Pradera.offset.w = 1280;
   Pradera.offset.h = 980;

// Cargamos los sprites e incicializamos sus variables
   Link.GFX = new CRM32Pro_CSprite();
   Link.GFX->Load(SPRITES_RESOURCE, "Link");
   Link.posX = 400;
   Link.posY = 300;
   Link.velX = 3;
   Link.velY = 3;
   Link.GFX->SetPosition(Link.posX, Link.posY);

//Renderizamos los graficos, con la funcion de retrollamada
   CRM32Pro.SetRenderCallback(RenderGraphics);
   DrawMap();

...

void RenderGraphics(int bLogicUpdate) {
   PJHandler();
   Link.GFX->Draw();
}

void DrawMap(void) {
// Dibujamos el mapa
   for(Pradera.posY = 0; Pradera.posY < 30; Pradera.posY++) {
    for(Pradera.posX = 0; Pradera.posX < 40; Pradera.posX++) {
        Pradera.tX = Pradera.posX * 32;
        Pradera.tY = Pradera.posY * 32;
        Pradera.tile[Pradera.posY * Pradera.posX] = (Pradera.posY * 40) + Pradera.posX;
        Pradera.GFX->SetPosition(Pradera.tX, Pradera.tY);
        Pradera.GFX->Draw(CRM32Pro.screen, Pradera.tile[Pradera.posY * Pradera.posX] + 1);
    }
}
}

void PJHandler(void) {
// Realizamos un mapeado del teclado
   keyboard = SDL_GetKeyState(NULL);

// Reiniciamos la animación del personaje
   Link.GFX->Resume();

   Link.lastX = Link.posX;
   Link.lastY = Link.posY;

// Comprobamos los movimientos de Link y las colisiones
   if(keyboard[SDLK_UP]) {
       if(!Link.GFX->Collision(Pradera.GFX_collision_new, &Pradera.offset)) {
       Link.posY -= Link.velY;
       }
       Link.GFX->SetPosition(Link.posX, Link.posY);
       Link.GFX->SelectAnim(SPRSTATE_UP);
   } else if(Link.GFX->GetAnim() == SPRSTATE_UP) { Link.GFX->SelectFrame(0); Link.GFX->Pause(); }

   if(keyboard[SDLK_LEFT]) {
       if(!Link.GFX->Collision(Pradera.GFX_collision_new, &Pradera.offset)) {
       Link.posX -= Link.velX;
       }
       Link.GFX->SetPosition(Link.posX, Link.posY);
       Link.GFX->SelectAnim(SPRSTATE_LEFT);
   } else if(Link.GFX->GetAnim() == SPRSTATE_LEFT) { Link.GFX->SelectFrame(4); Link.GFX->Pause(); }

   if(keyboard[SDLK_RIGHT]) {
       if(!Link.GFX->Collision(Pradera.GFX_collision_new, &Pradera.offset))
           Link.posX += Link.velX;
       Link.GFX->SetPosition(Link.posX, Link.posY);
       Link.GFX->SelectAnim(SPRSTATE_RIGHT);
   } else if(Link.GFX->GetAnim() == SPRSTATE_RIGHT) { Link.GFX->SelectFrame(0); Link.GFX->Pause(); }

   if(keyboard[SDLK_DOWN]) {
       if(!Link.GFX->Collision(Pradera.GFX_collision_new, &Pradera.offset))
           Link.posY += Link.velY;
       Link.GFX->SetPosition(Link.posX, Link.posY);
       Link.GFX->SelectAnim(SPRSTATE_DOWN);
   } else if(Link.GFX->GetAnim() == SPRSTATE_DOWN) { Link.GFX->SelectFrame(0); Link.GFX->Pause(); }
}


Pfff, la cuestión es que lo suyo sería almacenar la posición anterior del PJ, pero no se como hacerlo...

Bueno pues a ver si me podeís ayudar.

Salu2 y graciasss!!
#14
CRM32Pro / Colisiones con tiles, en un tileset.
07 de Marzo de 2007, 09:39:54 PM
Oki muchas gracias. Ya miraré esto con mas detenimiento, porque esta semana la tengo plagada de examenes y no tengo tiempo para nada.

En fin, saludos y gracias!!
#15
CRM32Pro / Colisiones con tiles, en un tileset.
06 de Marzo de 2007, 05:33:02 PM
Hola a todos!

Siento molestar tanto, pero llevo ya un buen rato, intentando que el protagonista de mi "juego", al colisionar con un objeto, como un arbol o una piedra, se pare y no avance mas. El método que yo utilizo es el de tener todos los terrenos por los que el muñeco puede pasar en un tileset, y en otro tileset, tengo los elementos con los que colisiona.

Aquí os dejo el código:


// Cargamos el mapa
   Pradera = new CRM32Pro_CTile();
   Pradera_col = new CRM32Pro_CTile();
   Pradera->Load(TILESET_RESOURCE, "Pradera");
   Pradera_col->Load(TILESET_RESOURCE, "Pradera_col");
   Pradera_col_sur = Pradera_col->GetSurface();

// Propiedades de cada tile
   offset.x = Pradera_col->GetPosX()-7;
   offset.y = Pradera_col->GetPosY()-7;
   offset.w = Pradera_col->GetSizeX();
   offset.h = Pradera_col->GetSizeY();
............................................................................................
while(!done) {
       PJHandler();
// Bucle de eventos, para salir del programa
       while(CRM32Pro.Update(&event)) {
           switch(event.type) {
               case SDL_KEYDOWN:
                   if(event.key.keysym.sym == SDLK_ESCAPE) done = 1;
                   break;
               case SDL_QUIT:
                   done = 1;
                   break;
           }
       }
   }
............................................................................................
/** FUNCION DE MANEJO DEL PROTAGONISTA **/
void PJHandler(void) {
// Realizamos un mapeado del teclado
   keyboard = SDL_GetKeyState(NULL);

// Resumimos la animacion del sprite
   Link->Resume();

// Comprobamos los movimientos de Link
   if(keyboard[SDLK_UP]) {
       Link->SelectAnim(SPRSTATE_UP);
       spr_posX = Link->GetPosX();
       spr_posY = Link->GetPosY() - spr_velY;
       Link->SetPosition(spr_posX, spr_posY);
       if(Link->Collision(Pradera_col_sur, &offset)) Link->SetPosition(spr_posX, spr_posY + spr_velX);
   } else if(Link->GetAnim() == SPRSTATE_UP) { Link->SelectFrame(7); Link->Pause(); }

   if(keyboard[SDLK_LEFT]) {
       Link->SelectAnim(SPRSTATE_LEFT);
       spr_posX = Link->GetPosX() - spr_velX;
       spr_posY = Link->GetPosY();
       Link->SetPosition(spr_posX, spr_posY);
       if(Link->Collision(Pradera_col_sur, &offset)) Link->SetPosition(spr_posX + spr_velX, spr_posY);
   } else if(Link->GetAnim() == SPRSTATE_LEFT) { Link->SelectFrame(0); Link->Pause(); }

   if(keyboard[SDLK_RIGHT]) {
       Link->SelectAnim(SPRSTATE_RIGHT);
       spr_posX = Link->GetPosX() + spr_velX;
       spr_posY = Link->GetPosY();
       Link->SetPosition(spr_posX, spr_posY);
       if(Link->Collision(Pradera_col_sur, &offset)) Link->SetPosition(spr_posX - spr_velX, spr_posY);
   } else if(Link->GetAnim() == SPRSTATE_RIGHT) { Link->SelectFrame(7); Link->Pause(); }

   if(keyboard[SDLK_DOWN]) {
       Link->SelectAnim(SPRSTATE_DOWN);
       spr_posX = Link->GetPosX();
       spr_posY = Link->GetPosY() + spr_velY;
       Link->SetPosition(spr_posX, spr_posY);
       if(Link->Collision(Pradera_col_sur, &offset)) Link->SetPosition(spr_posX, spr_posY - spr_velY);
   } else if(Link->GetAnim() == SPRSTATE_DOWN) { Link->SelectFrame(0); Link->Pause(); }
}


La cuestión es que el protagonista se para, pero luego ya no puedo salir de ahí; es como si se quedara bloqueado... y otra cosa es que el juego se mueve muy lento. el bucle para recorrer todos los tiles del tileset y que los dibuje está en una función, a la que llamo con SetRenderCallback(...);

En fin, haber si podéis hecharme una mano.

Salu2!!





Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.