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.