canvas2djs
v2.6.3
Published
HTML5 canvas based game engine
Downloads
123
Readme
canvas2djs
canvas2djs is an HTML5 canvas based game engine. Simple API allows you to quickly develop HTML5 games.
Installation
npm install --save canvas2djs
Usage
Include by script:
<script src="path/to/canvas2d.js"></script>
Or use import
:
import * as canvas2d from 'canvas2djs';
Quick start
Stage
var stage = new canvas2d.Stage( document.querySelector('canvas'), // HTMLCanvasElement window.innerWidth, // canvas width window.innerHeight, // canvas height canvas2d.ScaleMode.SHOW_ALL, // design resolution scale mode true // auto adjust canvas size when window resize ); stage.mouseEnabled = true; stage.touchEnabled = true; stage.keyboardEnabled = true; stage.start();
Sprite
var scene = new canvas2d.Sprite({ // draw origin will be left-top originX: 0, // default to be 0.5 originY: 0, // default to be 0.5 width: stage.width, height: stage.height }); var ball = new canvas2d.Sprite({ texture: new canvas2d.Texture('res/img/ball.png'), x: stage.width * 0.5, y: 100 }); var box = new canvas2d.Sprite({ bgColor: 'black', border: { width: 1, color: 'red' }, width: 100, height: 100, alignX: canvas2d.AlignType.CENTER, alignY: canvas2d.AlignType.CENTER }); scene.addChild(ball); scene.addChild(box); stage.addChild(scene);
Texture
var texture1 = new canvas2d.Texture('path/to/img/sprite.png'); // as same as: var texture1 = canvas2d.Texture.create('path/to/img/sprite.png'); // clip a texture from sprite sheet var clipRect = {x: 0, y: 0, width: 100, height: 100}; var texture2 = new canvas2d.Texture('path/to/img/spritesheet.png', clipRect);
TextLabel
var title = new canvas2d.TextLabel({ text: 'canvas2d', fontSize: 32, fontFamily: 'Arial', fontWeight: 'bold', x: stage.width * 0.5, y: 50 }); stage.addChild(title);
Sound
canvas2d.Sound.enabled = true; canvas2d.Sound.extension = '.mp3'; canvas2d.Sound.load('path/to/', 'bgMusic', () => { canvas2d.Sound.play('bgMusic'); });
Action
var redBall = new canvas2d.Sprite({ x: stage.width * 0.5, y: stage.height * 0.5, scaleX: 1, scaleY: 1, bgColor: 'red', radius: 50 }); stage.addChild(redBall); function scale() { let action = new canvas2d.Action(redBall); let propOptions = { scaleX: 2, // will use default easing function scaleY: { dest: 2, easing: canvas2d.Tween.easeInOutQuad } }; let duration = 0.5; // second action.to(propOptions, duration); action.then(() => { console.log('Scale action ended, restore action will start'); // restore action restore(); }) action.start(); // run action } function restore() { new canvas2d.Action(redBall) .by({scaleX: -1, scaleY: -1}) .then(scale) .start(); } scale();
canvas2djs with TypeScript and tsx
tsconfig.json
{
"compilerOptions": {
// ...
"jsx": "react",
"jsxFactory": "canvas2d.createSprite"
}
}
Import canvas2djs declaration in .tsx files:
// test.tsx
// use ref
/// <reference types="canvas2djs" />
// or import as a module
import * as canvas2d from 'canvas2djs';
canvas2djs supports : <stage />
, <sprite />
, <text />
, <bmfont />
,
// example:
/// <reference types="canvas2djs" />
namespace demo {
var canvas = document.querySelector('canvas');
export var stage: canvas2d.Stage;
export var santa: canvas2d.Sprite<any>;
var stageProps: canvas2d.StageProps = {
width: window.innerWidth,
height: window.innerHeight,
scaleMode: canvas2d.ScaleMode.SHOW_ALL,
autoAdjustCanvasSize: true,
touchEnabled: true,
mouseEnabled: true,
canvas,
};
var sceneProps: canvas2d.SpriteProps = {
originX: 0,
originY: 0,
width: stageProps.width,
height: stageProps.height
};
var titleProps: canvas2d.TextProps = {
y: 30,
alignX: canvas2d.AlignType.CENTER,
fontName: 'Arial',
fontSize: 30,
fontColor: 0xfff,
strokeWidth: 2,
strokeColor: 0x00f,
};
var santaFrames = [];
for (let i = 0; i < 11; i++) {
santaFrames.push(`img/Run_${i}.png`);
}
export var santaProps: canvas2d.SpriteProps = {
alignX: canvas2d.AlignType.CENTER,
alignY: canvas2d.AlignType.CENTER,
actions: [{
queue: [{
type: canvas2d.ActionType.ANIM,
frameList: santaFrames,
frameRate: 20
}],
repeatMode: canvas2d.ActionRepeatMode.REVERSE_REPEAT,
}]
};
var action: canvas2d.Action;
function santaJump() {
if (action) {
return;
}
action = new canvas2d.Action(santa)
.by({
y: {
value: -200,
easing: canvas2d.Tween.easeOutQuad
}
}, 0.3)
.to({
y: santa.y
}, 0.2)
.then(() => action = null)
.start();
}
<stage {...stageProps} ref={e => stage = e} >
<sprite {...sceneProps}>
<text {...titleProps}>
canvas2djs
</text>
<sprite {...santaProps} ref={e => santa = e} onClick={santaJump} />
</sprite>
</stage>;
}