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

nodegamesjs

v1.1.6

Published

Nodegames is a node.js game engine inspired by Pygame

Downloads

12

Readme

Nodegames 1.1.6 by willmil11

Installation

  1. You will be required to have node.js and npm installed as well as having an internet connection.
  2. Run the following command: npm install nodegamesjs
  3. You are now ready to use nodegames!

Update

  1. You will be required to have node.js and npm installed as well as having an internet connection.
  2. Run the following command: npm update nodegamesjs
  3. You are now ready to use nodegames!

Package your game to an executable

Use nodegamesjs-forge (in-dev so won't work well at all, at least for now)

Usage

First you'll have to require the module.

var nodegames = require("nodegamesjs");

Then init nodegames with the following code:

//This will take no time if everything is correctly installed.
//If it's not the case it will install the missing dependecies logging the progress.
nodegames.init();

Then create a game with the following code:

var game = nodegames.newGame(function (game) {
    // The callback will be called once the game window has opened and is ready.
    // "game" is the game object that you'll use to control the game.
}, width, height)
//Change the above "width" and "height" to the actual width and height

In the following stuff "game" represents the callback argument and as so the game object if you change the argument name you'll have to change the name in the following stuff.

Set window name

As the default name for your game window is "Untitled" you'll probably want to change it.

game.setWindowName("My game"); //Replace "My game" with the name you want.

Events

Here is the event list:

  • "resize": Called when the window is resized.
  • "close": Called when the window is closed.
  • "mousemove": Called when the mouse is moved on the window.
  • "keypress": Called when a key is pressed with the window focused.
  • "keyrelease": Called when a key is released with the window focused.
  • "mouseclick": Called when a mouse button is clicked with the window focused.
  • "mousescroll": Called when the mouse is scrolled on the window.
  • "imageload": Called when an image has been successfully loaded.
  • "imageunload": Called when an image has been successfully unloaded.
  • "error": Called when an error of any kind happens.
  • "framerender": Called when a frame is rendered.
  • "soundload": Called when a sound has been successfully loaded.
  • "soundunload": Called when a sound has been successfully unloaded.
  • "soundstop": Called when a sound has been successfully stoped from playing.

To use these events:

//Resize event
game.on("resize", function (event) {
    //"event" object contains:
    var width = event.width; //The new width
    var height = event.height; //The new height
    console.log("Resized to: " + width + "x" + height);
})
//Close event
game.on("close", function () {
    console.log("Game window closed.");
})
//Mousemove event
game.on("mousemove", function (event) {
    //"event" object contains
    var x = event.x //The new x coordinate of the mouse
    var y = event.y //The new y coordinate of the mouse
    var direction = event.direction //The direction the mouse is going to (up, down, left, right, upright, upleft, downright, downleft)
    var speed = event.speed //The speed the mouse moved
    var movement = event.movement //The raw movement values
    var movementX = movement.x //The x raw movement value
    var movementY = movement.y //The y raw movement value
    console.log("Moved mouse to " + x + ", " + y + " in direction: " + direction + " at speed: " + speed);
})
//Keypress event
game.on("keypress", function (event) {
    //"event" object contains
    var key = event.key; //Which key has been pressed
    var shiftKey = event.shiftKey; //Is shift pressed while pressing that key
    var ctrlKey = event.ctrlKey; //Is control pressed while pressing that key
    console.log("Key pressed: " + key + ", is shift pressed: " + shiftKey + ", is control pressed: " + ctrlKey);
})
//Keyrelease event
game.on("keyrelease", function (event) {
    //"event" object contains
    var key = event.key; //Which key has been released
    var shiftKey = event.shiftKey; //Was shift pressed when the key was still pressed
    var ctrlKey = event.ctrlKey; //Was control pressed when the key was still pressed
    console.log("Key released: " + key + ", was shift pressed: " + shiftKey + ", was control pressed: " + ctrlKey);
})
//Mouseclick event
game.on("mouseclick", function (event) {
    //"event" object contains
    var button = event.button; //Mouse button (scrollwheel, left, right, side1, side2)
    var x = event.x; //x position of mouse click
    var y = event.y; //y position of mouse click
    console.log("Mouse button pressed: " + button + " at " + x + ", " + y)
})
//Mousescroll event
game.on("mousescroll", function (event) {
    //"event" object contains:
    var direction = event.direction; //Direction of scroll (up, down, left, right)
    var speed = event.speed; //Speed of scroll
    console.log("Scrolling " + direction + " at speed: " + speed)
})
//Imageload event
game.on("imageload", function (id) {
    //"id" is the loaded image id
    console.log("Image with id: " + id + " loaded.")
})
//Imageunload event
game.on("imageunload", function (id) {
    //"id" is the unloaded image id
    console.log("Image with id: " + id + " unloaded.")
})
//Error event
game.on("error", function (error) {
    //"error" object contains:
    var exit_code = error.exit_code; //Always 1 as 1 represents an error.
    var message = error.data.message; //Message (what is the error that happened)
    var problem = error.data.problem; //Problem (what went wrong)
    
    //For some errors (with the image and sound related errors) there is the image/sound id
    var id = error.data.id; //May be null for non image/sound related errors

    console.log("Error with exit code: " + exit_code + ", message: " + message + " and problem " + problem)
})
//Framerender event
game.on("framerender", function () {
    console.log("Rendered a frame.")
})
//Soundload event
game.on("soundload", function (id) {
    //"id" is the loaded sound id
    console.log("Sound with id: " + id + " loaded.")
})
//Soundunload event
game.on("soundunload", function (id) {
    //"id" is the unloaded sound id
    console.log("Sound with id: " + id + " unloaded.")
})
//Soundstop event
game.on("soundstop", function (id) {
    //"id" is the sound stopped from playing id
    console.log("Sound with id: " + id + " has been stopped from playing.")
})

Draw

To draw stuff you can use the following:

//Draw a pixel
//
//Syntax: game.pixel(x:int, y:int, rgb:array
//

//Example:
game.pixel(0, 0, [255, 255, 255]) //White pixel at coordinates 0, 0
//Draw a rectangle
//
//Syntax: game.rect(x:int, y:int, height:int, width:int, rgb:array, rotation:int/null, hollow?:boolean/null)
//

//Examples:
game.rect(0, 0, 10, 10, [255, 255, 255]) //White rectangle at coordinates 0, 0 of width and height 10px, rotation of 0 degrees, not hollow
game.rect(0, 0, 10, 10, [255, 255, 255], 45) //White rectangle at coordinates 0, 0 of width and height 10px, rotation of 45 degrees, not hollow
game.rect(0, 0, 10, 10, [255, 255, 255], 45, true) //White rectangle at coordinates 0, 0 of width and height 10px, rotation of 45 degrees, hollow
game.rect(0, 0, 10, 10, [255, 255, 255], 45, false) //White rectangle at coordinates 0, 0 of width and height 10px, rotation of 45 degrees, not hollow
//Draw a circle
//
//Syntax: game.circle(x:int, y:int, radius:int/float, rgb:array, hollow?:boolean/null)
//

//Exemples:
game.circle(0, 0, 10, [255, 255, 255]) //White circle at coordinates 0, 0 of radius 10px, not hollow
game.circle(0, 0, 10, [255, 255, 255], true) //White circle at coordinates 0, 0 of radius 10px, hollow
game.circle(0, 0, 10, [255, 255, 255], false) //White circle at coordinates 0, 0 of radius 10px, not hollow
//Draw a line
//
//Syntax: game.line(x1:int, y1:int, x2:int, y2:int, rgb:array, rotation:int/null)
//

//Examples:
game.line(0, 0, 10, 0, [255, 255, 255]) //White line from coordinates 0, 0 to 10, 0 with a rotation of 0 degrees
game.line(0, 0, 10, 0, [255, 255, 255], 45) //White line from coordinates 0, 0 to 10, 0 with a rotation of 45 degrees
//Draw text
//
//Syntax: game.text(x:int, y:int, text:string, rgb:array, fontSize:int, fontName:string, rotation:int/null)
//

//Examples:
game.text(0, 0, "Hello world!", [255, 255, 255], 10, "Arial") //"Hello world!" in white at coordinates 0, 0 with font name "Arial" font size 10 and a rotation of 0 degrees.
game.text(0, 0, "Hello world!", [255, 255, 255], 10, "Arial", 45) //"Hello world!" in white at coordinates 0, 0 with font name "Arial" font size 10 and a rotation of 45 degrees.
//Clear window/rectangle
//
//Syntax: game.clear() or game.clear(x:int, y:int, width:int, height:int, rotation:int/null)
//

//Examples:
game.clear() //Clear whole window
game.clear(0, 0, 10, 10) //Clear a rectangle of 10px as width and height at coordinates 0, 0 with for rotation 0 degrees
game.clear(0, 0, 10, 10, 45) //Clear a rectangle of 10px as width and height at coordinates 0, 0 with for rotation 45 degrees
//Draw image
//
//Syntax: game.image(image_id:string, x:int, y:int, width:int, height:int, rotation:int/null)
//

//Examples:
game.image("My_image", 0, 0, 10, 10) //Image loaded with id "My_image" at coordinates 0, 0, with for width and height 10px and for rotation 0 degrees
game.image("My_image", 0, 0, 10, 10, 45) //Image loaded with id "My_image" at coordinates 0, 0, with for width and height 10px and for rotation 45 degrees

After 'drawing' all of your stuff you'll notice nothing is displayed on the window it's because you have to render it with the renderFrame method, add this after 'drawing' all of your stuff:

game.renderFrame()

It is not recommanded to render frames quicker than each 10ms (100fps) as it is the maximum stable fps you can get with nodegames. If you exceed it can lag a lot.

Loading/unloading images

To load/unload an image do this:

game.loadImage(image, id)

Image must be a jpg or png that you can get like this:

var fs = require("fs")
var image = fs.readFileSync("/path/to/image");

The 'problem' of the loadImage method is that it returns a promise so it is not syncronous but the good thing about that is that you can just use .then or await to set a callback or wait for the image to be loaded. Now to unload an image you can do the following:

game.unloadImage(id)

This should unload the image, this does not return any kind of promise tho. just assume it is 'syncronous' and unloads the image instantly which is almost the case

Loading/unloading and playing/stopping sounds

To load/unload a sound do this:

game.loadSound(sound, id)

Sound must be a wav or mp3 that you can get like this:

var fs = require("fs")
var sound = fs.readFileSync("/path/to/sound");

The 'problem' of the loadSound method is that it returns a promise so it is not syncronous but the good thing about that is that you can just use .then or await to set a callback or wait for the sound to be loaded. Now to unload a sound you can do the following:

game.unloadSound(id)

This should unload the sound, this does not return any kind of promise tho. just assume it is 'syncronous' and unloads the sound instantly which is almost the case To play a sound you can do the following:

//
//Syntax: game.playSound(id:string, loop:boolean/null, volume:int(0-100)/null)
//

//Examples:
game.playSound("My_sound") //Play sound with id "My_sound" once at volume 100%
game.playSound("My_sound", true) //Play sound with id "My_sound" in loop at volume 100%
game.playSound("My_sound", false) //Play sound with id "My_sound" once at volume 100%
game.playSound("My_sound", true, 50) //Play sound with id "My_sound" in loop at volume 50%
game.playSound("My_sound", false, 50) //Play sound with id "My_sound" once at volume 50%

To stop a sound you can do the following:

game.stopSound(id)

This should stop the sound from playing.

Pointer control

To hide the pointer:

game.pointer.hide()

To show the pointer:

game.pointer.show()

To try to lock the pointer

game.pointer.lock()

To unlock the pointer

game.pointer.unlock()

Change pointer style

Here is the pointer style list:

  • "default"
  • "context-menu"
  • "help"
  • "pointer"
  • "progress"
  • "wait"
  • "cell"
  • "crosshair"
  • "text"
  • "vertical-text"
  • "alias"
  • "copy"
  • "move"
  • "no-drop"
  • "not-allowed"
  • "grab"
  • "grabbing"
  • "all-scroll"
  • "col-resize"
  • "row-resize"
  • "n-resize"
  • "e-resize"
  • "s-resize"
  • "w-resize"
  • "ne-resize"
  • "nw-resize"
  • "se-resize"
  • "sw-resize"
  • "ew-resize"
  • "ns-resize"
  • "nesw-resize"
  • "nwse-resize"
  • "zoom-in"
  • "zoom-out"
game.pointer.setStyle(style); //Replace "style" with the pointer style you want

Help me

If you'd like to help you can take a peek at the code, enable/disable devtools in the game window like this:

game.cheats.devtools.enable(); //Enable devtools
game.cheats.devtools.disable(); //Disable devtools

And then press F12 to open devtools. If you find bugs or have a suggestion you can send them in the issues tab.

Github

Click to go to the repo

Changelog

1.1.6

  • Updated readme.

1.1.5

  • Edited readme and added a minor feature: before it was not shown that you can play a sound in loop. And the minor feature is that now you can choose the volume of a sound when playing it.

1.1.4

  • Changed readme to indicate that nodegamesjs-forge is released and added a link to the npm page.

1.1.3

  • Upgraded what 1.1.2 added.

1.1.2

  • Added some code to prepare for nodegamesjs-forge release (will be a way to package your game to an executable).

1.1.1

  • Little fix in the readme.

1.1.0

  • Added a way to change pointer style

1.0.0

  • Initial release