Keyboard management
Controls:
- Use arrow keys to move elements across the screen.
- Click on actors to select them.
This demo features the following elements:
- Create events per frame. It is achieved by creating a 'forever' timer and setting a callback on timer tick.
- Register a CAAT keyListener function.
- Correctly interpret key events.
This code won't run in jsfiddle since the iframe won't allow to capture for keyboard events.
/**
* Startup it all up when the document is ready.
* Change for your favorite frameworks initialization code.
*/
window.addEventListener(
'load',
function() {
CAAT.modules.initialization.init(
800, 500,
'experiment-holder',
[],
keys
);
},
false);
function keys(director) {
var size= 80;
var prevTime= -1;
var pixelsPerSecond= 200;
var scene= director.createScene();
var selected= null;
var keys= [0,0,0,0];
/**
* function to select on-screen actors.
* @param e
*/
var mouseClick= function( e ) {
if ( selected ) {
selected.setAlpha(1);
selected.emptyBehaviorList();
}
this.setAlpha(.5);
this.emptyBehaviorList();
this.addBehavior(
new CAAT.RotateBehavior().
setValues( 0, 2*Math.PI ).
setFrameTime( 0, 5000 ).
setCycle( true )
).addBehavior(
new CAAT.ScaleBehavior().
setValues( .8, 1.5, .8, 1.5 ).
setFrameTime( 0, 3500 ).
setPingPong().
setCycle( true )
);
this.parent.setZOrder(this,Number.MAX_VALUE);
selected= this;
};
/**
* This timer makes the process to increment actor position based on elapsed time.
* it will move pixelsPerSecond pixels on any direction.
*/
scene.createTimer( scene.time, Number.MAX_VALUE, null,
function(time, ttime, timerTask) {
if ( !selected ) {
return;
}
var ottime= ttime;
if ( -1!=prevTime ) {
ttime-= prevTime;
selected.x += (ttime/1000)*pixelsPerSecond * (keys[1]-keys[0]);
selected.y += (ttime/1000)*pixelsPerSecond * (keys[3]-keys[2]);
if ( selected.x > director.width-20 ) {
selected.x= director.width-20;
} else if ( selected.x<-20 ) {
selected.x= -20;
}
if ( selected.y > director.height-20 ) {
selected.y= director.height-20;
} else if ( selected.y<-20 ) {
selected.y= -20;
}
}
prevTime= ottime;
},
null
);
CAAT.registerKeyListener( function kl( keyEvent ) {
if ( !selected ) {
return;
}
if ( keyEvent.getKeyCode()===CAAT.Keys.UP ) {
keyEvent.preventDefault();
keys[2]= ( keyEvent.getAction()==='up' ) ? 0 : 1;
}
if ( keyEvent.getKeyCode()===CAAT.Keys.DOWN ) {
keyEvent.preventDefault();
keys[3]= ( keyEvent.getAction()==='up' ) ? 0 : 1;
}
if ( keyEvent.getKeyCode()===CAAT.Keys.LEFT ) {
keyEvent.preventDefault();
keys[0]= ( keyEvent.getAction()==='up' ) ? 0 : 1;
}
if ( keyEvent.getKeyCode()===CAAT.Keys.RIGHT ) {
keyEvent.preventDefault();
keys[1]= ( keyEvent.getAction()==='up' ) ? 0 : 1;
}
});
var s0 = new CAAT.Actor().
setFillStyle( '#f00' ).
setBounds( Math.random()*director.width, Math.random()*director.height, size, size );
scene.addChild(s0);
s0.mouseClick= mouseClick;
var s1 = new CAAT.ShapeActor().
setShape( CAAT.ShapeActor.prototype.SHAPE_CIRCLE ).
setFillStyle( '#0f0' ).
setBounds( Math.random()*director.width, Math.random()*director.height, size, size );
scene.addChild(s1);
s1.mouseClick= mouseClick;
var s2= new CAAT.StarActor().
setBounds( Math.random()*director.width, Math.random()*director.height, size, size ).
setStrokeStyle( "#00f" ).
setFilled( false ).
setOutlined( true ).
initialize( 12, size, size/2 );
scene.addChild( s2 );
s2.mouseClick= mouseClick;
s0.mouseClick();
}