von Michel Wacker (http://twitter.com/starnut)
Seitdem HTML5 als der heilige Gral der Web Entwicklung erklärt wurde, werden die Rufe nach Plugin-freien Spielen, die auch auf Tablets laufen sollen, immer lauter. Engines schießen aus dem Boden wie Pilze, aber die wenigsten davon können überzeugen. ImpactJS ist eine der vielversprechenderen und kommt u.a. mit einem mächtigen Level-Editor daher. Wie man Spiele mit ImpactJS entwickelt und wo die Engine und/oder HTML5 an seine Grenzen stößt zeigt dieser Vortrag.
11. Entitäten
• Life-Cycle
init() update() draw() kill()
• Movement
pos velocity friction gravityFactor
• Collision Detection
touches() health receiveDamage()
12. Entität
ig.module(
'game.entities.badge' // Package
)
.requires(
'impact.entity' // Imports
)
.defines(function(){
EntityBadge = ig.Entity.extend({
init: function ( x, y, settings ) {
this.parent( x, y, settings );
},
update: function () {
this.parent();
},
draw: function () {
this.parent();
},
}
}
13. Fonts & Images
// Font
var font = new ig.Font( 'font.png' );
font.draw( 'Some text', x, y, ig.Font.ALIGN.RIGHT );
// Image
var img = new ig.Image( 'player.png' );
img.draw( x, y );
img.drawTile( x, y, 3, 16 );
14. Animation
EntityBadge = ig.Entity.extend({
size: { x: 50, y: 52 },
animSheet: new ig.AnimationSheet(
'media/entities/badges.png',
50, 52
),
init: function ( x, y, settings ) {
this.parent( x, y, settings );
this.addAnim( 'idle', 1, [0] );
this.addAnim( 'run', 0.3, [1,2,3], false );
},
update: function () {
this.parent();
if (someThingHappens) {
this.currentAnim = this.anims.run;
}
},
}
15. Input
// On game start
ig.input.bind( ig.KEY.UP_ARROW, 'jump' );
// In your game's or entity's update() method
if( ig.input.pressed('jump') ) {
this.vel.y = -100;
}