Character¶
Gamma provides gma.character, which is a convenience class for
representing an entity controlled by the player.
In most games there is only one such entity (multiple in multiplayer games)
and it is called the character.
The gma.character class extends gma.moveable and provides some
extra functions for changing the state of the entity – to control jumping and
moving.
Note
See Moveable Entities for what else is provided for the character
Instantiating the character¶
The character is a moveable entity, which in turn is a
rectangle. Therefore you should provide the
dimensions and position when specifying a character.
The character is typically instantiated and provided to the manager. For example:
var manager = gma.manager(...);
manager.character = gma.character({
left : 0,
bottom : 0,
width : 3,
height : 6,
depth : 3
});
See the shapes topic for possible combinations of dimensions and position.
Note
The position properties of a character is ignored (spawn points are defined per level) but is still required.
Jumping¶
The gma.character.jump method is used to tell the character to jump.
It sets the character’s ystate to JUMPING when the character
isn’t already jumping and sets it’s velocity to what has been defined for
it’s jumpVelocity property.
The jump function is designed to be bound to a key-press:
// Jump when spacebar (keycode 32) is pressed
gma.keyHandler.register(32, manager.character.jump);
Note
If the character is dead (character’s gma.character.alive
property isn’t set to true) gma.character.jump will have no
effect.
Moving¶
To tell the character to move left or right, the gma.character.move
method is supplied. This function accepts one of the gma.constants
to specify the direction we want to move in (either LEFT or
RIGHT) and an event object.
It will then set gma.character.xState on the character to this direction
if the event object is a keydown, otherwise it will set the character’s
gma.character.xState to STILL if the event is a keyup.
An example keybinding would be (with or without currying):
// Using currying
gma.keyHandler.register(39, manager.character.move.curry(gma.constants.RIGHT));
gma.keyHandler.register(37, manager.character.move.curry(gma.constants.LEFT));
// Not using currying
gma.keyHandler.register(39, function(e) {
manager.character.move(gma.constants.RIGHT, e);
});
gma.keyHandler.register(37, function(e) {
manager.character.move(gma.constants.LEFT, e);
});
Note
If the character is dead (character’s gma.character.alive
property isn’t set to true) gma.character.move will have no
effect.
Collision functionality¶
The gma.character class defines additional collision functionality.
After doing the collision checks it inherits, the
character check if it collided with a
gma.collectable and calls gma.collectable.pickup on the
collectable and increment gma.character.score on the character.
Note
This is implemented in the
gma.character.collided__pickupCollectable function.
See the advanced topic on
collision functionality to find out how to
customize collision behaviours.