Security News
RubyGems.org Adds New Maintainer Role
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
canvas-based game engine and toolchain optimized for rapid development.
Inspired by pyglet.
require
and module.exports
syntax.# install dependencies in ubuntu
sudo apt-get install libcairo2-dev
# start with a nearly-empty project, such as a freshly created project
# from github with only a .git/ and README.md.
cd my-project
# init the project with chem-cli
npm install chem-cli
./node_modules/.bin/chem init
# the `dev` command will run a development server which will automatically
# recompile your code, generate your spritesheets, and serve your assets.
# after running `init` above, simply:
npm run dev
# see more commands
./node_modules/.bin/chem
See chem-cli for more information.
./chemfile.js
./src/main.js
./public/index.html
./assets/img/ship.png
./assets/img/explosion/01.png
...
./assets/img/explosion/12.png
./public/main.js
./public/spritesheet.png
./public/animations.json
var chem = require("chem");
var v = chem.vec2d;
var ani = chem.resources.animations;
var canvas = document.getElementById("game");
var engine = new chem.Engine(canvas);
engine.showLoadProgressBar();
engine.start();
canvas.focus();
chem.resources.on('ready', function () {
var batch = new chem.Batch();
var boom = new chem.Sound('sfx/boom.ogg');
var ship = new chem.Sprite(ani.ship, {
batch: batch,
pos: v(200, 200),
rotation: Math.PI / 2
});
var shipVel = v();
var rotationSpeed = Math.PI * 0.04;
var thrustAmt = 0.1;
var fpsLabel = engine.createFpsLabel();
engine.on('update', function (dt, dx) {
ship.pos.add(shipVel);
// rotate the ship with left and right arrow keys
var rotateAmt = rotationSpeed * dx;
if (engine.buttonState(chem.button.KeyLeft)) ship.rotation -= rotateAmt;
if (engine.buttonState(chem.button.KeyRight)) ship.rotation += rotateAmt;
// apply forward and backward thrust with up and down arrow keys
var thrust = v.unit(ship.rotation).scale(thrustAmt * dx);
if (engine.buttonState(chem.button.KeyUp)) shipVel.add(thrust);
if (engine.buttonState(chem.button.KeyDown)) shipVel.sub(thrust);
// press space to blow yourself up
if (engine.buttonJustPressed(chem.button.KeySpace)) {
boom.play();
ship.setAnimation(ani.boom);
ship.setFrameIndex(0);
ship.on('animationend', function() {
ship.delete();
});
}
});
engine.on('draw', function (context) {
// clear canvas to black
context.fillStyle = '#000000'
context.fillRect(0, 0, engine.size.x, engine.size.y);
// draw all sprites in batch
batch.draw(context);
// draw a little fps counter in the corner
fpsLabel.draw(context);
});
});
// the main source file which depends on the rest of your source files.
exports.main = 'src/main';
exports.spritesheet = {
// you can override any of these in individual animation declarations
defaults: {
delay: 0.05,
loop: false,
// possible values: a Vec2d instance, or one of:
// ["center", "topleft", "topright", "bottomleft", "bottomright",
// "top", "right", "bottom", "left"]
anchor: "center"
},
animations: {
boom: {
// frames can be a list of filenames or a string to match the beginning
// of files with. If you leave it out entirely, it defaults to the
// animation name.
frames: "explosion"
},
ship: {}
}
};
<!doctype html>
<html>
<head>
<title>Chem Example</title>
</head>
<body style="text-align: center">
<canvas id="game" width="853" height="480"></canvas>
<p>Use the arrow keys to move around and space to destroy yourself.</p>
<script type="text/javascript" src="main.js"></script>
</body>
</html>
Start by looking at your chemfile
. This file contains all the instructions
on how to build your game.
This file, like every other source file in your game, can be in any compile- to-JavaScript language (including JavaScript itself) that you choose.
main
- this is the entry point into your game. Chem will use
browserify with this as the
input file. Often this is set to src/main.js
.
spritesheet
defaults
- for each animation, these are the default values that will
be used if you do not specify one.animations
- these will be available when you create a sprite.
anchor
- the "center of gravity" point. pos
is centered here, and
a sprite's rotation
rotates around this point. Use a Vec2d instance
for this value.frames
- frames can be a list of filenames or a string to match the
beginning of files with. if you leave it out entirely, it defaults to
the animation name.delay
- number of seconds between frames.loop
- whether an animation should start over when it ends. You can
override this in individual sprites.autoBootstrap
- set this to false
if you do not want public/bootstrap.js
to be auto generated.
If you leave the spritesheet
export undefined, no spritesheet will be
generated or used at runtime.
Supported languages:
The first step is to require "chem":
var chem = require('chem');
// Next, locate your canvas:
var canvas = document.getElementById("the-canvas-id");
// Create the main game engine:
var engine = new Engine(canvas);
// Display a nice loading progress bar while we serve assets:
// (it automatically goes away once loading is complete)
engine.showLoadProgressBar()
// Start the main loop:
engine.start()
// Focus the canvas so that keyboard input works:
canvas.focus()
// Finally, wait until resources are done loading:
chem.resources.on('ready', function() {
// Now you can go for it. All asssets are loaded.
});
As a convention, any Vec2d
instances you get from Chem are not clones.
That is, pay careful attention not to perform destructive behavior on the
Vec2d
instances returned from the API.
Text files placed in public/text/ will be available in the chem.resources.text
object once the 'ready' event has fired.
Image files placed in public/img/ will be available in the
chem.resources.images
object once the 'ready' event has fired.
See doc/api.md.
See doc/history.md.
See also chem-cli
# set up dev environment for chem itself:
sudo apt-get install libcairo2-dev
sudo npm link
FAQs
html5 canvas 2D game engine optimized for rapid development - runtime
The npm package chem receives a total of 4 weekly downloads. As such, chem popularity was classified as not popular.
We found that chem demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.
Security News
Research
Socket's threat research team has detected five malicious npm packages targeting Roblox developers, deploying malware to steal credentials and personal data.