Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A sandbox framework to fast-prototype tile-based games in HTML5 and JavaScript

License

NotificationsYou must be signed in to change notification settings

cstoquer/pixelbox

Repository files navigation

pixelbox

A sandbox framework to fast-prototype tile-based games

Pixelbox takes inspiration from fantasy consoles likePICO8 and game creation frameworks like Unity3D.

Install

From version 2, the Pixelbox package no longer includes the editor. Instead, the editor is now a standalone application that can be downloadedon Itch.io.

Use

A Pixelbox project has the following structure:

assets/ ├── tilesheet.png ├── palette.png └── maps.jsonaudio/build/src/ └── main.jstools/node_modules/project.pixelboxpackage.jsonindex.html
  • assets/ is where game assets go (images, text files, JSON)
  • audio/ is where sounds and music go
  • src/ is the source code folder, andmain.js is the entry file of the game

Programming with pixelbox

Program structure

The game entry point is thesrc/main.js file. If you provide anexports.update function, Pixelbox will call it every frame.

Building is done usingbrowserify which gives you access torequire (orimport) andexports to easily modularize your project.

Assets

Pixelbox automatically loads all assets at startup, before executing the game code. All supported files added inside theassets/ directory will be available in theassets global object. The structure follows the structure of the directory. For instance, the file located inassets/sprites/player.png will be accessible withassets.sprites.player.

Supported files include:

  • images (.png,.jpg)
  • JSON formatted data (.json)
  • plain text files (.txt,.css,.vert,.frag)

You have direct access to the content of JSON files.

Because files are loaded inside theassets object and refered wthout their extension, you cannot have a file and a directory with the same name inside the same directory.

Pixelbox API

Pixelbox exposes the following methods directly on the global scope:

Drawing graphics

  • cls() clear screen withpaper color
  • sprite(n, x, y [,flipH [,flipV [, flipR]]]) draw sprite numbern on screen at pixel position(x, y)flipH andflipV can be used to flip sprites horizontally or vertically,flipR adds a 90 degree clockwise rotation
  • draw(image, x, y [,flipH [,flipV [, flipR]]]) draw anImage,Texture orTileMap on screen at pixel position(x, y)
  • tilesheet(image) change image used as default tilesheet
  • rect(x, y, w, h) stroke a rectangle withpen color
  • rectf(x, y, w, h) fill a rectangle withpaper color
  • camera(x, y) scroll add further drawing by provided position

Printing text

Pixelbox has a predefined"minitext" bitmap font that you can use to print text on screen or in textures.Minitext is available by default, but can be disabled in the project settings.

  • print(text, [x, y]) if x, y is provided, printtext at pixel position (x,y);else print text at cursor current position
  • println(text) printtext and feed new line;when the cursor reaches the bottom of the screen, vertical scroll is applied(just like it would happen in a terminal)
  • locate(i, j) set cursor position at columni linej
  • pen(colorId) set text color tocolorId in color palette
  • paper(colorId) set paper color tocolorId in color palette

User controls

  • btn state of the buttons — by default, available buttons are:up,down,left,right,A,B (buttons names and binding can be configured in the project settings)
  • btnp whether button has been pressed during current frame
  • btnr whether button has been released during current frame

Playing sound

  • sfx('sound'); play the sound.mp3 file inaudio/ folder
  • music('bgm'); play the bgm.mp3 file in loop; if another music is already playing, it will cross fade to the new music; if nosoundId is provided, music stops

AudioManager is the module that handles audioloading and playback. You have access to its instance onaudioManager.

Other utility functions

  • clamp(value, min, max) clip a value between min and max
  • chr$(n) return a character from coden
  • random(n) return a randominteger between 0 and n
  • inherits(Child, Parent) make classChild inherit from classParent

Pixelbox components

Texture

Texture is a canvas that can be drawn, and inside which things can be drawn. In Canvas2D mode, it is implemented with a HTML canvas. In WebGL mode, it is implemented with a GLTexture2D.

The main screen (accessible by the global variable$screen) is an instance of Texture and most of its methods are accessible from the global scope.

To create new texture, you need to require theTexture module:

varTexture=require('pixelbox/Texture');vartexture=newTexture(128,128);// create a new texture of 128 by 128 pixels

Texture settings

texture.resize(width,height);texture.setPalette(palette);texture.pen(colorIndex);// set PEN color index from palette (pen is used for text and stroke)texture.paper(colorIndex);// set PAPER color index from palette (paper is used for fill)texture.setTilesheet(tilesheet);// set tilesheet used for this texture

A tilesheet is an Image containing 256 sprites organized in a 16 x 16 grid (the size of the tilesheet depend of the sprite size you set for your game).

Rendering

texture.clear();// clear texture (it becomes transparent)texture.cls();// clear screen (the whole texture is filled with the PAPER color)texture.sprite(sprite,x,y,flipH,flipV,flipR);// draw a sprite from current tilesheet in the texturetexture.draw((img,x,y,flipH,flipV,flipR);// draw an image (or Texture or Map) in the texturetexture.rect(x,y,width,height);// stroke a rectangletexture.rectf(x,y,width,height);// fill a rectangle

Printing text

texture.locate(i,j);// set text cursor to specified locationtexture.print(text,x,y);// print some texttexture.println(text);// print some text and feed a new line

Tile Maps

Pixelbox has a built-inTileMap component.A TileMap consist of:

  • A name
  • A tilesheet — when the tilesheet is changed, the whole map will be redrawn with the new tilesheet
  • A grid of sprites from the tilesheet plus few flags to flip or rotate sprites

Once created, a tile map is rendered in one draw call only.

TileMap can be used to render a level made of sprites, or just to store game data.

You can create tile maps from your game code; But usually, you will be using Pixelbox's tools (see the Tools section below) to create and manage your maps as game assets. A map can then be retrieved by its name with Pixelbox'sgetMap function. The tile map can then be drawn on screen (or in another Texture), modified, copied, pasted, resized, etc.

When stored in assets, the map is compressed to Pixelbox format to reduce file size.

Get tile map

varmap=getMap('mapName');// get a tile map by its name

To create new maps, you need to require theMap module:

varTileMap=require('pixelbox/TileMap');varmap=newTileMap(16,16);// create a new tile map of 16 by 16 tiles

Draw map

map.draw(x,y);// draw map on screen at [x, y] positiondraw(map,x,y);// idem, using the global draw functiontexture.draw(map,x,y);// draw a map in another texturemap.setTilesheet(tilesheet);// set tilesheet to use for this map// The whole map is redrawn when calling this function

Access map content

map.get(x,y);// returns the Tile at position [x, y]. null if emptymap.set(x,y,tile,flipH,flipV,flipR,flagA,flagB);// add a tilemap.remove(x,y);// remove tile at position [x, y]. (set it to null)map.find(tile,flagA,flagB);// find all tiles with specified properties

Modifying maps programatically

map.resize(width,height);// resize the map (size unit is tiles)map.clear();// Reset the whole map content by setting all its tiles to nullvarmapCopy=map.copy(x,y,width,height);// copy this map to a new one// x, y, width, height can be specified to copy only a rectangular part of the mapmap.paste(mapCopy,x,y,merge);// paste map data in the map at position offset [x, y]// if 'merge' flag is set, then null tiles will not overwrite current map tile

Gamepad

Thegamepad module allows for easy access to gamepads if the browser supports it. When the gamepad feature is enabled in the project settings, you get access to these objects on the global scope:

gamepads[id];// get gamepad state. id is a number in the range [0..4] (4 is computer keyboard)gamepad;// Merge states of all gamepads and return a global gamepad state.

Gamepad state works like keyboard controls: You get the state of each button, button presses and button releases, plus the values of analog controls.

varstate=gamepads[0];// get state of gamepad id 0// buttons:state.btn.A;// state of A buttonstate.btn.B;// state of B buttonstate.btn.X;// state of X buttonstate.btn.Y;// state of Y buttonstate.btn.start;// state of 'start' buttonstate.btn.back;// state of 'back' buttonstate.btn.up;// directionnal pad's up buttonstate.btn.down;// directionnal pad's down buttonstate.btn.left;// directionnal pad's left buttonstate.btn.right;// directionnal pad's right buttonstate.btn.lb;// left bumper buttonstate.btn.rb;// right bumper buttonstate.btn.lt;// left trigger buttonstate.btn.rt;// right trigger button// button press and release.// the structure is the same as state.btn but the values are true only// on button press or release.state.btnp;// button pressstate.btnr;// button release// analog valuesstate.x// x axe value (first stick horizontal)state.y// y axe value (first stick vertical)state.z// z axe value (second stick horizontal)state.w// w axe value (second stick vertical)state.lt// left trigger analog valuestate.rt// right trigger analog value

PataTracker

Pixelbox editor is bundled with a music tracker calledPataTracker.The tracker player must be enabled in the project settings. Player allows to directly plays the songs in thejson formatted tracker files.

PataTracker player is exposed as apatatracker global variable.

patatracker.playSong(songNumber);patatracker.stop();

PataTracker automatically loads the project's album data (assets/patatracker.json). If you need to load a different album, you can do it with the following API:

patatracker.loadData(data);

Bleeper

Bleeper is the sound effect editor of Pixelbox. Like for PataTracker, it must be enabled in the project settings.Note that Bleeper depends on theAudioManager component.

There are several ways to play Bleeper sounds:

Named sounds

If the sound is named, it is accessible on theassets global, and automatically added to AudioManager.

// from assets globalassets.bleeper.mySound.play(volume,panoramic,pitch);// all parameters optional// using audioManagersfx('mySound',volume,panoramic,pitch);// using default channelaudioManager.playSound('sfx','mySound',volume,panoramic,pitch);

Using bleeper module

The Bleeper module exposes an array of all sounds defined in the program.

varbleeper=require('pixelbox/bleeper');bleeper.sounds[3].play(volume,panoramic,pitch);

About

A sandbox framework to fast-prototype tile-based games in HTML5 and JavaScript

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors6


[8]ページ先頭

©2009-2025 Movatter.jp