canvas2djs
Version:
HTML5 canvas based game engine
278 lines (225 loc) • 6.36 kB
Markdown
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:
```html
<script src="path/to/canvas2d.js"></script>
```
Or use `import`:
```javascript
import * as canvas2d from 'canvas2djs';
```
Quick start
===
* **Stage**
```typescript
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**
```typescript
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**
```typescript
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**
```typescript
var title = new canvas2d.TextLabel({
text: 'canvas2d',
fontSize: 32,
fontFamily: 'Arial',
fontWeight: 'bold',
x: stage.width * 0.5,
y: 50
});
stage.addChild(title);
```
* **Sound**
```typescript
canvas2d.Sound.enabled = true;
canvas2d.Sound.extension = '.mp3';
canvas2d.Sound.load('path/to/', 'bgMusic', () => {
canvas2d.Sound.play('bgMusic');
});
```
* **Action**
```typescript
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`
```json
{
"compilerOptions": {
// ...
"jsx": "react",
"jsxFactory": "canvas2d.createSprite"
}
}
```
Import canvas2djs declaration in .tsx files:
```typescript
// test.tsx
// use ref
/// <reference types="canvas2djs" />
// or import as a module
import * as canvas2d from 'canvas2djs';
```
canvas2djs supports : `<stage />`, `<sprite />`, `<text />`, `<bmfont />`,
```tsx
// 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>;
}
```