SlideShare a Scribd company logo
HTML5 Games
with CreateJS
TWITTER: @david_kelleher
SLIDES: slideshare.net/davekelleher/
Game: davidk.net/game/
Outline
 Game Theory
 Object Oriented Concepts
 HTML5 Game Frameworks
 CreateJS Overview
 Code for Dodgeball Game
 Other CreateJS Features
 Atari SDK
Game Theory
Player
UI: Info, Feedback
Decision / Action
Outcome: Win, Loss
Parts of a Web Game
Player
 Cartoon character in gym
UI / Feedback
 Score (text field)
 Position of player
 Balls: position, direction, speed
Strategy
Dexterity
Luck
Gameplay Decisions/Actions
Decision / Action
 Strategy: Avoid or catch ball?
 Dexterity: Click to “catch” ball
Outcome
 Score point for touching clicked
(catchable) ball
 End game when hit by unclicked
ball
Object Oriented
Object Oriented
A procedural coding strategy
would have a game loop with a
massively complex controller.
Use an object oriented coding
strategy instead.
Object Oriented
 Blinky speeds up as you eat dots
 Pinky tends to move counterclockwise
 Inky makes unpredictable turns
 Clyde doesn’t always chase pac man
Object Oriented
 In JavaScript, classes can be defined using the
constructor and prototype methods.
Here is use of the constructor:
 function MyClass () {
var myPrivateVariable;
...
this.publicGetVar = function() {
return(myPrivateVariable);
}
...
Events
User Input
• Mouse Move
• Click, Mouseup, Mousedown
• Drag and Drop, Swipe
• Key Input
Game Event
• Timer, Tick
• Collision (Hit Test)
• User Defined
HTML5
Frameworks
Game Frameworks
 CreateJS: 2D, like working in Flash
 Phaser: 2D, more game focused
 ThreeJS: 3D, large community
 Babylon: 3D, more gaming focused
CreateJS
CreateJS
 EaselJS: Core <canvas> features
 TweenJS: Animation library
 SoundJS: Audio library
 PreloadJS: Asset manager
CreateJS
Dodgeball Code
Dave’s Dodgeball HTML5
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>Dodgeball</title>
<script src="https://code.createjs.com/easeljs-0.8.0.min.js">
</script>
<script src="https://code.createjs.com/tweenjs-0.6.0.min.js">
</script>
</head>
<body>
<script src="js/game.js"></script>
</body>
</html>
CreateJS Classes Used
EaselJS TweenJS
• Stage
• Ticker
• Bitmap
• Text
• MouseEvent
• Tween
• Ease
Dave’s Dodgeball JS
// Create gym background instance
var gym = new createjs.Bitmap("img/gym.jpg");
Dave’s Dodgeball JS
// Create score instance
var score = new createjs.Text(0, 'bold 50px sans-serif', '#FFF');
score.x = 20;
score.y = 20;
score.value = 0; // custom property
// method for scoring a point
score.point = function () {
score.value++;
this.text = this.value;
}
Dave’s Dodgeball JS
// Create player instance
var player = new createjs.Bitmap("img/player.png");
player.x = 232;
player.y = 275;
player.alive = true; // custom property
player.die = function () {
player.alive = false;
player.image = new createjs.Bitmap("img/player-
dead.png").image;
}
Dave’s Dodgeball JS
// Create instances of ball graphics
ballCatchable = new createjs.Bitmap("img/ball-catch.png");
ballCaught = new createjs.Bitmap("img/star.gif")
Dave’s Dodgeball JS
// Define a Ball "class"
function Ball () {
var ball = new createjs.Bitmap("img/ball.png");
ball.catchable = false;
ball.caught = false;
ball.x = Math.floor((Math.random() * 600) + 1);
ball.scaleX = .25;
ball.scaleY = .25;
ball.regX = ball.image.width / 2;
ball.regY = ball.image.height / 2;
Dave’s Dodgeball JS
// Ball class continued ...
// Handler for mousedown listener
ball.addEventListener("mousedown", function() {
ball.image = ballCatchable.image;
ball.catchable = true;
});
Dave’s Dodgeball JS
// Ball class continued ...
// Handler for tick event listener (HitTest)
ball.on("tick", function() {
if (this.y<500) {
var xDist = this.x - player.x - 70;
var yDist = this.y - player.y - 30;
// Using pythagorus
var distance = Math.sqrt(xDist*xDist + yDist*yDist);
if ((distance < 50) && (this.caught == false)) {
if ((ball.catchable == true) &&
(player.alive == true)) {
ball.caught = true;
ball.image = ballCaught.image;
ball.regX = 130;
ball.regY = 130;
score.point();
} else {
player.die();
}
}
}
});
Dave’s Dodgeball JS
// Ball class continued ...
// Move the ball
ball.moveToX = Math.floor((Math.random() * 600) + 1);
ball.moveTime = Math.floor((Math.random() * 100) + 2000);
createjs.Tween.get(ball)
.to({scaleX:.75,
scaleY:.75,
x:ball.moveToX,
y:500,
rotation:1440},
ball.moveTime,
createjs.Ease.getPowOut(1.5)
);
Dave’s Dodgeball JS
// Ball class continued ...
// Provide "public" access to the ball object
this.getBall = function() { return(ball); }
}
Dave’s Dodgeball JS
// Make HTML5 canvas element
var canvas = document.createElement("canvas");
canvas.width = 600;
canvas.height = 400;
document.body.appendChild(canvas);
Dave’s Dodgeball JS
// Make Create.js stage
var stage = new createjs.Stage(canvas);
stage.addChild(gym);
stage.addChild(score);
stage.addChild(player);
// Handler for mousemove listener (player follows mouse)
stage.on("stagemousemove", function(evt) {
if (player.alive == true) player.x = evt.stageX-68;
});
stage.mouseMoveOutside = true;
Dave’s Dodgeball JS
// Add a ticker to the stage object
var tickHandle = createjs.Ticker.on("tick", stage);
createjs.Ticker.setFPS(60);
Dave’s Dodgeball JS
// Ticker continued ...
createjs.Ticker.addEventListener("tick", function() {
// Add ball instance
randomNumber = Math.floor((Math.random() * 60) + 1);
if ((randomNumber == 1) && (player.alive == true)) {
stage.addChild(new Ball().getBall());
}
});
More CreateJS
SpriteSheet
SpriteSheet Class
var data = {
images: ["sprites.jpg"],
frames: {width:50, height:50},
animations: {
stand:0,
run:[1,5],
jump:[6,8,"run"]
}
};
Drag and Drop
object.on("pressmove", function(evt) {
evt.target.x = evt.stageX;
evt.target.y = evt.stageY;
});
Atari Arcade SDK
Atari Arcade
 https://www.atari.com/arcade/developers
 Atari Arcade SDK (extends CreateJS)
https://github.com/AtariAdmin/AtariArcadeSDK
HTML5 Games
with CreateJS
TWITTER: @david_kelleher
SLIDES: slideshare.net/davekelleher/
Game: davidk.net/game/

More Related Content

PDF
Traditional Technology in Sri Lankan Agriculture
PPT
Plantation forestry presentation1
KEY
Know yourengines velocity2011
PPT
Эффективные презентации
PPTX
Really Fast HTML5 Game Development with CreateJS
PPTX
Database Design and Normalization
ODP
HTML5 as a game console
KEY
5 tips for your HTML5 games
Traditional Technology in Sri Lankan Agriculture
Plantation forestry presentation1
Know yourengines velocity2011
Эффективные презентации
Really Fast HTML5 Game Development with CreateJS
Database Design and Normalization
HTML5 as a game console
5 tips for your HTML5 games

Similar to HTML5 Games with CreateJS (20)

PPTX
CreateJS
PPT
Game age ppt
PPTX
Snake in the DOM!
PPT
Kick start with j query
PPTX
Svcc 2013-d3
PPTX
SVCC 2013 D3.js Presentation (10/05/2013)
DOCX
circ.db.dbcircleserver(1).py#!usrlocalbinpython3im.docx
PDF
Browsers with Wings
PPTX
Create online games with node.js and socket.io
PPTX
Java_Ball_Paddle_Game_Detailed_Presentation_abc.pptx
PDF
Is HTML5 Ready? (workshop)
PDF
Is html5-ready-workshop-110727181512-phpapp02
PPTX
Browser based games
PDF
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
PPTX
JavaScript Advanced - Useful methods to power up your code
PPT
jQuery Loves You
PPT
Game Development With HTML5
PPTX
Game dev 101 part 3
PPTX
jQuery Foot-Gun Features
PDF
Strategies for refactoring and migrating a big old project to be multilingual...
CreateJS
Game age ppt
Snake in the DOM!
Kick start with j query
Svcc 2013-d3
SVCC 2013 D3.js Presentation (10/05/2013)
circ.db.dbcircleserver(1).py#!usrlocalbinpython3im.docx
Browsers with Wings
Create online games with node.js and socket.io
Java_Ball_Paddle_Game_Detailed_Presentation_abc.pptx
Is HTML5 Ready? (workshop)
Is html5-ready-workshop-110727181512-phpapp02
Browser based games
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
JavaScript Advanced - Useful methods to power up your code
jQuery Loves You
Game Development With HTML5
Game dev 101 part 3
jQuery Foot-Gun Features
Strategies for refactoring and migrating a big old project to be multilingual...
Ad

More from Dave Kelleher (8)

PPTX
Uml Diagrams for Web Developers
PPTX
Semantic HTML5 and JSON-LD
PPTX
Debugging PHP Code
PPTX
Cinematic UX Design
PPTX
Cryptocurrencies
PPTX
Cinematic UX Design
PPTX
Semantic HTML5 and Microdata
PPTX
Reverse Card Sort for UX Testing
Uml Diagrams for Web Developers
Semantic HTML5 and JSON-LD
Debugging PHP Code
Cinematic UX Design
Cryptocurrencies
Cinematic UX Design
Semantic HTML5 and Microdata
Reverse Card Sort for UX Testing
Ad

Recently uploaded (20)

PDF
An introduction to the IFRS (ISSB) Stndards.pdf
PDF
How to Ensure Data Integrity During Shopify Migration_ Best Practices for Sec...
PPTX
CHE NAA, , b,mn,mblblblbljb jb jlb ,j , ,C PPT.pptx
PPTX
innovation process that make everything different.pptx
PDF
Slides PDF The World Game (s) Eco Economic Epochs.pdf
PPTX
E -tech empowerment technologies PowerPoint
PDF
Decoding a Decade: 10 Years of Applied CTI Discipline
PDF
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
PPTX
artificial intelligence overview of it and more
PDF
The Internet -By the Numbers, Sri Lanka Edition
PDF
RPKI Status Update, presented by Makito Lay at IDNOG 10
PDF
Introduction to the IoT system, how the IoT system works
PPTX
SAP Ariba Sourcing PPT for learning material
PPT
tcp ip networks nd ip layering assotred slides
PPT
Design_with_Watersergyerge45hrbgre4top (1).ppt
PPT
isotopes_sddsadsaadasdasdasdasdsa1213.ppt
PPTX
Introduction about ICD -10 and ICD11 on 5.8.25.pptx
PPTX
introduction about ICD -10 & ICD-11 ppt.pptx
PDF
APNIC Update, presented at PHNOG 2025 by Shane Hermoso
PPTX
PptxGenJS_Demo_Chart_20250317130215833.pptx
An introduction to the IFRS (ISSB) Stndards.pdf
How to Ensure Data Integrity During Shopify Migration_ Best Practices for Sec...
CHE NAA, , b,mn,mblblblbljb jb jlb ,j , ,C PPT.pptx
innovation process that make everything different.pptx
Slides PDF The World Game (s) Eco Economic Epochs.pdf
E -tech empowerment technologies PowerPoint
Decoding a Decade: 10 Years of Applied CTI Discipline
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
artificial intelligence overview of it and more
The Internet -By the Numbers, Sri Lanka Edition
RPKI Status Update, presented by Makito Lay at IDNOG 10
Introduction to the IoT system, how the IoT system works
SAP Ariba Sourcing PPT for learning material
tcp ip networks nd ip layering assotred slides
Design_with_Watersergyerge45hrbgre4top (1).ppt
isotopes_sddsadsaadasdasdasdasdsa1213.ppt
Introduction about ICD -10 and ICD11 on 5.8.25.pptx
introduction about ICD -10 & ICD-11 ppt.pptx
APNIC Update, presented at PHNOG 2025 by Shane Hermoso
PptxGenJS_Demo_Chart_20250317130215833.pptx

HTML5 Games with CreateJS

  • 1. HTML5 Games with CreateJS TWITTER: @david_kelleher SLIDES: slideshare.net/davekelleher/ Game: davidk.net/game/
  • 2. Outline  Game Theory  Object Oriented Concepts  HTML5 Game Frameworks  CreateJS Overview  Code for Dodgeball Game  Other CreateJS Features  Atari SDK
  • 4. Player UI: Info, Feedback Decision / Action Outcome: Win, Loss Parts of a Web Game
  • 6. UI / Feedback  Score (text field)  Position of player  Balls: position, direction, speed
  • 8. Decision / Action  Strategy: Avoid or catch ball?  Dexterity: Click to “catch” ball
  • 9. Outcome  Score point for touching clicked (catchable) ball  End game when hit by unclicked ball
  • 11. Object Oriented A procedural coding strategy would have a game loop with a massively complex controller. Use an object oriented coding strategy instead.
  • 12. Object Oriented  Blinky speeds up as you eat dots  Pinky tends to move counterclockwise  Inky makes unpredictable turns  Clyde doesn’t always chase pac man
  • 13. Object Oriented  In JavaScript, classes can be defined using the constructor and prototype methods. Here is use of the constructor:  function MyClass () { var myPrivateVariable; ... this.publicGetVar = function() { return(myPrivateVariable); } ...
  • 14. Events User Input • Mouse Move • Click, Mouseup, Mousedown • Drag and Drop, Swipe • Key Input Game Event • Timer, Tick • Collision (Hit Test) • User Defined
  • 16. Game Frameworks  CreateJS: 2D, like working in Flash  Phaser: 2D, more game focused  ThreeJS: 3D, large community  Babylon: 3D, more gaming focused
  • 18. CreateJS  EaselJS: Core <canvas> features  TweenJS: Animation library  SoundJS: Audio library  PreloadJS: Asset manager CreateJS
  • 20. Dave’s Dodgeball HTML5 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"/> <title>Dodgeball</title> <script src="https://code.createjs.com/easeljs-0.8.0.min.js"> </script> <script src="https://code.createjs.com/tweenjs-0.6.0.min.js"> </script> </head> <body> <script src="js/game.js"></script> </body> </html>
  • 21. CreateJS Classes Used EaselJS TweenJS • Stage • Ticker • Bitmap • Text • MouseEvent • Tween • Ease
  • 22. Dave’s Dodgeball JS // Create gym background instance var gym = new createjs.Bitmap("img/gym.jpg");
  • 23. Dave’s Dodgeball JS // Create score instance var score = new createjs.Text(0, 'bold 50px sans-serif', '#FFF'); score.x = 20; score.y = 20; score.value = 0; // custom property // method for scoring a point score.point = function () { score.value++; this.text = this.value; }
  • 24. Dave’s Dodgeball JS // Create player instance var player = new createjs.Bitmap("img/player.png"); player.x = 232; player.y = 275; player.alive = true; // custom property player.die = function () { player.alive = false; player.image = new createjs.Bitmap("img/player- dead.png").image; }
  • 25. Dave’s Dodgeball JS // Create instances of ball graphics ballCatchable = new createjs.Bitmap("img/ball-catch.png"); ballCaught = new createjs.Bitmap("img/star.gif")
  • 26. Dave’s Dodgeball JS // Define a Ball "class" function Ball () { var ball = new createjs.Bitmap("img/ball.png"); ball.catchable = false; ball.caught = false; ball.x = Math.floor((Math.random() * 600) + 1); ball.scaleX = .25; ball.scaleY = .25; ball.regX = ball.image.width / 2; ball.regY = ball.image.height / 2;
  • 27. Dave’s Dodgeball JS // Ball class continued ... // Handler for mousedown listener ball.addEventListener("mousedown", function() { ball.image = ballCatchable.image; ball.catchable = true; });
  • 28. Dave’s Dodgeball JS // Ball class continued ... // Handler for tick event listener (HitTest) ball.on("tick", function() { if (this.y<500) { var xDist = this.x - player.x - 70; var yDist = this.y - player.y - 30; // Using pythagorus var distance = Math.sqrt(xDist*xDist + yDist*yDist); if ((distance < 50) && (this.caught == false)) { if ((ball.catchable == true) && (player.alive == true)) { ball.caught = true; ball.image = ballCaught.image; ball.regX = 130; ball.regY = 130; score.point(); } else { player.die(); } } } });
  • 29. Dave’s Dodgeball JS // Ball class continued ... // Move the ball ball.moveToX = Math.floor((Math.random() * 600) + 1); ball.moveTime = Math.floor((Math.random() * 100) + 2000); createjs.Tween.get(ball) .to({scaleX:.75, scaleY:.75, x:ball.moveToX, y:500, rotation:1440}, ball.moveTime, createjs.Ease.getPowOut(1.5) );
  • 30. Dave’s Dodgeball JS // Ball class continued ... // Provide "public" access to the ball object this.getBall = function() { return(ball); } }
  • 31. Dave’s Dodgeball JS // Make HTML5 canvas element var canvas = document.createElement("canvas"); canvas.width = 600; canvas.height = 400; document.body.appendChild(canvas);
  • 32. Dave’s Dodgeball JS // Make Create.js stage var stage = new createjs.Stage(canvas); stage.addChild(gym); stage.addChild(score); stage.addChild(player); // Handler for mousemove listener (player follows mouse) stage.on("stagemousemove", function(evt) { if (player.alive == true) player.x = evt.stageX-68; }); stage.mouseMoveOutside = true;
  • 33. Dave’s Dodgeball JS // Add a ticker to the stage object var tickHandle = createjs.Ticker.on("tick", stage); createjs.Ticker.setFPS(60);
  • 34. Dave’s Dodgeball JS // Ticker continued ... createjs.Ticker.addEventListener("tick", function() { // Add ball instance randomNumber = Math.floor((Math.random() * 60) + 1); if ((randomNumber == 1) && (player.alive == true)) { stage.addChild(new Ball().getBall()); } });
  • 37. SpriteSheet Class var data = { images: ["sprites.jpg"], frames: {width:50, height:50}, animations: { stand:0, run:[1,5], jump:[6,8,"run"] } };
  • 38. Drag and Drop object.on("pressmove", function(evt) { evt.target.x = evt.stageX; evt.target.y = evt.stageY; });
  • 40. Atari Arcade  https://www.atari.com/arcade/developers  Atari Arcade SDK (extends CreateJS) https://github.com/AtariAdmin/AtariArcadeSDK
  • 41. HTML5 Games with CreateJS TWITTER: @david_kelleher SLIDES: slideshare.net/davekelleher/ Game: davidk.net/game/