Here is how movement is handled in Spell Breath:
if(agk::GetVirtualButtonState(2)) //Right
{
agk::SetSpritePhysicsVelocity(player_sprite,100,
agk::GetSpritePhysicsVelocityY(player_sprite));
//Animation.
if(!agk::GetSpritePlaying(player_sprite))
agk::PlaySprite(player_sprite,5.0f,0,0,2);
} else {
if(agk::GetVirtualButtonState(3)) //Left
{
agk::SetSpritePhysicsVelocity(player_sprite,-100,
agk::GetSpritePhysicsVelocityY(player_sprite));
//Animation.
if(!agk::GetSpritePlaying(player_sprite))
agk::PlaySprite(player_sprite,5.0f,0,3,4);
} else {
//Else, stop our sprite from moving left/right.
agk::SetSpritePhysicsVelocity(player_sprite,0,
agk::GetSpritePhysicsVelocityY(player_sprite));
}
}
And here's jumping:
if(agk::GetVirtualButtonState(1)) //Jump
{
if(agk::PhysicsRayCast(
agk::GetSpriteX(player_sprite)+agk::GetSpriteWidth(player_sprite)/2, /* X */
agk::GetSpriteY(player_sprite)+32, /* Y */
agk::GetSpriteX(player_sprite)+agk::GetSpriteWidth(player_sprite)/2, /* VX*/
agk::GetSpriteY(player_sprite)+65) > 0 ||
agk::PhysicsRayCast(
agk::GetSpriteX(player_sprite)+agk::GetSpriteWidth(player_sprite)/2-20, /* X */
agk::GetSpriteY(player_sprite)+32, /* Y */
agk::GetSpriteX(player_sprite)+agk::GetSpriteWidth(player_sprite)/2-20, /* VX*/
agk::GetSpriteY(player_sprite)+65) > 0 ||
agk::PhysicsRayCast(
agk::GetSpriteX(player_sprite)+agk::GetSpriteWidth(player_sprite)/2+20, /* X */
agk::GetSpriteY(player_sprite)+32, /* Y */
agk::GetSpriteX(player_sprite)+agk::GetSpriteWidth(player_sprite)/2+20, /* VX*/
agk::GetSpriteY(player_sprite)+65) > 0)/*VY*/
{
if(agk::GetSpritePhysicsVelocityY(player_sprite) > -5)
agk::SetSpritePhysicsVelocity(player_sprite,agk::GetSpritePhysicsVelocityX(player_sprite),
-300);
}
}
I have used not too effective method when checking if the user is on the ground (three raycasts, one on his left, another to his right and last in great center of it), but it works.
Maybe that'll help
(After removing all agk:: and ; you get BASIC code)
( || is OR, && is AND )