simply2d v1.3.6
Simply2D
Introduction
This library for nodejs allows you, thanks to SDL2, to create windows and draw on the screen.
Installation
You can install this library using npm i simply2d.
This library require SDL2 in order to run. Simple DirectMedia Layer is a cross-platform library designed to provide low level access to different resources such as video. SDL2 is available for windows, linux and macos as well.
For Windows
Visual Studio VC tools are required. For more, see https://github.com/nodejs/node-gyp#readme
For Linux
To use Simply2D you must have installed make, a C++ compiler and SDL2. To install SDL2 you can use the following command:
- For Ubuntu:
sudo apt install libsdl2-2.0-0 libsdl2-image-2.0-0 libsdl2-ttf-2.0-0 - For Red Hat and Fedora:
sudo dnf install SDL2 SDL2_image SDL2_ttf
If you encounter any problems, it is recommended to install the latest version of python3 and run
python3 -m pip install setuptoolsor justpip install setuptools
For contributors
On Windows you must create the following files in your project directory:
š bin
ā š sdl
ā ā š winx64
ā ā ā š SDl2.dll
ā ā ā š SDL2.lib
ā ā ā š SDL2main.lib
ā ā ā š SDL2test.lib
ā š sdlimg
ā ā š winx64
ā ā ā š SDL2_image.dll
ā ā ā š SDL2_image.lib
ā š sdlttf
ā ā š winx64
ā ā ā š SDL2_ttf.dll
ā ā ā š SDL2_ttf.libThese files can be extracted from the following links:
- https://github.com/libsdl-org/SDL/releases/download/release-2.30.7/SDL2-devel-2.30.7-VC.zip
- https://github.com/libsdl-org/SDL_image/releases/download/release-2.8.2/SDL2_image-devel-2.8.2-VC.zip
- https://github.com/libsdl-org/SDL_ttf/releases/download/release-2.22.0/SDL2_ttf-devel-2.22.0-VC.zip
Under the lib/x64 path
API
Canvas
The Canvas class allows you to create a canvas and to draw on it
import { Canvas } from "simply2d";
const canvas = new Canvas(
"my canvas", // window title
600, // window width
400, // window height
);You can specify other window options
const canvas = new Canvas("title", 200, 400, 0, 0, {
mode: "fullscreen",
resizable: false,
scale: 2,
antiAliasing: true
})Canvas.show
show(): voidShow the window
Canvas.hide
hide(): voidHide the window
Canvas.setBackgroundColor
setBackgroundColor(color: RGBAColor): voidSet the background color. An RGBAColor is an object that contains red, green, blue and alpha properties.
Canvas.sleep
sleep(ms: number): voidSleep ms milliseconds
Canvas.drawPoint
drawPoint(color: RGBAColor, position: Position): voidDraw a point on the screen. Position is an object with the x and y properties.
Canvas.drawLine
drawLine(color: RGBAColor, from: Position, to: Position): voidDraw a line from from coordinates to to coordinates
Canvas.drawRectangle
drawRectangle(color: RGBAColor, pos: Position, width: number, height: number, fill?: boolean): voidDraw a rectangle in the canvas
get Canvas.width
get width(): numberReturn the window width
get Canvas.height
get height(): numberReturn the window height
Canvas.clear
clear(): voidClear the screen
Canvas.loadRawData
loadRawData(pixels: Uint8Array, bitPerPixel: 8 | 16 | 24 | 32): voidWrite directly into the video buffer
Canvas.loadPNG
loadPNG(filename: string): voidWrite an PNG image into the canvas
Canvas.loadJPG
loadJPG(filename: string): voidWrite a JPG image into the canvas
Canvas.dumpPNG
dumpPNG(filename: string): voidSave the canvas as a PNG file
Canvas.dumpJPG
dumpJPG(filename: string): voidSave the canvas as a JPG file
Canvas.getScale
getScale(): numberReturn the scale factor
Canvas.onClick
onClick(callback: (x: number, y: number) => void): voidOn click event
Canvas.onKeyDown
onKeyDown(callback: (key: Key) => void): voidOn key down event
Canvas.onKeyUp
onKeyUp(callback: (key: Key) => void): voidOn key up event
Canvas.initRenderSequence
initRenderSequence(): voidIt is used to initialize the rendering sequence. Every drawing process will not be displayed until exposeRender is called
Canvas.exposeRender
exposeRender(): voidShows rendering
Canvas.waitFrame
waitFrame(): voidSleep for a certain time before the next frame is rendered
Canvas.loop
loop(callback: () => void): voidStart the rendering loop
Canvas.onKeysDown
onKeysDown(callback: (key: Key[]) => void): voidOn keys down event
Canvas.onKeysUp
onKeysUp(callback: (key: Key[]) => void): voidOn keys up event
Canvas.loadFont
loadFont(fontName: string, filePath: string): voidLoad a new font
Canvas.drawText
drawText(text: string, fontName: string, size: number, color: RGBAColor, start: Position): voidDraw text on the canvas
Canvas.drawArc
drawArc(color: RGBAColor, center: Position, radius: number, startingAngle: number, endingAngle: number): voidDraw an arc
Canvas.convertPolarCords
static convertPolarCoords(center: Position, angle: number, radius: number): PositionConvert polar coordinates into x, y coordinates
Canvas.loadTexture
loadTexture(textureID: string, filePath: string): voidLoad a new texture from the specified file
Canvas.drawTexture
drawTexture(textureID: string, pos: Position): voidDraw a previously loaded texture
Canvas.getScreenResolution
static getScreenResolution(): ResolutionGet the screen resolution
Canvas.getTextureResolution
getTextureResolution(textureID: string): ResolutionGet the resolution of a previously loaded texture
Canvas.drawPath
drawPath(path: Path, pos?: Position, color?: RGBAColor)Draw a path
Canvas.addLayer
addLayer(layerId: string): voidAdd a new layer
Canvas.removeLayer
removeLayer(layerId: string): voidRemove layer
Canvas.changeLayer
changeLayer(layerId: string): voidChange current layer
Canvas.useMainLayer
useMainLayer(): voidChange to the main default layer
get Canvas.frameTime
get frameTime(): numberGet current frame time, only if the scene is rendered with loop
get Canvas.fps
get fps(): numberGet current frame time, only if the scene is rendered with loop
Canvas.getLayers
getLayers(): Layer[]Get layers in order of appearance
Canvas.activateLayer
activateLayer(layerID: string): voidActivate a layer
Canvas.deactivateLayer
deactivateLayer(layerID: string): voidDeactivate a layer
get Canvas.antialiasing
get antialiasing(): booleanGet antialiasing flag
set Canvas.antialiasing
set antialiasing(): voidSet antialiasing flag
Canvas.clearAll
clearAll(): voidClear all layers, including the main layer
Canvas.moveLayer
moveLayer(layerID: string, direction: "up" | "down", steps: number = 1): voidChange layer rendering priority
Canvas.attach
attach(buffer: Uint8Array, bitPerPixel: PixelFormat): voidAttach a buffer to the video memory. The loop and every other drawing functions will be disabled.
Canvas.detach
detach(): voidDetach the current buffer from the video memory
Canvas.close
close(): voidClose the window
Canvas.endLoop
endLoop(): voidTerminate the current loop
get Canvas.mousePosition
get mousePosition(): PositionReturn the current mouse position
Canvas options
type CanvasOptions = {
mode?: "fullscreen" | "minimized" | "maximized" | "hidden" | "shown",
resizable?: boolean,
scale?: number,
antiAliasing?: boolean,
removeWindowDecoration?: boolean
}Canvas constant positions
It is possible to access constant positions relative to the size of the canvas. Example:
import { Canvas, Colors } from "simply2d"
const canvas = new Canvas("myCanvas", 200, 200);
canvas.drawLine(Colors.BLUE, canvas.TOP_LEFT /* the top left corner */, canvas.BOTTOM_RIGHT /* the bottom right corner */);Colors
Colors is an object that contains different standard colors and some useful function
import { Canvas, Colors } from "simply2d";
const canvas = new Canvas("title", 100, 100);
canvas.setBackgroundColor(Colors.RED); // #FF0000 hex color
canvas.drawLine(
Colors.BLACK, // #000000 hex color
{
x: 0,
y: 0
},
{
x: canvas.getWidth(),
y: canvas.getHeight()
}
);Colors.from8bit
from8bit(color256: number): RGBAColorConvert an 8 bit color into a 24 bit color
Colors.from16bit
from16bit(color: number): RGBAColorConvert a 16 bit color into a 24 bit color
Colors.from24bit
from24bit(color: number): RGBAColorConvert a 24 bit color number into a 24 bit color RGBAColor object
Colors.from32bit
from32bit(color: number): RGBAColorConvert a 32 bit color number into a RGBAColor object
Position
Is a type for storing coordinates
import { Position } from "simply2d" // only in typescript
let cord: Position = {
x: 203,
y: 301
}RGBAColor
Used to save RGBA color values
import { RGBAColor } from "simply2d" // only in typescript
let color: RGBAColor = {
red: 255,
green: 255,
blue: 0,
alpha: 255
}Resolution
Used to save a pair of width and height values
import { Resolution } from "simply2d"
let res: Resolution = {
w: 1920,
h: 1080
}Path
A path is an object used to represent a polyline
import { Path } from "simply2d";
const p = new Path();
p.setStart({ x: 10, y: 15 });
p.pushLine({ x: 20, y: 60 });
p.close();PixelFormats
Static class that stores all the available pixel formats
PixelFormats.rgb332;
PixelFormats.rgb565;
PixelFormats.rgb888;
PixelFormats.rgba8888;1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago