npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

canvas-simulator

v1.0.9

Published

A modern game and simulation library for the HTML Canvas element targeted for the use with ES6, TypeScript or Babel.

Downloads

4

Readme

Simulator

A modern game and simulation library for the HTML Canvas element targeted for the use with ES6, TypeScript or Babel.

Getting Started

This library uses the modern ES6 class syntax, so before getting started you should learn to use tools like TypeScript or Babel to compile ES6 to ES5 or below.

You also should use tools like browserify or WebPack to bundle the library to use it in the browser.

If you want to learn more about the library, please have a look at the documentation.

Installation

$ npm i --save canvas-simulator

Creating the World

Everything that happens during the simulation or game is contained in a World which is created by creating a subclass which inherits from the World class. Our example world will be named NightSky.


// Import the World class from the library
import {World} from 'canvas-simulator';

// Create a new subclass
class NightSky extends World{
    // The constructor needs to be passed the Canvas 2D rendering context
    constructor(ctx){
        // Initiate the super class by passing the rendering context (you can forget about it now 🎉) and width and height of the canvas (optional)
        super(ctx, 400, 300);

        // Set background color
        super.setBackgroundColor('black');
    }
}


// Create a new new instance of the class

// Get context
let ctx = document.getElementById('canvas').getContext('2d');

//Initiate class
let sky = new NightSky(ctx);

Adding Life to the World

Now that the NightSky world is ready to use, we can add objects to it which are also instances of classes but which this time inherit from the Actor class of the library.

Here we create a subclass of the Actor class with the name of Bird.


// Import the Actor class from the library
import {Actor} from 'canvas-simulator';

class Bird extends Actor{
    constructor(){
        // Initiate the super class
        super();

        // Setup image
        this.setupImage();
    }

     private setupImage(){
        // Set image
        let url = 'https://api.tim-specht.com/data/simulator/tutorial/bird.png';
        super.setImageSrc(url);
    }
}

To add a bird to the NightSky world, you have to call the addToWorld method as follows in the NightSky class.


import {World} from 'canvas-simulator';

class NightSky extends World{

    constructor(ctx){
        super(ctx, 400, 300);
        super.setBackgroundColor('black');

        // Initiate new instance of Bird
        let bird = new Bird();

        // Add bird to world
        // super.addToWorld(<Actor>, <x>, <y>)

        super.addToWorld(bird, 50, 50);
    }
}

The whole script, after combining the imports properly, would look something like this, right now:


import {Actor, World} from 'canvas-simulator';

// Bird class
class Bird extends Actor{
    constructor(){
        super();
        this.setupImage();
    }

     private setupImage(){
        let url = 'https://api.tim-specht.com/data/simulator/tutorial/bird.png';
        super.setImageSrc(url);
    }
}

// NightSky class
class NightSky extends World{

    constructor(ctx){
        super(ctx, 400, 300);
        super.setBackgroundColor('black');
        let bird = new Bird();
        super.addToWorld(bird, 50, 50);
    }
}

// Initiate NightSky
let ctx = document.getElementById('canvas').getContext('2d');
let sky = new NightSky(ctx);

Animating!

To make the bird move, each Actor subclass can implement a method which is called animate (must be public). We can make our bird fly over the screen like this:

class Bird extends Actor{
    constructor(){
        super();
        this.setupImage();
    }

    public animate(){
        super.setX(super.getX() + 1);
    }

    private setupImage(){
        let url = 'https://api.tim-specht.com/data/simulator/tutorial/bird.png';
        super.setImageSrc(url);
    }
}

Now the bird moves quite slowly to the right of the screen.

Wrapping Up

Now that we have the code for our first World complete, we need to bundle it properly to use it in the browser.

You can use tools like browserify or WebPack to do so.

If you want to learn more about the library, please checkout the documentation.