html5 games with createjs

41
HTML5 Games with CreateJS TWITTER: @david_kelleher LIDES: slideshare.net/davekelleher/ Game: davidk.net/game/

Upload: dave-kelleher

Post on 16-Apr-2017

8.064 views

Category:

Internet


0 download

TRANSCRIPT

Page 1: HTML5 Games with CreateJS

HTML5 Gameswith CreateJS

TWITTER: @david_kelleherSLIDES: slideshare.net/davekelleher/

Game: davidk.net/game/

Page 2: HTML5 Games with CreateJS

Outline

Game TheoryObject Oriented ConceptsHTML5 Game FrameworksCreateJS OverviewCode for Dodgeball GameOther CreateJS FeaturesAtari SDK

Page 3: HTML5 Games with CreateJS

Game Theory

Page 4: HTML5 Games with CreateJS

Player

UI: Info, Feedback

Decision / Action

Outcome: Win, Loss

Parts of a Web Game

Page 5: HTML5 Games with CreateJS

Player

Cartoon character in gym

Page 6: HTML5 Games with CreateJS

UI / Feedback

Score (text field) Position of player Balls: position, direction,

speed

Page 7: HTML5 Games with CreateJS

Strategy

Dexterity

Luck

Gameplay Decisions/Actions

Page 8: HTML5 Games with CreateJS

Decision / Action

Strategy: Avoid or catch ball? Dexterity: Click to “catch” ball

Page 9: HTML5 Games with CreateJS

Outcome

Score point for touching clicked (catchable) ball

End game when hit by unclicked ball

Page 10: HTML5 Games with CreateJS

Object Oriented

Page 11: HTML5 Games with CreateJS

Object Oriented

A procedural coding strategy would have a game loop with a massively complex controller. Use an object oriented coding strategy instead.

Page 12: HTML5 Games with CreateJS

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

Page 13: HTML5 Games with CreateJS

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); } ...

Page 14: HTML5 Games with CreateJS

Events

User Input• Mouse Move• Click, Mouseup, Mousedown• Drag and Drop, Swipe• Key Input

Game Event• Timer, Tick• Collision (Hit Test)• User Defined

Page 15: HTML5 Games with CreateJS

HTML5 Frameworks

Page 16: HTML5 Games with CreateJS

Game Frameworks

CreateJS: 2D, like working in FlashPhaser: 2D, more game focusedThreeJS: 3D, large communityBabylon: 3D, more gaming

focused

Page 17: HTML5 Games with CreateJS

CreateJS

Page 18: HTML5 Games with CreateJS

CreateJS

EaselJS: Core <canvas> featuresTweenJS: Animation librarySoundJS: Audio libraryPreloadJS: Asset manager

CreateJS

Page 19: HTML5 Games with CreateJS

Dodgeball Code

Page 20: HTML5 Games with CreateJS

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>

Page 21: HTML5 Games with CreateJS

CreateJS Classes Used

EaselJS TweenJS• Stage• Ticker• Bitmap• Text• MouseEvent

• Tween• Ease

Page 22: HTML5 Games with CreateJS

Dave’s Dodgeball JS

// Create gym background instancevar gym = new createjs.Bitmap("img/gym.jpg");

Page 23: HTML5 Games with CreateJS

Dave’s Dodgeball JS

// Create score instancevar 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 pointscore.point = function () { score.value++; this.text = this.value;}

Page 24: HTML5 Games with CreateJS

Dave’s Dodgeball JS

// Create player instancevar player = new createjs.Bitmap("img/player.png");player.x = 232;player.y = 275;player.alive = true; // custom propertyplayer.die = function () { player.alive = false; player.image = new createjs.Bitmap("img/player-dead.png").image;}

Page 25: HTML5 Games with CreateJS

Dave’s Dodgeball JS

// Create instances of ball graphicsballCatchable = new createjs.Bitmap("img/ball-catch.png");ballCaught = new createjs.Bitmap("img/star.gif")

Page 26: HTML5 Games with CreateJS

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;

Page 27: HTML5 Games with CreateJS

Dave’s Dodgeball JS

// Ball class continued ...

// Handler for mousedown listener ball.addEventListener("mousedown", function() { ball.image = ballCatchable.image; ball.catchable = true; });

Page 28: HTML5 Games with CreateJS

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(); } } } });

Page 29: HTML5 Games with CreateJS

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) );

Page 30: HTML5 Games with CreateJS

Dave’s Dodgeball JS

// Ball class continued ...

// Provide "public" access to the ball object this.getBall = function() { return(ball); }}

Page 31: HTML5 Games with CreateJS

Dave’s Dodgeball JS

// Make HTML5 canvas elementvar canvas = document.createElement("canvas");canvas.width = 600;canvas.height = 400;document.body.appendChild(canvas);

Page 32: HTML5 Games with CreateJS

Dave’s Dodgeball JS

// Make Create.js stagevar 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;

Page 33: HTML5 Games with CreateJS

Dave’s Dodgeball JS

// Add a ticker to the stage objectvar tickHandle = createjs.Ticker.on("tick", stage);createjs.Ticker.setFPS(60);

Page 34: HTML5 Games with CreateJS

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()); }});

Page 35: HTML5 Games with CreateJS

More CreateJS

Page 36: HTML5 Games with CreateJS

SpriteSheet

Page 37: HTML5 Games with CreateJS

SpriteSheet Classvar data = {

images: ["sprites.jpg"], frames: {width:50,

height:50},animations: {

stand:0, run:[1,5], jump:[6,8,"run"]

}};

Page 38: HTML5 Games with CreateJS

Drag and Drop

object.on("pressmove", function(evt) { evt.target.x = evt.stageX; evt.target.y = evt.stageY;});

Page 39: HTML5 Games with CreateJS

Atari Arcade SDK

Page 40: HTML5 Games with CreateJS

Atari Arcade

https://www.atari.com/arcade/developers

Atari Arcade SDK (extends CreateJS)https://github.com/AtariAdmin/AtariArcadeSDK

Page 41: HTML5 Games with CreateJS

HTML5 Gameswith CreateJS

TWITTER: @david_kelleherSLIDES: slideshare.net/davekelleher/

Game: davidk.net/game/