Bueno... voy controlando un poco más... explico como lo he realizado, por si a alguien más le sirve (no sé si es la forma correcta, pero funciona)
Dentro del fichero
STAGE.PI tengo declarado un Sprite que actúa de plataformas y los colliders declarados así:
Code: Select all
// Cargamos las plataformas.
bg_level = app.NewSprite("plataformas");
bg_level.AddFrame(GRAPHICS + "platforms.png");
bg_level.setPriority(1);
// Activamos las colisiones
bg_level.SetCollision(true);
bg_level.SetCollisionRect(0,368,640,272);
bg_level.AddColliderRect(40,40,200,150);
bg_level.AddColliderRect(80,320,47,15);
bg_level.AddColliderRect(160,320,144,15);
Luego, en el
PLAYER.PI tengo el personaje declarado y preparado para detectar colisiones:
Code: Select all
player.setCollision(true);
player.setColliderMode(true);
player.setUserSpriteCollision(this,"OnSpriteCollision");
...
function OnSpriteCollision(_spr1, _spr2)
{
if(_spr1.GetColliderTouched()) // Ha colisionado con un collider adicional (AddColliderRect)
{
_spr1.SetColor(RGB(255,0,0));
app.Collision.setText("Colision con Collider Adicional");
}
else // Ha colisionado con el collider principal (SetColliderRect)
{
_spr1.SetColor(RGB(255,0,0));
app.Collision.setText("Colision con Collider Principal");
}
}
function OnMovePlayer(_controller)
{
if(!player.isColliding())
{
player.setColor(RGB(255,255,255)); //No está colisionando con nada.
app.Collision.setText("No hay colisiones");
}
...
}
Esto funciona perfectamente
Ahora me surge una duda... Yo en el OnMovePlayer que es el callback del controller, compruebo que el player no está fuera de los límites de la pantalla para dejarle en el tope. Pero si choca con un collider... ¿donde evito que se mueva en la dirección del choque?
¿Debería mover el Player en el evento Move? ¿Cual sería la manera correcta de controlar el movimiento del personaje, en el OnPlayerMove del controlador o en el OnMove del player?
Gracias
@msxvr por la manita.
La muerte, segura de su victoria nos da toda la vida de ventaja.
Las fotografías de los que viajan, son la cultura de los que se quedan.