Function
(gopt?: KAPLAYOpt): KAPLAYCtx Initialize KAPLAY context. The starting point of all KAPLAY games.
// Start KAPLAY with default options (will create a fullscreen canvas under <body>)
kaplay()
// Init with some options
kaplay({
width: 320,
height: 240,
font: "sans-serif",
canvas: document.querySelector("#mycanvas"),
background: [ 0, 0, 255, ],
})
// All KAPLAY functions are imported to global after calling kaplay()
add()
onUpdate()
onKeyPress()
vec2()
// If you want to prevent KAPLAY from importing all functions to global and use a context handle for all KAPLAY functions
const k = kaplay({ global: false })
k.add(...)
k.onUpdate(...)
k.onKeyPress(...)
k.vec2(...)
group
Start
Constant
: () => void End everything.
Interface
: KAPLAY configurations.
?: number Height of game.
?: number Pixel scale / size.
?: boolean If stretch canvas to container when width and height is specified
?: boolean When stretching if keep aspect ratio and leave black bars on remaining spaces.
?: boolean If register debug buttons (default true)
?: Key Key that toggles debug mode
?: string Default font (defaults to "monospace").
?: number Device pixel scale (defaults to 1, high pixel density will hurt performance).
?: boolean Disable antialias and enable sharp pixel display.
?: HTMLCanvasElement The canvas DOM element to use. If empty will create one.
?: HTMLElement The container DOM element to insert the canvas if created. Defaults to document.body.
?: RGBValue | RGBAValue | string Background color. E.g. [ 0, 0, 255 ] for solid blue background, or [ 0, 0, 0, 0 ] for transparent background. Accepts RGB value array or string hex codes.
?: TexFilter Default texture filter.
?: number How many log messages can there be on one screen (default 8).
?: number How many seconds log messages stay on screen (default 4).
?: number Size of the spatial hash grid for collision detection (default 64).
?: boolean If translate touch events as mouse clicks (default true).
?: boolean If KAPLAY should render a default loading screen when assets are not fully ready (default true).
?: boolean If pause audio when tab is not active (default false).
?: Record<string, GamepadDef> Custom gamepad definitions (see gamepad.json for reference of the format).
?: TButtonDef Defined buttons for input binding.
?: number Limit framerate to an amount per second.
?: boolean If focus on the canvas on start (default true).
?: boolean If import all KAPLAY functions to global (default true).
?: TPlugin List of plugins to import.
?: boolean Enter burp mode.
?: boolean Make component's id ("sprite" for sprite() comp) be added as tags.
That means .is() will return true for components with that id.
default
true
experimental
This feature is in experimental phase, it will be fully released in v4000.0
?: number Padding used when adding sprites to texture atlas.
default
0
experimental
This feature is in experimental phase, it will be fully released in v4000.0
Function
(path?: string): string Sets the root for all subsequent resource urls.
This is useful when you want to load assets from a different domain, or setup
a base path for all assets.
param
path- The root path.
loadRoot("https://myassets.com/");
loadSprite("bean", "sprites/bean.png"); // will resolve to "https://myassets.com/sprites/bean.png"
loadRoot("./"); // useful for Itch.io
group
Assets
Function
(name: string | null, src: LoadSpriteSrc | LoadSpriteSrc[], opt?: LoadSpriteOpt): Asset<SpriteData> Load a sprite into asset manager, with name and resource url and optional config.
param
name- The asset name.
param
src- The resource url.
param
opt- The optional config.
// due to browser policies you'll need a static file server to load local files
loadSprite("bean", "bean.png");
loadSprite("apple", "https://play.kaplayjs.com/sprites/apple.png");
// slice a spritesheet and add anims manually
loadSprite("bean", "bean.png", {
sliceX: 4,
sliceY: 1,
anims: {
run: {
from: 0,
to: 3,
},
jump: {
from: 3,
to: 3,
},
},
});
returns
The asset data.
since
v2000.0
group
Assets
Function
(src: LoadSpriteSrc, data: SpriteAtlasData): Asset<Record<string, SpriteData>> Load sprites from a sprite atlas.
param
src- The image resource url.
param
data- The sprite atlas data.
// See #SpriteAtlasData type for format spec
loadSpriteAtlas("sprites/dungeon.png", {
"hero": {
x: 128,
y: 68,
width: 144,
height: 28,
sliceX: 9,
anims: {
idle: { from: 0, to: 3 },
run: { from: 4, to: 7 },
hit: 8,
},
},
});
const player = add([
sprite("hero"),
]);
player.play("run");
returns
The asset data.
since
v2000.0
group
Assets
Function
(src: LoadSpriteSrc, url: string): Asset<Record<string, SpriteData>> Load sprites from a sprite atlas with URL.
param
src- The image resource url.
param
url- The json resource url.
// Load from json file, see #SpriteAtlasData type for format spec
loadSpriteAtlas("sprites/dungeon.png", "sprites/dungeon.json")
const player = add([
sprite("hero"),
])
player.play("run")
returns
The asset data.
since
v2000.0
group
Assets
Function
(name: string | null, imgSrc: LoadSpriteSrc, jsonSrc: string | AsepriteData): Asset<SpriteData> Load a sprite with aseprite spritesheet json (should use "array" in the export options).
param
name- The asset name.
param
imgSrc- The image resource url.
loadAseprite("car", "sprites/car.png", "sprites/car.json")
returns
The asset data.
since
v2000.0
group
Assets
Function
(name: string | null, src: string): Asset<SpriteData> param
name- The asset name.
param
src- The resource url.
Load .pedit file.
deprecated
The format is not supported anymore.
returns
The asset data.
since
v2000.0
group
Assets
Function
(name?: string): Asset<SpriteData> Load default sprite "bean".
param
name- The optional name for bean.
loadBean();
// use it right away
add([
sprite("bean"),
]);
returns
The asset data.
since
v2000.0
group
Assets
Function
(name: string | null, url: string): Asset<any> Load custom JSON data from url.
param
name- The asset name.
param
url- The resource url.
returns
The asset data.
since
v3000.0
group
Assets
Function
(name: string | null, src: string | ArrayBuffer | AudioBuffer): Asset<SoundData> Load a sound into asset manager, with name and resource url.
Supported formats: mp3, ogg, wav.
param
name- The asset name.
param
src- The resource url.
loadSound("shoot", "/sounds/horse.ogg");
loadSound("shoot", "/sounds/squeeze.mp3");
loadSound("shoot", "/sounds/shoot.wav");
returns
The asset data.
since
v2000.0
group
Assets
Function
(name: string | null, url: string): void Like loadSound(), but the audio is streamed and won't block loading. Use this for big audio files like background music.
param
name- The asset name.
param
url- The resource url.
loadMusic("shoot", "/music/bossfight.mp3");
returns
The asset data.
since
v3001.0
group
Assets
Function
(name: string, src: string | BinaryData, opt?: LoadFontOpt): Asset<FontData> Load a font (any format supported by the browser, e.g. ttf, otf, woff).
param
name- The asset name.
// load a font from a .ttf file
loadFont("frogblock", "fonts/frogblock.ttf");
returns
The asset data.
since
v3000.0
group
Assets
Function
(name: string | null, src: string, gridW: number, gridH: number, opt?: LoadBitmapFontOpt): Asset<BitmapFontData> Load a bitmap font into asset manager, with name and resource url and information on the layout of the bitmap.
param
name- The asset name.
param
src- The resource url.
param
gridW- The width of each character on the bitmap.
param
gridH- The height of each character on the bitmap.
param
opt- The options for the bitmap font.
// load a bitmap font called "04b03", with bitmap "fonts/04b03.png"
// each character on bitmap has a size of (6, 8), and contains default ASCII_CHARS
loadBitmapFont("04b03", "fonts/04b03.png", 6, 8);
// load a font with custom characters
loadBitmapFont("myfont", "myfont.png", 6, 8, { chars: "☺☻♥♦♣♠" });
returns
The asset data.
since
v3000.0
group
Assets
Function
(name: string | null, vert?: string | null, frag?: string | null): Asset<ShaderData> Load a shader with vertex and fragment code.
param
name- The asset name.
param
vert- The vertex shader code. Null if not needed.
param
frag- The fragment shader code. Null if not needed.
// default shaders and custom shader format
loadShader("outline",
`vec4 vert(vec2 pos, vec2 uv, vec4 color) {
// predefined functions to get the default value by KAPLAY
return def_vert();
}`,
`vec4 frag(vec2 pos, vec2 uv, vec4 color, sampler2D tex) {
// turn everything blue-ish
return def_frag() * vec4(0, 0, 1, 1);
}`, false)
returns
The asset data.
since
v2000.0
group
Assets
Function
(name: string | null, vert?: string | null, frag?: string | null): Asset<ShaderData> Load a shader with vertex and fragment code file url.
param
name- The name of the asset.
param
vert- The vertex shader code. Null if not needed.
param
frag- The fragment shader code. Null if not needed.
// load only a fragment shader from URL
loadShaderURL("outline", null, "/shaders/outline.glsl")
retunrs
The asset data.
since
v3000.0
group
Assets
Function
(l: Promise<T>): Asset<T> Add a new loader to wait for before starting the game.
param
l- The loader to wait for.
load(new Promise((resolve, reject) => {
// anything you want to do that stalls the game in loading state
resolve("ok")
}))
returns
The asset data.
since
v3000.0
group
Assets
Function
(): number Get the global asset loading progress (0.0 - 1.0).
returns
The loading progress.
since
v3000.0
group
Assets
Function
(name: string): Asset<SpriteData> | null Get SpriteData from name.
param
name- The asset name.
returns
The asset data.
since
v3000.0
group
Assets
Function
(name: string): Asset<SoundData> | null Get SoundData from name.
param
name- The asset name.
returns
The asset data.
since
v3000.0
group
Assets
Function
(name: string): Asset<FontData> | null Get FontData from name.
param
name- The asset name.
returns
The asset data.
since
v3000.0
group
Assets
Function
(name: string): Asset<BitmapFontData> | null Get BitmapFontData from name.
param
name- The asset name.
returns
The asset data.
since
v3000.0
group
Assets
Function
(name: string): Asset<ShaderData> | null Get ShaderData from name.
param
name- The asset name.
returns
The asset data.
since
v3000.0
group
Assets
Function
(name: string): Asset<any> | null Get custom data from name.
param
name- The asset name.
returns
The asset data.
since
v3000.0
group
Assets
Class
: An asset is a resource that is loaded asynchronously.
static (data: D)
=> Asset<D> (action: (data: D) => void)
=> this (action: (err: Error) => void)
=> this (action: () => void)
=> this (action: (data: D) => void)
=> Asset<D> (action: (err: Error) => void)
=> Asset<D> (action: () => void)
=> Asset<D> Class
: static (src: LoadSpriteSrc, opt?: LoadSpriteOpt)
=> Promise<SpriteData> static (data: ImageSource, opt?: LoadSpriteOpt)
=> SpriteData static (url: string, opt?: LoadSpriteOpt)
=> Promise<SpriteData> Class
: static (buf: ArrayBuffer)
=> Promise<SoundData> static (url: string)
=> Promise<SoundData> Function
(comps?: CompList): GameObj Assemble a game object from a list of components, and add it to the game,
param
comps- List of components to add to the game object, or a game object made with
const player = add([
// List of components, each offers a set of functionalities
sprite("mark"),
pos(100, 200),
area(),
body(),
health(8),
// Plain strings are tags, a quicker way to let us define behaviors for a group
"player",
"friendly",
// Components are just plain objects, you can pass an object literal as a component.
{
dir: LEFT,
dead: false,
speed: 240,
},
]);
// .jump is provided by body()
player.jump();
// .moveTo is provided by pos()
player.moveTo(300, 200);
// .onUpdate() is on every game object, it registers an event that runs every frame
player.onUpdate(() => {
// .move() is provided by pos()
player.move(player.dir.scale(player.speed));
});
// .onCollide is provided by area()
player.onCollide("tree", () => {
destroy(player);
});
returns
The added game object that contains all properties and methods each component offers.
group
Game Obj
Function
(comps?: CompList<T>): GameObj<T> Create a game object like add(), but not adding to the scene.
param
comps- List of components to add to the game object.
const label = make([
rect(100, 20),
]);
// Add a new text to the label
label.add([
text("Hello, world!"),
]);
// Add game object to the scene
// Now it will render
add(label);
returns
The created game object that contains all properties and methods each component offers.
since
v3000.1
group
Game Obj
Function
(obj: GameObj): GameObj Remove and re-add the game obj, without triggering add / destroy events.
param
obj- The game object to re-add.
// Common way to use this is to have one sprite overlap another sprite, and use readd() to have the bottom sprite on top of the other.
// Create two sprites.
const greenBean = add([
sprite("bean"),
pos(200,140),
color(255, 255, 255),
area(),
]);
// This bean will overlap the green bean.
const purpleBean = add([
sprite("bean"),
pos(230,140),
color(255, 0, 255),
area(),
]);
// Example 1: simply call readd() on the target you want on top.
readd(greenBean);
// Example 2: using onClick() or other functions with readd().
// If you comment out the first example, and use this readd() with a function like onClick(), you
can keep switching which sprite is above the other ( click on edge of face ).
purpleBean.onClick(() => {
readd(greenBean);
});
greenBean.onClick(() => {
readd(purpleBean);
});
returns
The re-added game object.
since
v3001.0
group
Game Obj
Function
(tag: Tag | Tag[], opts?: GetOpt): GameObj[] Get a list of all game objs with certain tag.
param
tag- The tag to search for. Use "*" to get all objects.
param
opts- Additional options.
// get a list of all game objs with tag "bomb"
const allBombs = get("bomb");
// To get all objects use "*"
const allObjs = get("*");
// Recursively get all children and descendents
const allObjs = get("*", { recursive: true });
returns
A list of game objects that have the tag.
since
v2000.0
group
Game Obj
Function
(opt: QueryOpt): GameObj[] Get a list of game objects in an advanced way.
param
opt- The query options.
const bean = k.add(["friend", "bean"]);
const bean2 = k.add(["friend", "bean"]);
const bag = k.add(["friend", "bag"]);
// get bean
query({
include: "bean",
}) // will return [bean, bean2];
// get all friends excluding bean
query({
include: "friend",
exclude: "bean",
}); // will return [bag]
group
Game Obj
Function
(obj: GameObj): void Remove the game obj.
param
obj- The game object to remove.
// every time bean collides with anything with tag "fruit", remove it
bean.onCollide("fruit", (fruit) => {
destroy(fruit);
});
group
Game Obj
Function
(tag: Tag): void Remove all game objs with certain tag.
param
tag- The tag to search for.
// destroy all objects with tag "bomb" when you click one
onClick("bomb", () => {
destroyAll("bomb");
});
group
Game Obj
Interface
: Base interface of all game objects.
since
v2000.0
group
Game Obj
(comps?: CompList): GameObj Add a child.
param
comps- The components to add.
returns
The added game object.
since
v3000.0
(obj: GameObj<T>): GameObj<T> Remove and re-add the game obj, without triggering add / destroy events.
param
obj- The game object to re-add.
returns
The re-added game object.
since
v3000.0
(obj: GameObj): void Remove a child.
param
obj- The game object to remove.
since
v3000.0
(tag: Tag): void Remove all children with a certain tag.
param
tag- The tag to remove.
since
v3000.0
(): void Remove all children.
(tag: Tag | Tag[], opts?: GetOpt): GameObj[] Get a list of all game objs with certain tag.
param
tag- The tag to get.
since
v3000.0
(opt: QueryOpt): GameObj[] Get a list of all game objs with certain properties.
param
opt- The properties to get.
since
v3001.0
: GameObj[] readonly
Get all children game objects.
since
v3000.0
: string[] readonly
Get the tags of a game object. For update it, use `tag()` and `untag()`.
since
v3001.0
(): void Update this game object and all children game objects.
(): void Update this game object and all children game objects.
(): void Draw this game object and all children game objects.
: () => void Draw debug info in inspect mode
(comp: Comp | Tag): void Add a component.
const obj = add([
sprite("bean"),
]);
// Add opacity
obj.use(opacity(0.5));
since
v2000.0
(comp: Tag): void Remove a component with its id (the component name)
param
comp- The component id to remove. It means the name, if sprite, then it's "sprite".
// Remove sprite component
obj.unuse("sprite");
since
v2000.0
(compId: string | string[], op?: "and" | "or"): boolean Check if game object has a certain component.
param
compId- The component id(s) to check.
param
op- The operator to use when searching for multiple components. Default is "and".
// Check if game object has sprite component
if(obj.has("sprite")) {
debug.log("has sprite component");
}
// Check if game object has tags
obj.has(["tag1", "tag2"]); // AND, it has both tags
obj.has(["tag1", "tag2"], "or"); // OR, it has either tag1 or tag2
returns
true if has the component(s), false otherwise.
since
v3001.0.5
experimental
This feature is in experimental phase, it will be fully released in v4000.0
(tag: Tag | Tag[]): void Add a tag(s) to the game obj.
param
tag- The tag(s) to add.
// add enemy tag
obj.tag("enemy");
// add multiple tags
obj.tag(["enemy", "boss"]);
since
v3001.0.5
experimental
This feature is in experimental phase, it will be fully released in v4000.0
(tag: Tag | Tag[]): void Remove a tag(s) from the game obj.
param
tag- The tag(s) to remove.
// remove enemy tag
obj.untag("enemy");
// remove multiple tags
obj.untag(["enemy", "boss"]);
since
v3001.0.5
experimental
This feature is in experimental phase, it will be fully released in v4000.0
(tag: Tag | Tag[], op?: "and" | "or"): boolean If there's certain tag(s) on the game obj.
param
tag- The tag(s) for checking.
param
op- The operator to use when searching for multiple tags. Default is "and".
since
v3001.0.5
experimental
This feature is in experimental phase, it will be fully released in v4000.0
(event: GameObjEventNames | ( string & {}), action: (args: any) => void): KEventController Register an event.
param
event- The event name.
param
action- The action to run when event is triggered.
returns
The event controller.
since
v2000.0
(event: string, args: any): void Trigger an event.
param
event- The event name.
parm
args - The arguments to pass to the event action.
since
v2000.0
(): void Remove the game obj from scene.
(id: string): Comp | null Get state for a specific comp.
param
id- The component id.
since
v2000.0
(): GameObjInspect Gather debug info of all comps.
(action: () => void): KEventController Register an event that runs when the game obj is added to the scene.
returns
The event controller.
since
v2000.0
(action: () => void): KEventController Register an event that runs every frame as long as the game obj exists.
returns
The event controller.
since
v2000.1
(action: () => void): KEventController Register an event that runs every frame as long as the game obj exists.
returns
The event controller.
since
v2000.1
(action: () => void): KEventController Register an event that runs every frame as long as the game obj exists (this is the same as onUpdate()
, but all draw events are run after all update events).
returns
The event controller.
since
v2000.1
(action: () => void): KEventController Register an event that runs when the game obj is destroyed.
returns
The event controller.
since
v2000.1
(action: (id: string) => void): KEventController Register an event that runs when a component is used.
returns
The event controller.
since
v3001.0
(action: (id: string) => void): KEventController Register an event that runs when a component is unused.
returns
The event controller.
since
v3001.0
(action: (tag: string) => void): KEventController Register an event that runs when a tag is added.
returns
The event controller.
since
v3001.10
experimental
(action: (tag: string) => void): KEventController Register an event that runs when a tag is removed.
returns
The event controller.
since
v3001.10
experimental
(): boolean If game obj is attached to the scene graph.
returns
true if attached, false otherwise.
since
v2000.0
(obj: GameObj): boolean Check if is an ancestor (recursive parent) of another game object
returns
true if is ancestor, false otherwise.
since
v3000.0
: Mat4 Calculated transform matrix of a game object.
: boolean If draw the game obj (run "draw" event or not).
: boolean If update the game obj (run "update" event or not).
: FrameBuffer | null The canvas to draw this game object on
: KAPLAYCtx["onKeyPress"] : KAPLAYCtx["onKeyPressRepeat"] : KAPLAYCtx["onKeyRelease"] : KAPLAYCtx["onCharInput"] : KAPLAYCtx["onMouseDown"] : KAPLAYCtx["onMousePress"] : KAPLAYCtx["onMouseRelease"] : KAPLAYCtx["onMouseMove"] : KAPLAYCtx["onTouchStart"] : KAPLAYCtx["onTouchMove"] : KAPLAYCtx["onTouchEnd"] : KAPLAYCtx["onGamepadButtonDown"] : KAPLAYCtx["onGamepadButtonPress"] : KAPLAYCtx["onGamepadButtonRelease"] : KAPLAYCtx["onGamepadStick"] : KAPLAYCtx["onButtonDown"] : KAPLAYCtx["onButtonPress"] : KAPLAYCtx["onButtonRelease"] Type
: GameObjRaw & MergeComps<T> The basic unit of object in KAPLAY. The player, a butterfly, a tree, or even a piece of text.
Type
: number Function
(x: number, y: number): PosComp Set the position of a Game Object.
param
x- The x position to set.
param
y- The y position to set.
// This game object will draw a "bean" sprite at (100, 200)
add([
pos(100, 200),
sprite("bean"),
]);
returns
The position comp.
since
v2000.0
group
Components
Function
(xy: number): PosComp Function
(p: Vec2): PosComp Function
(): PosComp Function
(x: number, y: number): ScaleComp Set the scale of a Game Object.
param
x- The x scale to set.
param
y- The y scale to set.
// scale uniformly with one value
add([
sprite("bean"),
scale(3),
]);
// scale with x & y values. In this case, scales more horizontally.
add([
sprite("bean"),
scale(3, 1),
]);
// scale with vec2(x,y).
bean.scale = vec2(2,4);
returns
The scale comp.
since
v2000.0
group
Components
Function
(xy: number): ScaleComp Function
(s: Vec2): ScaleComp Function
(): ScaleComp Function
(a?: number): RotateComp Rotates a Game Object (in degrees).
param
a- The angle to rotate by. Defaults to 0.
let bean = add([
sprite("bean"),
rotate(),
])
// bean will be upside down!
bean.angle = 180
returns
The rotate comp.
since
v2000.0
group
Components
Function
(r: number, g: number, b: number): ColorComp Sets the color of a Game Object (rgb 0-255).
param
r- The red value to set.
param
g- The green value to set.
param
b- The blue value to set.
// blue frog
add([
sprite("bean"),
color(0, 0, 255),
]);
returns
The color comp.
since
v2000.0
group
Components
Function
(c: Color): ColorComp Function
(rgb: [number, number, number]): ColorComp Function
(c: string): ColorComp Function
(): ColorComp Function
(o?: number): OpacityComp Sets the opacity of a Game Object (0.0 - 1.0).
param
o- The opacity value to set.
const bean = add([
sprite("bean"),
opacity(0.5) // Make bean 50% transparent
])
// Make bean invisible
bean.opacity = 0
// Make bean fully visible
bean.opacity = 1
returns
The opacity comp.
since
v2000.0
group
Components
Function
(spr: string | SpriteData | Asset<SpriteData>, opt?: SpriteCompOpt): SpriteComp Attach and render a sprite to a Game Object.
param
spr- The sprite to render.
param
opt- Options for the sprite component. See
// minimal setup
add([
sprite("bean"),
])
// with options
const bean = add([
sprite("bean", {
// start with animation "idle"
anim: "idle",
}),
])
// play / stop an anim
bean.play("jump")
bean.stop()
// manually setting a frame
bean.frame = 3
returns
The sprite comp.
since
v2000.0
group
Components
Function
(txt?: string, opt?: TextCompOpt): TextComp Attach and render a text to a Game Object.
param
txt- The text to display.
param
opt- Options for the text component. See
// a simple score counter
const score = add([
text("Score: 0"),
pos(24, 24),
{ value: 0 },
])
player.onCollide("coin", () => {
score.value += 1
score.text = "Score:" + score.value
})
// with options
add([
pos(24, 24),
text("ohhi", {
size: 48, // 48 pixels tall
width: 320, // it'll wrap to next line when width exceeds this value
font: "sans-serif", // specify any font you loaded or browser built-in
}),
])
returns
The text comp.
since
v2000.0
group
Components
Function
(pts: Vec2[], opt?: PolygonCompOpt): PolygonComp Attach and render a polygon to a Game Object.
param
pts- The points to render the polygon.
param
opt- Options for the polygon component. See
// Make a square the hard way
add([
pos(80, 120),
polygon([vec2(0,0), vec2(50,0), vec2(50,50), vec2(0,50)]),
outline(4),
area(),
])
returns
The polygon comp.
since
v3001.0
group
Components
Function
(w: number, h: number, opt?: RectCompOpt): RectComp Attach and render a rectangle to a Game Object.
param
w- The width of the rectangle.
param
h- The height of the rectangle.
param
opt- Options for the rectangle component. See
const obstacle = add([
pos(80, 120),
rect(20, 40),
outline(4),
area(),
])
returns
The rectangle component.
group
Components
Function
(radius: number, opt?: CircleCompOpt): CircleComp Attach and render a circle to a Game Object.
param
radius- The radius of the circle.
param
opt- Options for the circle component. See
add([
pos(80, 120),
circle(16),
])
returns
The circle comp.
since
v2000.0
group
Components
Function
(w: number, h: number): UVQuadComp Attach and render a UV quad to a Game Object.
param
w- The width of the quad.
param
h- The height of the quad.
add([
uvquad(width(), height()),
shader("spiral"),
])
returns
The UV quad comp.
since
v2000.0
group
Components
Function
(opt?: AreaCompOpt): AreaComp Attach a collider area from shape and enables collision detection in a Game Object.
param
opt- Options for the area component. See
// Automatically generate area information from the shape of render
const player = add([
sprite("bean"),
area(),
])
// Die if player collides with another game obj with tag "tree"
player.onCollide("tree", () => {
destroy(player)
go("lose")
})
// Check for collision manually every frame instead of registering an event
player.onUpdate(() => {
if (player.isColliding(bomb)) {
score += 1
}
})
returns
The area comp.
since
v2000.0
group
Components
Function
(o: Anchor | Vec2): AnchorComp Anchor point for render (default "topleft").
param
o- The anchor point to set.
// set anchor to "center" so it'll rotate from center
add([
rect(40, 10),
rotate(45),
anchor("center"),
])
returns
The anchor comp.
since
v2000.0
group
Components
Function
(z: number): ZComp Determines the draw order for objects on the same layer. Object will be drawn on top if z value is bigger.
param
z- The z value to set.
const bean = add([
sprite("bean"),
pos(100, 100),
z(10), // Bean has a z value of 10
])
// Mark has a z value of 20, so he will always be drawn on top of bean
const mark = add([
sprite("mark"),
pos(100, 100),
z(20),
])
bean.z = 30 // Bean now has a higher z value, so it will be drawn on top of mark
returns
The z comp.
since
v2000.0
group
Components
Function
(width?: number, color?: Color, opacity?: number, join?: LineJoin, miterLimit?: number, cap?: LineCap): OutlineComp Give an object an outline. Doesn't support sprite or text components.
param
width- The width of the outline.
param
color- The color of the outline.
param
opacity- The opacity of the outline.
param
join- -The line join style.
param
miterLimit- The miter limit ratio.
param
cap-The line cap style.
// Add an outline to a rectangle
add([
rect(40, 40),
outline(4),
]);
returns
The outline comp.
since
v2000.0
group
Components
Function
(popt: ParticlesOpt, eopt: EmitterOpt): ParticlesComp Attach a particle emitter to a Game Object.
param
popt- The options for the particles.
param
eopt- The options for the emitter.
// beansplosion
// create the emitter
const emitter = add([
pos(center()),
particles({
max: 100,
speed: [75, 100],
lifeTime: [0.75,1.0],
angle: [0, 360],
opacities: [1.0, 0.0],
texture: getSprite("bean").tex, // texture of a sprite
quads: getSprite("bean").frames, // frames of a sprite
}, {
direction: 0,
spread: 360,
}),
])
onUpdate(() => {
emitter.emit(1)
})
returns
The particles comp.
since
v3001.0
group
Components
Function
(opt?: BodyCompOpt): BodyComp Physical body that responds to gravity. Requires "area" and "pos" comp. This also makes the object "solid".
param
opt- Options for the body component. See
// bean jumpy
const bean = add([
sprite("bean"),
// body() requires "pos" and "area" component
pos(),
area(),
body(),
])
// when bean is grounded, press space to jump
// check out #BodyComp for more methods
onKeyPress("space", () => {
if (bean.isGrounded()) {
bean.jump()
}
})
// run something when bean falls and hits a ground
bean.onGround(() => {
debug.log("oh no!")
})
returns
The body comp.
since
v2000.0
group
Components
Function
(opt: SurfaceEffectorCompOpt): SurfaceEffectorComp Applies a force on a colliding object in order to make it move along the collision tangent vector.
Good for conveyor belts.
param
opt- Options for the surface effector component. See
loadSprite("belt", "/sprites/jumpy.png")
// conveyor belt
add([
pos(center()),
sprite("belt"),
rotate(90),
area(),
body({ isStatic: true }),
surfaceEffector({
speed: 50,
})
])
returns
The surface effector comp.
since
v3001.0
group
Components
Function
(opt: AreaEffectorCompOpt): AreaEffectorComp Applies a force on a colliding object.
Good to apply anti-gravity, wind or water flow.
param
opt- Options for the area effector component. See
returns
The area effector comp.
since
v3001.0
group
Components
Function
(opt: PointEffectorCompOpt): PointEffectorComp Applies a force on a colliding object directed towards this object's origin.
Good to apply magnetic attraction or repulsion.
param
opt- Options for the point effector component. See
returns
The point effector comp.
since
v3001.0
group
Components
Function
(opt?: PlatformEffectorCompOpt): PlatformEffectorComp The platform effector makes it easier to implement one way platforms
or walls. This effector is typically used with a static body, and it
will only be solid depending on the direction the object is traveling from.
param
opt- Options for the platform effector component. See
returns
The platform effector comp.
since
v3001.0
group
Components
Function
(opt: BuoyancyEffectorCompOpt): BuoyancyEffectorComp Applies an upwards force (force against gravity) to colliding objects depending on the fluid density and submerged area.
Good to apply constant thrust.
param
opt- Options for the buoyancy effector component. See
returns
The buoyancy effector comp.
since
v3001.0
group
Components
Function
(opt: ConstantForceCompOpt): ConstantForceComp Applies a constant force to the object.
Good to apply constant thrust.
param
opt- Options for the constant force component. See
returns
The constant force comp.
since
v3001.0
group
Components
Function
(numJumps?: number): DoubleJumpComp Enables double jump.
param
numJumps- The number of jumps allowed. Defaults to 1.
requires
returns
The double jump comp.
since
v3000.0
group
Components
Function
(dir: number | Vec2, speed: number): EmptyComp Move towards a direction infinitely, and destroys when it leaves game view.
param
dir- The direction to move towards.
param
speed- The speed to move at.
requires
// enemy throwing feces at player
const projectile = add([
sprite("feces"),
pos(enemy.pos),
area(),
move(player.pos.angle(enemy.pos), 1200),
offscreen({ destroy: true }),
])
returns
The move comp.
since
v2000.0
group
Components
Function
(opt?: OffScreenCompOpt): OffScreenComp Control the behavior of object when it goes out of view.
param
opt- Options for the offscreen component. See
add([
pos(player.pos),
sprite("bullet"),
offscreen({ destroy: true }),
"projectile",
]);
returns
The offscreen comp.
since
v2000.2
group
Components
Function
(obj: GameObj | null, offset?: Vec2): FollowComp Follow another game obj's position.
param
obj- The game obj to follow.
param
offset- The offset to follow at.
const bean = add(...)
add([
sprite("bag"),
pos(),
follow(bean) // Follow bean's position
]);
// Using offset
const target = add(...)
const mark = add([
sprite("mark"),
pos(),
follow(target, vec2(32, 32)) // Follow target's position with an offset
])
mark.follow.offset = vec2(64, 64) // Change the offset
returns
The follow comp.
since
v2000.0
group
Components
Function
(id: string, uniform?: Uniform | ( () => Uniform)): ShaderComp Custom shader.
param
id- The shader id.
param
uniform- The uniform to pass to the shader.
returns
The shader comp.
since
v2000.0
group
Components
Function
(hasFocus?: boolean, maxInputLength?: number): TextInputComp Get input from the user and store it in the nodes text property, displaying it with the text component and allowing other functions to access it.
param
hasFocus- Whether the text input should have focus.
param
maxInputLength- The maximum length of the input.
const obj = add([
text(""),
textInput(),
])
obj.hasFocus = false
debug.log(obj.text) // oh no i cant see my new text since it was disabled
returns
The text input comp.
since
v3001.0
group
Components
Function
(maxLoopsPerFrame?: number): TimerComp Enable timer related functions like wait(), loop(), tween() on the game object.
param
maxLoopsPerFrame- The maximum number of loops per frame.
const obj = add([
timer(),
])
obj.wait(2, () => { ... })
obj.loop(0.5, () => { ... })
obj.tween(obj.pos, mousePos(), 0.5, (p) => obj.pos = p, easings.easeOutElastic)
returns
The timer comp.
since
v2000.0
group
Components
Function
(): FixedComp Make a game obj unaffected by camera or parent object transforms, and render at last.
Useful for UI elements.
// this will be be fixed on top left and not affected by camera
const score = add([
text(0),
pos(12, 12),
fixed(),
])
returns
The fixed comp.
since
v2000.0
group
Components
Function
(scenesToStay?: string[]): StayComp Don't get destroyed on scene switch. Only works in objects attached to root.
param
scenesToStay- The scenes to stay in. By default it stays in all scenes.
player.onCollide("bomb", () => {
// spawn an explosion and switch scene, but don't destroy the explosion game obj on scene switch
add([
sprite("explosion", { anim: "burst", }),
stay(),
lifespan(1),
])
go("lose", score)
})
returns
The stay comp.
since
v2000.0
group
Components
Function
(hp: number, maxHP?: number): HealthComp Handles health related logic and events.
param
hp- The initial health points.
param
maxHP- The maximum health points.
const player = add([
health(3),
])
player.onCollide("bad", (bad) => {
player.hurt(1)
bad.hurt(1)
})
player.onCollide("apple", () => {
player.heal(1)
})
player.on("hurt", () => {
play("ouch")
})
// triggers when hp reaches 0
player.on("death", () => {
destroy(player)
go("lose")
})
returns
The health comp.
since
v2000.0
group
Components
Function
(time: number, options?: LifespanCompOpt): EmptyComp Destroy the game obj after certain amount of time
param
time- The time to live.
param
options- Options for the lifespan component. See
// spawn an explosion, destroy after 1.5 seconds (time + fade)
add([
sprite("explosion", { anim: "burst", }),
lifespan(1, {
fade: 0.5 // it start fading 0.5 second after time
}),
]);
returns
The lifespan comp.
since
v2000.0
group
Components
Function
(name: string): NamedComp Names an game obj.
param
name- The name to set.
returns
The named comp.
since
v3001.0
group
Components
Function
(initialState: string, stateList?: string[]): StateComp Finite state machine.
param
initialState- The initial state.
param
stateList- The list of states.
const enemy = add([
pos(80, 100),
sprite("robot"),
state("idle", ["idle", "attack", "move"]),
])
// this callback will run once when enters "attack" state
enemy.onStateEnter("attack", () => {
// enter "idle" state when the attack animation ends
enemy.play("attackAnim", {
// any additional arguments will be passed into the onStateEnter() callback
onEnd: () => enemy.enterState("idle", rand(1, 3)),
})
checkHit(enemy, player)
})
// this will run once when enters "idle" state
enemy.onStateEnter("idle", (time) => {
enemy.play("idleAnim")
wait(time, () => enemy.enterState("move"))
})
// this will run every frame when current state is "move"
enemy.onStateUpdate("move", () => {
enemy.follow(player)
if (enemy.pos.dist(player.pos) < 16) {
enemy.enterState("attack")
}
})
returns
The state comp.
since
v2000.1
group
Components
Function
(initialState: string, stateList: string[], transitions: Record<string, string | string[]>): StateComp state() with pre-defined transitions.
param
initialState- The initial state.
param
stateList- The list of states.
param
transitions- The transitions between states.
const enemy = add([
pos(80, 100),
sprite("robot"),
state("idle", ["idle", "attack", "move"], {
"idle": "attack",
"attack": "move",
"move": [ "idle", "attack" ],
}),
])
// this callback will only run once when enter "attack" state from "idle"
enemy.onStateTransition("idle", "attack", () => {
checkHit(enemy, player)
})
returns
The state comp.
since
v2000.2
group
Components
Function
(time: number): Comp deprecated
since v3001.0
requires
returns
An empty comp.
since
v3000.0
group
Components
Function
(maskType?: Mask): MaskComp Mask all children object render.
param
maskType- The type of mask to use.
returns
The mask comp.
since
v3001.0
group
Components
Function
(canvas: FrameBuffer): Comp Specifies the FrameBuffer the object should be drawn on.
param
canvas- The FrameBuffer to draw on.
// Draw on another canvas
let canvas = makeCanvas(width(), height());
let beanOnCanvas = add([
sprite("bean"),
drawon(canvas.fb),
]);
returns
The drawon comp.
since
v3000.0
group
Components
Function
(opt?: TileCompOpt): TileComp A tile on a tile map.
param
opt- Options for the tile component. See
returns
The tile comp.
since
v3000.0
group
Components
Function
(opt?: AgentCompOpt): AgentComp An agent which can finds it way on a tilemap.
param
opt- Options for the agent component. See
returns
The agent comp.
since
v3000.0
group
Components
Function
(opt?: AnimateCompOpt): AnimateComp A component to animate properties.
param
opt- Options for the animate component. See
let movingBean = add([
sprite("bean"),
pos(50, 150),
anchor("center"),
animate(),
]);
// Moving right to left using ping-pong
movingBean.animate("pos", [vec2(50, 150), vec2(150, 150)], {
duration: 2,
direction: "ping-pong",
});
returns
The animate comp.
since
v3001.0
group
Components
Function
(obj: GameObj, name: string): Animation Serializes the animation to plain objects
param
obj- The game obj to serialize.
returns
The serialized animation.
since
v3001.0
group
Components
Function
(candidates: SentryCandidates, opt?: SentryCompOpt): SentryComp A sentry which reacts to objects coming into view.
returns
The sentry comp.
since
v3001.0
group
Components
Function
(opts: PatrolCompOpt): PatrolComp A patrol which can follow waypoints to a goal.
param
opts- Options for the patrol component. See
const bean = add([
sprite("bean"),
pos(40, 30),
patrol({
waypoints: [
vec2(100, 100),
vec2(120, 170),
vec2(50, 50),
vec2(300, 100),
],
}),
]);
bean.onPatrolFinished(gb => {
// Note that the position doesn't exactly match the last waypoint,
// this is an approximation.
debug.log(`Bean reached the end of the patrol at ${gb.pos.x}, ${gb.pos.y}`);
});
returns
The patrol comp.
since
v3001.0
group
Components
Function
(opts: PathfinderCompOpt): PathfinderComp A navigator pathfinder which can calculate waypoints to a goal.
since
v3001.0
group
Components
Interface
: ?: Tag[] What other comps this comp depends on.
?: () => void Event that runs when host game obj is added to scene.
?: () => void Event that runs at a fixed frame rate.
?: () => void Event that runs every frame.
?: () => void Event that runs every frame after update.
?: () => void Event that runs when obj is removed from scene.
?: () => string | null Debug info for inspect mode.
?: () => void Draw debug info in inspect mode
Interface
: The circle component.
: number Radius of circle.
(): Rect Render area of the circle.
Interface
: Options for the circle component.
?: boolean If fill the circle (useful if you only want to render outline with
outline component).
Interface
: The color component.
Interface
: The mask component.
Interface
: The opacity component.
: number Opacity of the current object.
(time?: number, easeFunc?: EaseFunc): TweenController Fade in at the start.
(time?: number, easeFunc?: EaseFunc): TweenController Fade out at the start.
Interface
: The outline component.
Type
: {} Options for the particles's component
Interface
: The particles component.
Interface
: The polygon component.
since
v3001.0
group
Component Types
: Vec2[] Points in the polygon.
?: number | number[] The radius of each corner.
?: Color[] The color of each vertex.
?: Vec2[] The uv of each vertex.
?: Texture The texture used when uv coordinates are present.
Type
: Omit<DrawPolygonOpt, "pts"> Options for the polygon component.
Interface
: The rect component.
: number Width of rectangle.
: number Height of rectangle.
?: number | [number, number, number, number] The radius of each corner.
Interface
: Options for the rect component.
?: number | [number, number, number, number] Radius of the rectangle corners.
?: boolean If fill the rectangle (useful if you only want to render outline with outline() component).
Interface
: The shader component.
?: Uniform Uniform values to pass to the shader.
Interface
: The sprite component.
: string Name of the sprite.
: number Width for sprite.
: number Height for sprite.
: number Current frame in the entire spritesheet.
: number Current frame in relative to the animation that is currently playing.
: Quad The rectangular area of the texture to render.
(anim: string, options?: SpriteAnimPlayOpt): void Play a piece of anim.
(): void Stop current anim.
(): number Get total number of frames.
(): SpriteCurAnim | null Get the current animation data.
(): string | undefined Get current anim name.
deprecated
Use `getCurAnim().name` instead.
(name: string): boolean Check if object's sprite has an animation.
(name: string): SpriteAnim | null Get an animation.
: number Speed multiplier for all animations (for the actual fps for an anim use .play("anim", { speed: 10 })).
: boolean Flip texture horizontally.
: boolean Flip texture vertically.
(action: (anim: string) => void): KEventController Register an event that runs when an animation is played.
(action: (anim: string) => void): KEventController Register an event that runs when an animation is ended.
Interface
: Options for the sprite component.
?: number If the sprite is loaded with multiple frames, or sliced, use the frame option to specify which frame to draw.
?: boolean If provided width and height, don't stretch but instead render tiled.
?: number Stretch sprite to a certain width.
?: number Stretch sprite to a certain height.
?: string Play an animation on start.
?: number Speed multiplier for all animations (for the actual fps for an anim use .play("anim", { speed: 10 })).
?: boolean Flip texture horizontally.
?: boolean Flip texture vertically.
?: Quad The rectangular sub-area of the texture to render, default to full texture quad(0, 0, 1, 1)
.
?: boolean If fill the sprite (useful if you only want to render outline with outline() component).
Interface
: The text component.
: string The text to render.
: string The text after formatting.
: string | BitmapFontData The font to use.
: TextAlign Text alignment ("left", "center" or "right", default "left").
: number The gap between each line.
: number The gap between each character.
: CharTransform | CharTransformFunc Transform the pos, scale, rotation or color for each character based on the index or char.
: Record<string, CharTransform | CharTransformFunc> Stylesheet for styled chunks, in the syntax of "this is a [style]text[/style] word".
Interface
: Options for the text component.
?: number Height of text.
?: string | BitmapFontData The font to use.
?: number Wrap text to a certain width.
?: TextAlign Text alignment ("left", "center" or "right", default "left").
?: number The gap between each line.
?: number The gap between each character.
?: CharTransform | CharTransformFunc Transform the pos, scale, rotation or color for each character based on the index or char.
?: Record<string, CharTransform | CharTransformFunc> Stylesheet for styled chunks, in the syntax of "this is a [style]text[/style] word".
?: boolean If true, any (whitespace) indent on the first line of the paragraph
will be copied to all of the lines for those parts that text-wrap.
Interface
: The uvquad component.
: number Height of height.
Interface
: The agent component.
(cb: () => void): KEventController (cb: () => void): KEventController (cb: () => void): KEventController (cb: () => void): KEventController Type
: {} Options for the agent component.
Interface
: The fixed component.
: boolean If the obj is unaffected by camera
Interface
: The pos component.
: Vec2 Object's current world position.
(xVel: number, yVel: number): void Move how many pixels per second. If object is 'solid', it won't move into other 'solid' objects.
(dx: number, dy: number): void Move how many pixels, without multiplying dt, but still checking for 'solid'.
(dest: Vec2, speed?: number): void Move to a spot with a speed (pixels per second), teleports if speed is not given.
(x: number, y: number, speed?: number): void (newPos?: Vec2): Vec2 | null Get / Set the position of the object on the screen.
(newPos?: Vec2): Vec2 | null Get / Set the position of the object relative to the root.
(this: GameObj<PosComp | FixedComp>, p: Vec2): Vec2 Transform a local point (relative to this) to a screen point (relative to the camera)
(this: GameObj<PosComp>, p: Vec2): Vec2 Transform a local point (relative to this) to a world point (relative to the root)
(this: GameObj<PosComp | FixedComp>, p: Vec2): Vec2 Transform a screen point (relative to the camera) to a local point (relative to this)
(this: GameObj<PosComp>, p: Vec2): Vec2 Transform a world point (relative to the root) to a local point (relative to this)
(this: GameObj<PosComp>, other: GameObj<PosComp>, p: Vec2): Vec2 Transform a point relative to this to a point relative to other
(this: GameObj<PosComp>, other: GameObj<PosComp>, p: Vec2): Vec2 Transform a point relative to other to a point relative to this
Interface
: The sentry component.
(cb: (objects: GameObj[]) => void): KEventController Attaches an event handler which is called when objects of interest are spotted.
param
cbThe event handler called when objects are spotted.
(obj: GameObj<PosComp>, direction?: Vec2, fieldOfView?: number): boolean Returns true if the object is within the field of view.
param
objThe object to test.
param
directionThe direction to look at.
param
fieldOfViewThe field of view in degrees.
(obj: GameObj<PosComp>): boolean Returns true if there is a line of sight to the object.
param
objThe object to test.
Interface
: Options for the sentry component.
Interface
: The tile component.
: Vec2 The tile position inside the level.
: boolean If the tile is an obstacle in pathfinding.
: number How much a tile is cost to traverse in pathfinding (default 0).
: Edge[] If the tile has hard edges that cannot pass in pathfinding.
: Vec2 Position offset when setting tilePos
.
Type
: { ?: boolean If the tile is an obstacle in pathfinding.
?: number How much a tile is cost to traverse in pathfinding (default 0).
?: Edge[] If the tile has hard edges that cannot pass in pathfinding.
?: Vec2 Position offset when setting tilePos
.
} Options for the tile component.
Interface
: The health component.
(n?: number): void Decrease HP by n (defaults to 1).
(n?: number): void Increase HP by n (defaults to 1).
(): number Current health points.
(hp: number): void Set current health points.
(): number | null Max amount of HP.
(hp: number): void Set max amount of HP.
(action: (amount?: number) => void): KEventController Register an event that runs when hurt() is called upon the object.
(action: (amount?: number) => void): KEventController Register an event that runs when heal() is called upon the object.
(action: () => void): KEventController Register an event that runs when object's HP is equal or below 0.
Interface
: The lifespan component.
?: number Fade out duration (default 0 which is no fade out).
Interface
: The named component.
Interface
: The state component.
: (state: string, args: any) => void Enter a state, trigger onStateEnd for previous state and onStateEnter for the new State state.
(from: string, to: string, action: () => void): KEventController Register event that runs once when a specific state transition happens. Accepts arguments passed from enterState(name, ...args)
.
: (state: string, action: (args: any) => void) => KEventController Register event that runs once when enters a specific state. Accepts arguments passed from enterState(name, ...args)
.
: (state: string, action: () => void) => KEventController Register an event that runs once when leaves a specific state.
: (state: string, action: () => void) => KEventController Register an event that runs every frame when in a specific state.
: (state: string, action: () => void) => KEventController Register an event that runs every frame when in a specific state.
Interface
: The stay component.
: boolean If the obj should not be destroyed on scene switch.
?: string[] Array of scenes that the obj will stay on.
Interface
: The textInput component.
: boolean Enable the text input array from being modified by user input.
: string The "real" text that the user typed, without any escaping.
Interface
: The timer component.
: number The maximum number of loops per frame allowed,
to keep loops with sub-frame intervals from freezing the game.
(time: number, action?: () => void): TimerController Run the callback after n seconds.
(time: number, action: () => void, maxLoops?: number, waitFirst?: boolean): TimerController Run the callback every n seconds.
If waitFirst is false (the default), the function will
be called once on the very next frame, and then loop like normal.
(from: V, to: V, duration: number, setValue: (value: V) => void, easeFunc?: (t: number) => number): TweenController Tweeeeen! Note that this doesn't specifically mean tweening on this object's property, this just registers the timer on this object, so the tween will cancel with the object gets destroyed, or paused when obj.paused is true.
Interface
: The area component.
: { : Shape | null If we use a custom shape over render shape.
: Cursor | null Cursor on hover.
} Collider area info.
: Tag[] If this object should ignore collisions against certain other objects.
(): boolean If was just clicked on last frame.
(): boolean If is being hovered on.
(other: GameObj<AreaComp>): Collision | null Check collision with another game obj.
(): Collision[] Get all collisions currently happening.
(o: GameObj<AreaComp>): boolean If is currently colliding with another game obj.
(o: GameObj<AreaComp>): boolean If is currently overlapping with another game obj (like isColliding, but will return false if the objects are just touching edges).
(f: () => void, btn?: MouseButton): KEventController Register an event runs when clicked.
(action: () => void): KEventController Register an event runs once when hovered.
(action: () => void): KEventController Register an event runs every frame when hovered.
(action: () => void): KEventController Register an event runs once when unhovered.
(tag: Tag, f: (obj: GameObj, col?: Collision) => void): KEventController Register an event runs once when collide with another game obj with certain tag.
(f: (obj: GameObj, col?: Collision) => void): KEventController Register an event runs once when collide with another game obj.
(tag: Tag, f: (obj: GameObj, col?: Collision) => KEventController): KEventController Register an event runs every frame when collide with another game obj with certain tag.
(f: (obj: GameObj, col?: Collision) => void): KEventController Register an event runs every frame when collide with another game obj.
(tag: Tag, f: (obj: GameObj) => void): KEventController Register an event runs once when stopped colliding with another game obj with certain tag.
(f: (obj: GameObj) => void): void Register an event runs once when stopped colliding with another game obj.
(p: Vec2): boolean If has a certain point inside collider.
(obj: GameObj): void Push out from another solid game obj if currently overlapping.
(): Shape Get the geometry data for the collider in local coordinate space.
(): Polygon Get the geometry data for the collider in world coordinate space.
(): Polygon Get the geometry data for the collider in screen coordinate space.
Interface
: Options for the area component.
?: Shape The shape of the area (currently only Rect and Polygon is supported).
add([
sprite("butterfly"),
pos(100, 200),
// a triangle shape!
area({ shape: new Polygon([vec2(0), vec2(100), vec2(-100, 100)]) }),
])
?: number | Vec2 Area scale.
?: Cursor Cursor on hover.
?: Tag[] If this object should ignore collisions against certain other objects.
Interface
: The body component.
: Vec2 Object current velocity.
: number How much velocity decays (velocity *= (1 - drag) every frame).
: boolean If object is static, it won't move, all non static objects won't move past it, and all
calls to addForce(), applyImpulse(), or jump() on this body will do absolutely nothing.
: number Initial speed in pixels per second for jump().
: number Gravity multiplier.
: number Mass of the body, decides how much a non-static body should move when resolves with another non-static body. (default 1).
?: boolean If object should move with moving platform (default true).
(): GameObj | null Current platform landing on.
(): boolean If currently landing on a platform.
(): boolean If currently falling.
(): boolean If currently rising.
(impulse: Vec2): void Applies an impulse
param
impulseThe impulse vector, applied directly
(force: Vec2): void Applies a force
param
forceThe force vector, applied after scaled by the inverse mass
(force?: number): void Upward thrust.
(action: (col: Collision) => void): KEventController Register an event that runs when a collision is resolved.
(action: (col: Collision) => void): KEventController Register an event that runs before a collision would be resolved.
(action: () => void): KEventController Register an event that runs when the object is grounded.
(action: () => void): KEventController Register an event that runs when the object starts falling.
(action: () => void): KEventController Register an event that runs when the object falls off platform.
(action: () => void): KEventController Register an event that runs when the object bumps into something on the head.
(action: (obj: GameObj) => void): KEventController Register an event that runs when an object lands on this object.
(action: (obj: GameObj) => void): KEventController Register an event that runs when the object is bumped by another object head.
Interface
: Options for the body component.
?: number How much velocity decays (velocity *= (1 - drag) every frame).
?: number Initial speed in pixels per second for jump().
?: number Maximum velocity when falling.
?: number Gravity multiplier.
?: boolean If object is static, it won't move, all non static objects won't move past it, and all
calls to addForce(), applyImpulse(), or jump() on this body will do absolutely nothing.
?: boolean If object should move with moving platform (default true).
?: number Mass of the body, decides how much a non-static body should move when resolves with another non-static body. (default 1).
Interface
: The doubleJump component.
: number Number of jumps allowed.
(force?: number): void Performs double jump (the initial jump only happens if player is grounded).
(action: () => void): KEventController Register an event that runs when the object performs the second jump when double jumping.
Interface
: The anchor component.
: Anchor | Vec2 Anchor point for render.
Interface
: The follow component.
: { : GameObj The object to follow.
: Vec2 The offset to follow the object by.
} Interface
: The layer component.
get (): number | null Get the index of the current layer the object is assigned to.
returns
The index of the layer the object is assigned to, or `null` if the layer does not exist.
get (): string | null Get the name of the current layer the object is assigned to.
returns
The name of the layer the object is assigned to.
set (name: string)
Set the name of the layer the object should be assigned to.
Interface
: The offscreen component.
: number | undefined The minimum distance that the object must be off the screen by to be considered "offscreen".
If it is undefined, it means that the object will be considered to be offscreen when its bounding rectangle
(defined by width and height) is not intersecting with the screen rectangle.
(): boolean If object is currently out of view.
(action: () => void): KEventController Register an event that runs when object goes out of view.
(action: () => void): KEventController Register an event that runs when object enters view.
Interface
: Options for offscreen component.
?: boolean If hide object when out of view.
?: boolean If pause object when out of view.
?: boolean If unpause object when back in view.
?: boolean If destroy object when out of view.
?: number The distance when out of view is triggered (default 200).
Interface
: The rotate component.
: number Angle in degrees.
(angle: number): void Rotate in degrees.
(s: number): void Rotate to a degree (like directly assign to .angle)
Interface
: The scale component.
: Vec2 The current scale of the object
returns
The current scale of the object as a
(s: number): void Set the scale of the object to a number
(s: Vec2): void Set the scale of the object to a Vec2
(sx: number, sy: number): void Set the scale of the object to a number for x and y
(s: number): void Scale the object by a number
(s: Vec2): void Scale the object by a Vec2
(sx: number, sy: number): void Scale the object by a number for x and y
Interface
: The z component.
: number Defines the z-index of this game obj
Type
: Omit<MergeObj<T>, keyof Comp> A type to merge the components of a game object, omitting the default component properties.
Type
: Array<T | Tag> A component list.
Type
: {} & Comp A component without own properties.
Interface
: A level component.
(sym: string, p: Vec2): GameObj | null Spawn a tile from a symbol defined previously.
(sym: string, x: number, y: number): GameObj | null (obj: CompList<T>, p: Vec2): GameObj<T> | null Spawn a tile from a component list.
returns
The spawned game object, or null if the obj hasn't components.
(sym: CompList<T>, x: number, y: number): GameObj<T> | null (): number Total width of level in pixels.
(): number Total height of level in pixels.
(tilePos: Vec2): GameObj[] Get all game objects that's currently inside a given tile.
(origin: Vec2, direction: Vec2): RaycastResult Raycast all game objects on the given path.
(tilePos: Vec2): Vec2 Convert tile position to pixel position.
(x: number, y: number): Vec2 (pos: Vec2): Vec2 Convert pixel position to tile position.
(x: number, y: number): Vec2 (from: Vec2, to: Vec2, opts?: PathFindOpt): Vec2[] | null Find the path to navigate from one tile to another tile.
returns
A list of traverse points in tile positions.
(from: Vec2, to: Vec2, opts?: PathFindOpt): Vec2[] | null Find the path to navigate from one tile to another tile.
returns
A list of traverse points in pixel positions.
(cb: () => void): KEventController (cb: () => void): KEventController (cb: () => void): KEventController Function
(): string | null Gets the name of the current scene. Returns null if no scene is active.
Function
(name: SceneName, def: SceneDef): void Define a scene.
param
name- The scene name.
param
def- The scene definition.
// define a scene
scene("game", () => {
// ...
});
// get options
scene("game", (opts) => {
debug.log(opts.level);
});
group
Scene
Function
(name: SceneName, args: any): void Go to a scene, passing all rest args to scene callback.
param
name- The scene name.
param
args- The rest args to pass to the scene callback.
// go to "game" scene
go("game");
// go with options
go("game", { level: 1 });
since
v2000.0
group
Scene
Function
(layers: string[], defaultLayer: string): void param
layers- The layer names.
param
defaultLayer- The default layer name.
deprecated
Use
setLayers(["bg", "obj", "ui"], "obj")
// no layer specified, will be added to "obj"
add([
sprite("bean"),
]);
// add to "bg" layer
add([
sprite("bg"),
layer("bg"),
]);
since
v3001.0
group
Scene
Function
(action: (gamepad: KGamepad) => void): void Register an event that runs when a gamepad is connected.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3000.0
group
Input
Function
(action: (gamepad: KGamepad) => void): void Register an event that runs when a gamepad is disconnected.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3000.0
group
Input
Function
(tag: Tag, action: (a: GameObj) => void): KEventController Register an event that runs when game objs with certain tags are clicked (required to have the area() component).
param
tag- The tag to listen for.
param
action- The function to run when the event is triggered.
// click on any "chest" to open
onClick("chest", (chest) => chest.open())
returns
The event controller.
since
v2000.1
group
Input
Function
(action: () => void): KEventController Register an event that runs when users clicks.
param
action- The function to run when the event is triggered.
// click on anywhere to go to "game" scene
onClick(() => go("game"));
returns
The event controller.
since
v2000.1
group
Events
Function
(key: Key | Key[], action: (key: Key) => void): KEventController Register an event that runs every frame when a key is held down.
param
key- The key(s) to listen for.
param
action- The function to run when the event is triggered.
// move left by SPEED pixels per frame every frame when left arrow key is being held down
onKeyDown("left", () => {
bean.move(-SPEED, 0)
});
returns
The event controller.
since
v2000.1
group
Input
Function
(action: (key: Key) => void): KEventController Register an event that runs every frame when any key is held down.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v2000.1
group
Input
Function
(key: Key | Key[], action: (key: Key) => void): KEventController Register an event that runs when user presses certain keys.
param
key- The key(s) to listen for.
param
action- The function to run when the event is triggered.
// .jump() once when "space" is just being pressed
onKeyPress("space", () => {
bean.jump();
});
onKeyPress(["up", "space"], () => {
bean.jump();
});
returns
The event controller.
since
v2000.1
group
Input
Function
(action: (key: Key) => void): KEventController Register an event that runs when user presses any key.
param
action- The function to run when the event is triggered.
// Call restart() when player presses any key
onKeyPress((key) => {
debug.log(`key pressed ${key}`);
restart();
});
returns
The event controller.
since
v3001.0
group
Input
Function
(k: Key | Key[], action: (k: Key) => void): KEventController Register an event that runs when user presses certain keys (also fires repeatedly when the keys are being held down).
param
k- The key(s) to listen for.
param
action- The function to run when the event is triggered.
// delete last character when "backspace" is being pressed and held
onKeyPressRepeat("backspace", () => {
input.text = input.text.substring(0, input.text.length - 1);
});
returns
The event controller.
since
v3000.1
group
Input
Function
(action: (k: Key) => void): KEventController Function
(k: Key | Key[], action: (k: Key) => void): KEventController Register an event that runs when user release certain keys.
param
k- The key(s) to listen for.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v2000.1
group
Input
Function
(action: (k: Key) => void): KEventController Function
(action: (ch: string) => void): KEventController Register an event that runs when user inputs text.
param
action- The function to run when the event is triggered.
// type into input
onCharInput((ch) => {
input.text += ch
})
returns
The event controller.
since
v2000.1
group
Input
Function
(btn: MouseButton | MouseButton[], action: (m: MouseButton) => void): KEventController Register an event that runs every frame when certain mouse buttons are being held down.
param
btn- The button(s) to listen for.
returns
The event controller.
since
v3001.0
group
Input
Function
(action: (m: MouseButton) => void): KEventController Function
(action: (m: MouseButton) => void): KEventController Register an event that runs when user clicks mouse.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3001.0
group
Input
Function
(btn: MouseButton | MouseButton[], action: (m: MouseButton) => void): KEventController Function
(action: (m: MouseButton) => void): KEventController Register an event that runs when user releases mouse.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3001.0
group
Input
Function
(btn: MouseButton | MouseButton[], action: (m: MouseButton) => void): KEventController Function
(action: (pos: Vec2, delta: Vec2) => void): KEventController Register an event that runs whenever user move the mouse.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v2000.1
group
Input
Function
(action: (pos: Vec2, t: Touch) => void): KEventController Register an event that runs when a touch starts.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v2000.1
group
Input
Function
(action: (pos: Vec2, t: Touch) => void): KEventController Register an event that runs whenever touch moves.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v2000.1
group
Input
Function
(action: (pos: Vec2, t: Touch) => void): KEventController Register an event that runs when a touch ends.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v2000.1
group
Input
Function
(action: (delta: Vec2) => void): KEventController Register an event that runs when mouse wheel scrolled.
param
action- The function to run when the event is triggered.
// Zoom camera on scroll
onScroll((delta) => {
const zoom = delta.y / 500;
camScale(camScale().add(zoom));
});
returns
The event controller.
since
v3000.0
group
Input
Function
(btn: KGamepadButton | KGamepadButton[], action: (btn: KGamepadButton, gamepad: KGamepad) => void): KEventController Register an event that runs every frame when certain gamepad buttons are held down.
param
btn- The button(s) to listen for.
param
action- The function to run when the event is triggered.
return
The event controller.
since
v3001.0
group
Input
Function
(action: (btn: KGamepadButton, gamepad: KGamepad) => void): KEventController Register an event that runs every frame when any gamepad buttons are held down.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3001.0
group
Input
Function
(btn: KGamepadButton | KGamepadButton[], action: (btn: KGamepadButton, gamepad: KGamepad) => void): KEventController Register an event that runs when user presses certain gamepad button.
param
btn- The button(s) to listen for.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3001.0
group
Input
Function
(action: (btn: KGamepadButton, gamepad: KGamepad) => void): KEventController Register an event that runs when user presses any gamepad button.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3001.0
group
Input
Function
(btn: KGamepadButton | KGamepadButton[], action: (btn: KGamepadButton, gamepad: KGamepad) => void): KEventController Register an event that runs when user releases certain gamepad button
param
btn- The button(s) to listen for.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3001.0
group
Input
Function
(action: (btn: KGamepadButton, gamepad: KGamepad) => void): KEventController Register an event that runs when user releases any gamepad button.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3000.0
group
Input
Function
(stick: GamepadStick, action: (value: Vec2, gameepad: KGamepad) => void): KEventController Register an event that runs when the gamepad axis exists.
param
stick- The stick to listen for.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3000.0
group
Input
Function
(btn: TButton | TButton[], action: (btn: TButton) => void): KEventController Register an event that runs when user press a defined button
(like "jump") on any input (keyboard, gamepad).
param
btn- The button(s) to listen for.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3001.0
group
Input
Function
(btn: TButton | TButton[], action: (btn: TButton) => void): KEventController Register an event that runs when user release a defined button
(like "jump") on any input (keyboard, gamepad).
param
btn- The button(s) to listen for.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3001.0
group
Input
Function
(action: (btn: TButton) => void): KEventController Function
(btn: TButton | TButton[], action: (btn: TButton) => void): KEventController Register an event that runs when user press a defined button
(like "jump") on any input (keyboard, gamepad).
param
btn- The button(s) to listen for.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3001.0
group
Input
Function
(action: (btn: TButton) => void): KEventController Function
(): boolean Is currently on a touch screen device.
returns
true if on a touch screen device.
since
v3000.0
group
Input
Function
(): Vec2 Get current mouse position (without camera transform).
returns
The current mouse position.
since
v2000.0
group
Input
Function
(): Vec2 How much mouse moved last frame.
returns
The delta mouse position.
since
v2000.0
group
Input
Function
(k?: Key | Key[]): boolean If any or certain key(s) are currently down.
param
k- The key(s) to check.
// Any key down
let lastKeyTime = time()
let triedToWakeUp = false
onUpdate(() => {
if (isKeyDown()) {
lastKeyTime = time()
triedToWakeUp = false
return
}
if (triedToWakeUp || time() - lastKeyTime < 5) return
debug.log("Wake up!")
triedToWakeUp = true
})
// Certain key down
// equivalent to the calling bean.move() in an onKeyDown("left")
onUpdate(() => {
if (isKeyDown("left")) {
bean.move(-SPEED, 0)
}
})
// Certain keys down
let isMoving = false
onUpdate(() => {
isMoving = isKeyDown(["left", "right"])
})
since
v2000.0
group
Input
Function
(k?: Key | Key[]): boolean If any or certain key(s) are just pressed last frame.
param
k- The key(s) to check.
onUpdate(() => {
if (!isKeyPressed()) return // early return as no key was pressed
if (isKeyPressed("space")) debug.log("Pressed the jump key")
if (isKeyPressed(["left", "right"])) debug.log("Pressed any of the move keys")
})
since
v2000.0
group
Input
Function
(k?: Key | Key[]): boolean If any or certain key(s) are just pressed last frame (also fires repeatedly when the keys are being held down).
param
k- The key(s) to check.
let heldKeys = new Set()
onUpdate(() => {
if (isKeyPressedRepeat("space")) {
pressedOrHeld(["space"], 'the jump key')
} else if (isKeyPressedRepeat(["left", "right"])) {
pressedOrHeld(["left", "right"], 'any of the move keys')
} else if (isKeyPressedRepeat()) {
pressedOrHeld(["any"], 'any key')
}
})
onKeyRelease((key) => wait(0.1, () => {
heldKeys.delete(key)
heldKeys.delete("any")
}))
// log message if pressed only or held as well
function pressedOrHeld(keys, string) {
debug.log(`Pressed${keys.some(key => heldKeys.has(key)) ? ' and held' : ''} ${string}`)
keys.forEach((key) => {
if (key == "any" || isKeyDown(key)) heldKeys.add(key)
})
}
since
v2000.0
group
Input
Function
(k?: Key | Key[]): boolean If any or certain key(s) are just released last frame.
param
k- The key(s) to check.
onUpdate(() => {
if (!isKeyReleased()) return // early return as no key was released
if (isKeyReleased("space")) debug.log("Released the jump key")
if (isKeyReleased(["left", "right"])) debug.log("Released any of the move keys")
})
since
v2000.0
group
Input
Function
(btn?: MouseButton | MouseButton[]): boolean If mouse buttons are currently down.
param
btn- The button(s) to check.
since
v2000.0
group
Input
Function
(btn?: MouseButton | MouseButton[]): boolean If mouse buttons are just clicked last frame
param
btn- The button(s) to check.
since
v2000.0
group
Input
Function
(btn?: MouseButton | MouseButton[]): boolean If mouse buttons are just released last frame.
param
btn- The button(s) to check.
since
v2000.0
group
Input
Function
(): boolean If mouse moved last frame.
Function
(btn?: KGamepadButton | KGamepadButton[]): boolean If certain gamepad buttons are just pressed last frame
param
btn- The button(s) to check.
since
v3000.0
group
Input
Function
(btn?: KGamepadButton | KGamepadButton): boolean If certain gamepad buttons are currently held down.
param
btn- The button(s) to check.
since
v3000.0
group
Input
Function
(btn?: KGamepadButton | KGamepadButton[]): boolean If certain gamepad buttons are just released last frame.
param
btn- The button(s) to check.
since
v3000.0
group
Input
Function
(btn?: TButton | TButton[]): boolean If any or certain bound button(s) are just pressed last frame on any input (keyboard, gamepad).
param
btn- The button(s) to check.
onUpdate(() => {
if (!isButtonPressed()) return // early return as no button was pressed
if (isButtonPressed("jump")) debug.log("Player jumped")
if (isButtonPressed(["left", "right"])) debug.log("Player moved")
})
since
v3001.0
group
Input
Function
(btn?: TButton | TButton[]): boolean If any or certain bound button(s) are currently held down on any input (keyboard, gamepad).
param
btn- The button(s) to check.
onUpdate(() => {
if (!isButtonDown()) return // early return as no button is held down
if (isButtonDown("jump")) debug.log("Player is jumping")
if (isButtonDown(["left", "right"])) debug.log("Player is moving")
})
since
v3001.0
group
Input
Function
(btn?: TButton | TButton[]): boolean If any or certain bound button(s) are just released last frame on any input (keyboard, gamepad).
param
btn- The button(s) to check.
onUpdate(() => {
if (!isButtonReleased()) return // early return as no button was released
if (isButtonReleased("jump")) debug.log("Player stopped jumping")
if (isButtonReleased(["left", "right"])) debug.log("Player stopped moving")
})
since
v3001.0
group
Input
Function
(btn: keyof TButtonDef): ButtonBinding Get a input binding from a button name.
param
btn- The button to get binding for.
since
v3001.0
group
Input
Function
(btn: string, def: ButtonBinding): void Set a input binding for a button name.
param
btn- The button to set binding for.
since
v3001.0
group
Input
Function
(btn: TButton): void Press a button virtually.
param
btn- The button to press.
// press "jump" button
pressButton("jump"); // triggers onButtonPress, starts onButtonDown
releaseButton("jump"); // triggers onButtonRelease, stops onButtonDown
since
v3001.0
group
Input
Function
(btn: TButton): void Release a button virtually.
param
btn- The button to release.
// press "jump" button
pressButton("jump"); // triggers onButtonPress, starts onButtonDown
releaseButton("jump"); // triggers onButtonRelease, stops onButtonDown
since
v3001.0
group
Input
Function
(stick: GamepadStick): Vec2 Get stick axis values from a gamepad.
param
stick- The stick to get values from.
returns
The stick axis Vec2.
since
v3001.0
group
Input
Function
(): ButtonBindingDevice | null Get the latest input device type that triggered the input event.
returns
The last input device type, or null if no input event has been triggered.
since
v3001.0
group
Input
Function
(): string[] List of characters inputted since last frame.
returnns
An array of characters inputted.
since
v3000.0
group
Input
Type
: ("f1" | "f2" | "f3" | "f4" | "f5" | "f6" | "f7" | "f8" | "f9" | "f10" | "f11" | "f12" | "`" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "0" | "-" | "+" | "=" | "q" | "w" | "e" | "r" | "t" | "y" | "u" | "i" | "o" | "p" | "[" | "]" | "\" | "a" | "s" | "d" | "f" | "g" | "h" | "j" | "k" | "l" | ";" | "'" | "z" | "x" | "c" | "v" | "b" | "n" | "m" | "," | "." | "/" | "escape" | "backspace" | "enter" | "tab" | "control" | "alt" | "meta" | "space" | " " | "left" | "right" | "up" | "down" | "shift") | ( string & {}) A key.
Type
: "left" | "right" | "middle" | "back" | "forward" A mouse button.
Type
: "north" | "east" | "south" | "west" | "ltrigger" | "rtrigger" | "lshoulder" | "rshoulder" | "select" | "start" | "lstick" | "rstick" | "dpad-up" | "dpad-right" | "dpad-down" | "dpad-left" | "home" | "capture" A gamepad button.
Type
: "left" | "right" A gamepad stick.
Function
(event: string, tag: string, args: any): void Trigger an event on all game objs with certain tag.
param
event- The tag to trigger to.
param
tag- Arguments to pass to the `on()` functions
trigger("shoot", "target", 140);
on("shoot", "target", (obj, score) => {
obj.destroy();
debug.log(140); // every bomb was 140 score points!
});
since
v3001.0.6
group
Events
experimental
This feature is in experimental phase, it will be fully released in v3001.1.0
Function
(event: Ev, tag: Tag, action: (obj: GameObj, args: TupleWithoutFirst<GameObjEvents[Ev]>) => void): KEventController Register an event on all game objs with certain tag.
param
event- The tag to listen for.
param
tag- The function to run when the event is triggered.
// a custom event defined by body() comp
// every time an obj with tag "bomb" hits the floor, destroy it and addKaboom()
on("ground", "bomb", (bomb) => {
destroy(bomb)
addKaboom(bomb.pos)
})
// a custom event can be defined manually
// by passing an event name, a tag, and a callback function
// if you want any tag, use a tag of "*"
on("talk", "npc", (npc, message) => {
npc.add([
text(message),
pos(0, -50),
lifespan(2),
opacity(),
])
});
onKeyPress("space", () => {
// the trigger method on game objs can be used to trigger a custom event
npc.trigger("talk", "Hello, KAPLAY!");
});
returns
The event controller.
since
v2000.0
group
Events
Function
(action: () => void): KEventController Register an event that runs at a fixed framerate.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3001.0
group
Events
Function
(tag: Tag, action: (obj: GameObj) => void): KEventController Function
(tag: Tag, action: (obj: GameObj) => void): KEventController Register an event that runs every frame (~60 times per second) for all game objs with certain tag.
param
tag- The tag to listen for.
param
action- The function to run when the event is triggered.
// move every "tree" 120 pixels per second to the left, destroy it when it leaves screen
// there'll be nothing to run if there's no "tree" obj in the scene
onUpdate("tree", (tree) => {
tree.move(-120, 0)
if (tree.pos.x < 0) {
destroy(tree)
}
})
returns
The event controller.
since
v2000.1
group
Events
Function
(action: () => void): KEventController Register an event that runs every frame (~60 times per second).
param
action- The function to run when the event is triggered.
// This will run every frame
onUpdate(() => {
debug.log("ohhi")
})
returns
The event controller.
since
v2000.1
group
Events
Function
(tag: Tag, action: (obj: GameObj) => void): KEventController Register an event that runs every frame (~60 times per second) for all game objs with certain tag (this is the same as onUpdate but all draw events are run after update events, drawXXX() functions only work in this phase).
param
tag- The tag to listen for.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v2000.1
group
Events
Function
(action: () => void): KEventController Register an event that runs every frame (~60 times per second) (this is the same as onUpdate but all draw events are run after update events, drawXXX() functions only work in this phase).
onDraw(() => {
drawLine({
p1: vec2(0),
p2: mousePos(),
color: rgb(0, 0, 255),
})
})
returns
The event controller.
since
v2000.1
group
Events
Function
(tag: Tag, action: (obj: GameObj) => void): KEventController Register an event that runs when a game obj with certain tag is created.
param
tag- The tag to listen for.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v2000.0
group
Events
Function
(action: (obj: GameObj) => void): KEventController Register an event that runs when a game obj is created.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v2000.0
group
Events
Function
(tag: Tag, action: (obj: GameObj) => void): KEventController Register an event that runs when a game obj with certain tag is destroyed.
param
tag- The tag to listen for.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v2000.0
group
Events
Function
(action: (obj: GameObj) => void): KEventController Register an event that runs when a game obj is destroyed.
param
action- The function to run when the event is triggered.
returns
The event controller.
group
Events
Function
(action: (obj: GameObj, id: string) => void): KEventController Register an event that runs when an object starts using a component.
param
action- The function that runs when an object starts using component.
param
unknown- The id of the component that was added.
returns
The event controller.
since
v3001.10
group
Events
Function
(action: (obj: GameObj, id: string) => void): KEventController Register an event that runs when an object stops using a component.
param
action- The function that runs when an object stops using a component.
param
unknown- The id of the component that was removed.d
returns
The event controller.
since
v3001.10
group
Events
Function
(action: (obj: GameObj, tag: string) => void): KEventController Register an event that runs when an object gains a tag.
param
action- The function that runs when an object gains a tag.
param
unknown- The tag which was added.
returns
The event controller.
since
v3001.10
group
Events
Function
(action: (obj: GameObj, tag: string) => void): KEventController Register an event that runs when an object loses a tag.
param
action- The function that runs when an object loses a tag.
param
unknown- The tag which was removed.
returns
The event controller.
since
v3001.10
group
Events
Function
(action: () => void): void Register an event that runs when all assets finished loading.
param
action- The function to run when the event is triggered.
const bean = add([
sprite("bean"),
])
// certain assets related data are only available when the game finishes loading
onLoad(() => {
debug.log(bean.width)
})
returns
The event controller.
since
v2000.1
group
Events
Function
(action: (name: string, failedAsset: Asset<any>) => void): KEventController | undefined Register an event that runs once for each asset that failed to load,
after all others have completed.
param
actionThe function to run when the event is triggered.
// this will not load
loadSprite("bobo", "notavalidURL");
// process the error
// you decide whether to ignore it, or throw an error and halt the game
onLoadError((name, asset) => {
debug.error(`${name} failed to load: ${asset.error}`);
})
returns
The event controller.
since
v3001.0
group
Events
Function
(action: (progress: number) => void): void Register an event that runs every frame when assets are initially loading. Can be used to draw a custom loading screen.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3000.0
group
Events
Function
(action: (err: Error) => void): void Register a custom error handler. Can be used to draw a custom error screen.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3000.0
group
Events
Function
(action: () => void): void Register an event that runs when the canvas resizes.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3000.0
group
Events
Function
(action: () => void): void Cleanup function to run when quit() is called.
param
action- The function to run when the event is triggered.
since
v3000.0
group
Events
Function
(t1: Tag, t2: Tag, action: (a: GameObj, b: GameObj, col?: Collision) => void): KEventController Register an event that runs once when 2 game objs with certain tags collides (required to have area() component).
param
t1- The tag of the first game obj.
param
t2- The tag of the second game obj.
param
action- The function to run when the event is triggered.
onCollide("sun", "earth", () => {
addExplosion()
})
returns
The event controller.
since
v2000.1
group
Events
Function
(t1: Tag, t2: Tag, action: (a: GameObj, b: GameObj, col?: Collision) => void): KEventController Register an event that runs every frame when 2 game objs with certain tags collides (required to have area() component).
param
t1- The tag of the first game obj.
param
t2- The tag of the second game obj.
param
action- The function to run when the event is triggered.
onCollideUpdate("sun", "earth", () => {
debug.log("okay this is so hot");
})l
returns
The event controller.
since
v3000.0
group
Events
Function
(tag: Tag, action: (a: GameObj) => void): KEventController Register an event that runs once when game objs with certain tags are hovered (required to have area() component).
param
tag- The tag to listen for.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3000.0
group
Events
Function
(tag: Tag, action: (a: GameObj) => void): KEventController Register an event that runs every frame when game objs with certain tags are hovered (required to have area() component).
param
tag- The tag to listen for.
param
action- The function to run when the event is triggered.
// Rotate bean 90 degrees per second when hovered
onHoverUpdate("bean", (bean) => {
bean.angle += dt() * 90
});
returns
The event controller.
since
v3000.0
group
Events
Function
(tag: Tag, action: (a: GameObj) => void): KEventController Register an event that runs once when game objs with certain tags are unhovered (required to have area() component).
param
tag- The tag to listen for.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3000.0
group
Events
Function
(action: () => void): KEventController Register an event that runs when tab is hidden.
returns
The event controller.
since
v3001.0
group
Events
Function
(action: () => void): KEventController Register an event that runs when tab is shown.
returns
The event controller.
since
v3001.0
group
Events
Function
(action: (newScene?: string) => void): KEventController Register an event that runs when current scene ends.
param
action- The function to run when the event is triggered.
returns
The event controller.
since
v3000.0
group
Events
Class
: (action: (args: Args) => unknown)
=> KEventController (action: (args: (Args | PromiseLike<Args>)[]) => void)
=> KEventController Class
: : Partial<{
[Name in
keyof EventMap]:
Registry< (args: EventMap[Name]) => void> } > (name: Name, action: (args: EventMap[Name]) => void)
=> KEventController (name: Name, action: (args: EventMap[Name]) => void)
=> KEventController (name: Name)
=> Promise<unknown> (name: Name, args: EventMap[Name])
=> void Class
: A controller for all events in KAPLAY.
// Create a new event
const logHi = onUpdate(() => {
debug.log("hi");
});
// Pause the event
logHi.paused = true;
// Cancel the event
logHi.cancel();
group
Events
: boolean If the event is paused
: () => void Cancel the event
static (events: KEventController[])
=> KEventController static (oldEv: KEventController, newEv: KEventController)
=> KEventController Constant
: () => Symbol Cancels the event by returning the cancel symbol.
onKeyPress((key) => {
if (key === "q") return cancel();
});
returns
The cancel event symbol.
since
v3001.0.5
group
Events
experimental
This feature is in experimental phase, it will be fully released in v4000.0
Type
: {} Game Object events with their arguments.
If looking for use it with obj.on()
, ignore first parameter (Game Obj)
Function
(): number Get the width of game.
returns
The width of the game.
since
v2000.0
group
Info
Function
(): GameObj Get the root of all objects.
returns
The root object.
since
v2000.0
group
Info
Function
(): number Get the height of game.
returns
The height of the game.
since
v2000.0
group
Info
Function
(): Vec2 Get the center point of view.
// add bean to the center of the screen
add([
sprite("bean"),
pos(center()),
// ...
])
returns
The center point of the view.
since
v2000.0
group
Info
Function
(): number Get the delta time since last frame.
// rotate bean 100 deg per second
bean.onUpdate(() => {
bean.angle += 100 * dt()
})
since
v2000.0
group
Info
Function
(): number Get the fixed delta time since last frame.
Function
(): number Get the rest delta time since last frame.
Function
(): number Get the total time since beginning.
Function
(): boolean If the game canvas is currently focused.
returns
true if focused.
since
v2000.1
group
Info
Function
(color: Color): void Set background color.
Function
(color: Color, alpha: number): void Function
(r: number, g: number, b: number): void Function
(r: number, g: number, b: number, alpha: number): void Function
(): Color | null Get background color.
returns
The background color.
since
v3000.0
group
Info
Function
(): KGamepad[] Get connected gamepads.
returns
An array of connected gamepads.
since
v3000.0
group
Info
Function
(style: Cursor): void Set cursor style.
param
style- The cursor style.
// Change between cursor styles
// Reset cursor to default at start of every frame
onUpdate(() => setCursor("default"));
button.onHover((c) => {
// change cursor to pointer when hovering over button
setCursor("pointer")
})
// Hide the only cursor at start (useful for fakeMouse)
setCursor("none");
since
v2000.0
group
Info
Function
(): Cursor Get current cursor style.
returns
The current cursor style.
since
v2000.0
group
Info
Function
(locked: boolean): void Lock / unlock cursor. Note that you cannot lock cursor within 1 second after user unlocking the cursor with the default unlock gesture (typically the esc key) due to browser policy.
Function
(): boolean Get if cursor is currently locked.
returns
true if locked, false otherwise.
since
v2000.0
group
Info
Function
(f?: boolean): void Enter / exit fullscreen mode. (note: mouse position is not working in fullscreen mode at the moment)
// toggle fullscreen mode on "f"
onKeyPress("f", (c) => {
setFullscreen(!isFullscreen());
});
since
v2000.0
group
Info
Function
(): boolean If currently in fullscreen mode.
returns
true if fullscreen, false otherwise.
since
v2000.0
group
Info
Constant
: HTMLCanvasElement The canvas DOM KAPLAY is currently using.
Constant
: string Current KAPLAY library version.
Function
(n: number, action?: () => void): TimerController Run the function after n seconds.
param
n- The time to wait in seconds.
param
action- The function to run.
// 3 seconds until explosion! Runnn!
wait(3, () => {
explode()
})
// wait() returns a PromiseLike that can be used with await
await wait(1)
returns
A timer controller.
since
v2000.0
group
Timer
Function
(t: number, action: () => void, maxLoops?: number, waitFirst?: boolean): TimerController Run the function every n seconds.
param
t- The time to wait in seconds.
param
action- The function to run.
param
maxLoops- The maximum number of loops to run. If not provided, it will run forever.
param
waitFirst- Whether to wait for the first loop to start.
// spawn a butterfly at random position every 1 second
loop(1, () => {
add([
sprite("butterfly"),
pos(rand(vec2(width(), height()))),
area(),
"friend",
])
})
returns
A timer controller.
since
v2000.0
group
Timer
Type
: { : boolean If the event handler is paused.
(): void Cancel the event handler.
(action: () => void): void Register an event when finished.
(action: () => void): TimerController } Type
: TimerController & { (): void Finish the tween now and cancel.
} Event controller for tween.
Function
(origin: Vec2, direction: Vec2, exclude?: string[]): RaycastResult Create a raycast.
Function
(x: number, y: number): Vec2 Create a 2D vector.
// { x: 0, y: 0 }
vec2()
// { x: 10, y: 10 }
vec2(10)
// { x: 100, y: 80 }
vec2(100, 80)
// move to 150 degrees direction with by length 10
player.pos = pos.add(Vec2.fromAngle(150).scale(10))
returns
The vector.
since
v2000.0
group
Math
Function
(p: Vec2): Vec2 Function
(xy: number): Vec2 Function
(): Vec2 Function
(r: number, g: number, b: number): Color Create a color from RGB values (0 - 255).
param
r- The red value.
param
g- The green value.
param
b- The blue value.
// update the color of the sky to light blue
sky.color = rgb(0, 128, 255)
returns
The color.
since
v2000.0
group
Math
Function
(hex: string): Color Create a color from hex string.
param
hex- The hex string.
sky.color = rgb("#ef6360")
returns
The color.
since
v2000.0
group
Math
Function
(): Color Same as rgb(255, 255, 255).
Function
(hue: number, saturation: number, lightness: number): Color Convert HSL color (all values in 0.0 - 1.0 range) to RGB color.
param
hue- The hue value.
param
saturation- The saturation value.
param
lightness- The lightness value.
// animate rainbow color
onUpdate("rainbow", (obj) => {
obj.color = hsl2rgb(wave(0, 1, time()), 0.6, 0.6);
});
returns
The color.
since
v2000.1
group
Math
Function
(x: number, y: number, w: number, h: number): Quad Rectangle area (0.0 - 1.0).
param
x- The x position of the rectangle.
param
y- The y position of the rectangle.
param
w- The width of the rectangle.
param
h- The height of the rectangle.
returns
A Quad object.
since
v3001.0
group
Math
Function
(p: number): boolean rand(1) <= p
// every frame all objs with tag "unlucky" have 50% chance die
onUpdate("unlucky", (o) => {
if (chance(0.5)) {
destroy(o)
}
})
group
Math
Function
(from: V, to: V, t: number): V Linear interpolation.
Function
(from: V, to: V, duration: number, setValue: (value: V) => void, easeFunc?: (t: number) => number): TweenController Tweeeeeeeening!
since
v3000.0
// tween bean to mouse position
tween(bean.pos, mousePos(), 1, (p) => bean.pos = p, easings.easeOutBounce)
group
Math
Constant
: Record<EaseFuncs, EaseFunc> A collection of easing functions for tweening.
Function
(steps: number, position: StepPosition): (x: number) => number Steps easing. Eases in discontinious steps.
Function
(keys: Vec2[]): (x: number) => number Linear easing with keyframes
Function
(p1: Vec2, p2: Vec2): (x: number) => number Bezier easing. Both control points need x to be within 0 and 1.
Function
(v: number, l1: number, h1: number, l2: number, h2: number): number Map a value from one range to another range.
If the value overshoots, the source range, the result values will also do.
For clamping check mapc
param
vThe value the function will depend on.
param
l1The minimum value of the source range.
param
h1The minimum result value.
param
l2The maximum value of the source range.
param
h2The maximum result value.
onUpdate(() => {
// Redness will be 0 when the mouse is at the left edge and 255 when the mouse is at the right edge
const redness = map(mousePos().x, 0, width(), 0, 255)
setBackground(rgb(redness, 0, 0))
})
returns
The result value based on the source value.
since
v2000.0
group
Math
Function
(v: number, l1: number, h1: number, l2: number, h2: number): number Map a value from one range to another range, and clamp to the dest range.
param
vThe value the function will depend on.
param
l1The minimum value of the source range.
param
h1The minimum result value.
param
l2The maximum value of the source range.
param
h2The maximum result value.
onUpdate(() => {
// This variable will be 0 when the mouse is at the left edge and 255 when the mouse is at the right edge
const redness = mapc(mousePos().x, 0, width(), 0, 255)
setBackground(rgb(redness, 0, 0))
})
returns
The clamped result value based on the source value.
since
v2000.0
group
Math
Function
(lo: number, hi: number, t: number, func?: (x: number) => number): number Interpolate between 2 values (Optionally takes a custom periodic function, which default to Math.sin).
// bounce color between 2 values as time goes on
onUpdate("colorful", (c) => {
c.color.r = wave(0, 255, time())
c.color.g = wave(0, 255, time() + 1)
c.color.b = wave(0, 255, time() + 2)
})
group
Math
Function
(deg: number): number Convert degrees to radians.
Function
(rad: number): number Convert radians to degrees.
Function
(n: number, min: number, max: number): number Return a value clamped to an inclusive range of min and max.
Function
(pt1: Vec2, pt2: Vec2, pt3: Vec2, t: number): Vec2 Evaluate the quadratic Bezier at the given t
Function
(pt1: Vec2, pt2: Vec2, pt3: Vec2, t: number): Vec2 Evaluate the first derivative of a quadratic bezier at the given t
Function
(pt1: Vec2, pt2: Vec2, pt3: Vec2, t: number): Vec2 Evaluate the second derivative of a quadratic bezier at the given t
Function
(pt1: Vec2, pt2: Vec2, pt3: Vec2, pt4: Vec2, t: number): Vec2 Evaluate the cubic Bezier at the given t
Function
(pt1: Vec2, pt2: Vec2, pt3: Vec2, pt4: Vec2, t: number): Vec2 Evaluate the first derivative of a cubic Bezier at the given t
Function
(pt1: Vec2, pt2: Vec2, pt3: Vec2, pt4: Vec2, t: number): Vec2 Evaluate the second derivative of a cubic bezier at the given t
Function
(pt1: Vec2, pt2: Vec2, pt3: Vec2, pt4: Vec2, t: number): Vec2 Evaluate the Catmull-Rom spline at the given t
Function
(pt1: Vec2, pt2: Vec2, pt3: Vec2, pt4: Vec2, t: number): Vec2 Evaluate the first derivative of a Catmull-Rom spline at the given t
Function
(curve: (t: number) => Vec2, entries: number, detail: number): (t: number, inverse: boolean) => number Returns a function.
entries is the amount of entries in the LUT.
detail is the sampling granularity of each segment recorded in the LUT.
This new function either returns the length for a given t, or t for a given length, depending on the inverse parameter.
Function
(curve: (t: number) => Vec2): (s: number) => Vec2 Returns a new curve which is normalized. This new curve has constant speed
curve is any curve in t (non-constant between 0 and 1)
returns a curve in s (constant between 0 and 1)
Function
(l: Line, pt: Vec2): boolean Check if a line and a point intersect.
param
l- The line.
param
pt- The point.
returns
true if the line and point intersects.
since
v2000.0
group
Math
Function
(l1: Line, l2: Line): Vec2 | null Check if 2 lines intersects, if yes returns the intersection point.
param
l1- The first line.
param
l2- The second line.
return
The intersection point, or null if the lines are parallel.
since
v2000.0
group
Math
Function
(l: Line, c: Circle): boolean Check if a line and a circle intersect.
param
l- The line.
param
c- The circle.
returns
true if the line and circle intersects.
since
v2000.0
group
Math
Function
(r1: Rect, r2: Rect): boolean Check if 2 rectangle overlaps.
param
r1- The first rectangle.
param
r2- The second rectangle.
returns
true if the rectangles overlap.
since
v2000.0
group
Math
Function
(r: Rect, l: Line): boolean Check if a line and a rectangle overlaps.
param
r- The line.
param
l- The rectangle.
returns
true if the line and rectangle overlaps.
since
v2000.0
group
Math
Function
(r: Rect, pt: Vec2): boolean Check if a point is inside a rectangle.
param
r- The rectangle.
param
pt- The point.
returns
true if the point is inside the rectangle.
since
v2000.0
group
Math
Function
(c: Circle, p: Polygon): boolean Check if a circle and polygon intersect linewise.
param
c- The circle.
param
p- The polygon.
returns
true if the circle and polygon intersect linewise.
since
v2000.0
group
Math
Function
(pts: Vec2[]): boolean Function
(pts: Vec2[]): Vec2[][] Class
: (vertices: Vec2[])
=> NavPolygon (pos: Vec2, size: Vec2)
=> NavPolygon (index: number)
=> number[] (a: number, b: number)
=> number (indexA: number, indexB: number)
=> number (start: number, goal: number)
=> number[] (start: Vec2, goal: Vec2, opt: any)
=> Vec2[] Class
: (shape: ShapeType)
=> boolean (origin: Vec2, direction: Vec2)
=> RaycastResult Class
: (shape: ShapeType | Vec2)
=> boolean (origin: Vec2, direction: Vec2)
=> RaycastResult Class
: static (p1: Vec2, p2: Vec2)
=> Rect ()
=> [Vec2, Vec2, Vec2, Vec2] (shape: ShapeType | Vec2)
=> boolean (origin: Vec2, direction: Vec2)
=> RaycastResult Class
: (shape: ShapeType | Vec2)
=> boolean (origin: Vec2, direction: Vec2)
=> RaycastResult Class
: static (tr: Mat2)
=> Ellipse (shape: ShapeType)
=> boolean (origin: Vec2, direction: Vec2)
=> RaycastResult Class
: (shape: ShapeType | Vec2)
=> boolean (origin: Vec2, direction: Vec2)
=> RaycastResult (a: Vec2, b: Vec2)
=> [Polygon | null, Polygon | null] Class
: A 2D vector.
: number The x coordinate
: number The y coordinate
static (deg: number)
=> Vec2 Create a new Vec2 from an angle in degrees
static (arr: Array<number>)
=> Vec2 Create a new Vec2 from an array
static : Vec2 An empty vector. (0, 0)
static : Vec2 A vector with both components of 1. (1, 1)
static : Vec2 A vector signaling to the left. (-1, 0)
static : Vec2 A vector signaling to the right. (1, 0)
static : Vec2 A vector signaling up. (0, -1)
static : Vec2 A vector signaling down. (0, 1)
()
=> Vec2 Clone the vector
(args: Vec2Args)
=> Vec2 Returns the addition with another vector.
(args: Vec2Args)
=> Vec2 Returns the subtraction with another vector.
(args: Vec2Args)
=> Vec2 Scale by another vector. or a single number
(args: Vec2Args)
=> number Get distance between another vector
(args: Vec2Args)
=> number Get squared distance between another vector
static (v: Vec2, other: Vec2)
=> number Calculates the squared distance between the vectors
param
vThe vector
param
otherThe other vector
returns
The distance between the vectors
()
=> number Get length of the vector
()
=> number Get squared length of the vector
()
=> Vec2 Get the unit vector (length of 1).
()
=> Vec2 Get the perpendicular vector.
(normal: Vec2)
=> Vec2 Get the reflection of a vector with a normal.
(on: Vec2)
=> Vec2 Get the projection of a vector onto another vector.
(on: Vec2)
=> Vec2 Get the rejection of a vector onto another vector.
(p2: Vec2)
=> number Get the dot product with another vector.
static (v: Vec2, other: Vec2)
=> number Get the dot product between 2 vectors.
(p2: Vec2)
=> number Get the cross product with another vector.
static (v: Vec2, other: Vec2)
=> number Get the cross product between 2 vectors.
(args: Vec2Args)
=> number Get the angle of the vector in degrees.
(args: Vec2Args)
=> number Get the angle between this vector and another vector.
(dest: Vec2, t: number)
=> Vec2 Linear interpolate to a destination vector (for positions).
(dest: Vec2, t: number)
=> Vec2 Spherical linear interpolate to a destination vector (for rotations).
()
=> boolean If the vector (x, y) is zero.
(n: number)
=> Vec2 To n precision floating point.
(m: Mat4)
=> Vec2 Multiply by a Mat4.
(other: Vec2)
=> boolean See if one vector is equal to another.
()
=> Rect Converts the vector to a Rect with the vector as the origin.
()
=> Array<number> Converts the vector to an array.
Class
: 0-255 RGBA color.
static (arr: number[])
=> Color static (hex: string | number)
=> Color Create color from hex string or literal.
Color.fromHex(0xfcef8d)
Color.fromHex("#5ba675")
Color.fromHex("d46eb3")
since
v3000.0
static (h: number, s: number, l: number)
=> Color (a: number)
=> Color Lighten the color (adds RGB by n).
(a: number)
=> Color Darkens the color (subtracts RGB by n).
(dest: Color, t: number)
=> Color Linear interpolate to a destination color.
()
=> [number, number, number] Convert color into HSL format.
(other: Color)
=> boolean ()
=> string Return the hex string of color.
()
=> Array<number> Return the color converted to an array.
Class
: static (a: number)
=> Mat4 static (a: number)
=> Mat4 static (a: number)
=> Mat4 Class
: Class
: (a: number, b: number)
=> number (a: Vec2, b: Vec2)
=> Vec2 (a: Color, b: Color)
=> Color (args: [] | [T] | [T, T])
=> T Type
: [number, number] | [number] | [Vec2] | [number | Vec2] | [] Possible arguments for a Vec2.
Type
: Point | Circle | Line | Rect | Polygon | Ellipse Type
: {} Type
: RaycastHit | null Type
: number | Vec2 | Color | Mat4 | number[] | Vec2[] | Color[] Type
: Exclude<string, "u_tex"> Type
: Record<UniformKey, UniformValue> Type
: number | Vec2 | Color Type
: number | Vec2 | Color Interface
: Collision resolution data.
: GameObj The first game object in the collision.
: GameObj The second game object in the collision.
: Vec2 The contact normal.
: Vec2 The length of the displacement.
: Vec2 The displacement source game object have to make to avoid the collision.
: boolean If the collision is resolved.
(): void Prevent collision resolution if not yet resolved.
(): boolean If the 2 objects have any overlap, or they're just touching edges.
(): Collision Get a new collision with reversed source and target relationship.
(): boolean If the collision happened (roughly) on the top side.
(): boolean If the collision happened (roughly) on the bottom side.
(): boolean If the collision happened (roughly) on the left side.
(): boolean If the collision happened (roughly) on the right side.
Type
: "left" | "right" | "top" | "bottom" Type
: "linear" | "easeInSine" | "easeOutSine" | "easeInOutSine" | "easeInQuad" | "easeOutQuad" | "easeInOutQuad" | "easeInCubic" | "easeOutCubic" | "easeInOutCubic" | "easeInQuart" | "easeOutQuart" | "easeInOutQuart" | "easeInQuint" | "easeOutQuint" | "easeInOutQuint" | "easeInExpo" | "easeOutExpo" | "easeInOutExpo" | "easeInCirc" | "easeOutCirc" | "easeInOutCirc" | "easeInBack" | "easeOutBack" | "easeInOutBack" | "easeInElastic" | "easeOutElastic" | "easeInOutElastic" | "easeInBounce" | "easeOutBounce" | "easeInOutBounce" The list of easing functions available.
Type
: (t: number) => number A function that takes a time value and returns a new time value.
Function
(name: string): LayerComp Determines the layer for objects. Object will be drawn on top if the layer index is higher.
param
name- The layer name to set.
// Define layers
layers(["background", "game", "foreground"], "game")
const bean = add([
sprite("bean"),
pos(100, 100),
layer("background"),
])
// Mark is in a higher layer, so he will be drawn on top of bean
const mark = add([
sprite("mark"),
pos(100, 100),
layer("game"),
])
bean.layer("foreground") // Bean is now in the foreground layer and will be drawn on top of mark
returns
The layer comp.
since
v3001.0
group
Layer
Function
(t1: Tag, t2: Tag, action: (a: GameObj, b: GameObj, col?: Collision) => void): KEventController Register an event that runs once frame when 2 game objs with certain tags stops colliding (required to have area() component).
param
t1- The tag of the first game obj.
param
t2- The tag of the second game obj.
param
action- The function to run when the event is triggered.
onCollideEnd("bean", "earth", () => {
debug.log("destroying world in 3... 2... 1...")
});
returns
The event controller.
since
v3000.0
group
Physics
Function
(g: number): void Set gravity.
param
g- The gravity to set.
since
v2000.0
group
Physics
Function
(): number Get gravity.
since
v3001.0
group
Physics
Function
(d: Vec2): void Set gravity direction.
since
v3001.0
group
Physics
Function
(): Vec2 Get gravity direction.
returns
The gravity direction.
since
v3001.0
group
Physics
Function
(pos: Vec2): void Set camera position.
param
pos- The position to set the camera to.
// move camera to (100, 100)
setCamPos(100, 100);
setCamPos(vec2(100, 100));
setCamPos(100); // x and y are the same
since
v3001.10
group
Camera
Function
(x: number, y: number): void Function
(xy: number): void Function
(): Vec2 Get camera position.
returns
The current camera position.
since
v3001.10
group
Camera
Function
(scale: Vec2): void Set camera scale.
param
scale- The scale to set the camera to.
// set camera scale to (2, 2)
setCamScale(2, 2);
setCamScale(vec2(2, 2));
setCamScale(2); // x and y are the same
since
v3001.10
group
Camera
Function
(x: number, y: number): void Function
(xy: number): void Function
(): Vec2 Get camera scale.
returns
The current camera scale.
since
v3001.10
group
Camera
Function
(angle: number): void Set camera rotation.
param
angle- The angle to rotate the camera.
// rotate camera 90 degrees
setCamRot(90);
since
v3001.10
group
Camera
Function
(): number Get camera rotation.
returns
The current camera rotation.
since
v3001.10
group
Camera
Function
(): Mat4 Get camera transform.
returns
The current camera transform.
since
v3001.10
group
Camera
Function
(intensity?: number): void Camera shake.
param
intensity- The intensity of the shake. Default to 12.
// shake intensively when bean collides with a "bomb"
bean.onCollide("bomb", () => {
shake(120)
})
since
v3000.0
group
Camera
Function
(flashColor: Color, fadeOutTime: number): TimerController Camera flash.
param
flashColor- The color of the flash.
param
fadeOutTime- The time it takes for the flash to fade out.
onClick(() => {
// flashed
flash(WHITE, 0.5);
});
returns
A timer controller.
since
v3001.0
group
Camera
Function
(pos: Vec2): Vec2 param
pos- The position to set the camera to.
deprecated
Use
// camera follows player
player.onUpdate(() => {
camPos(player.pos)
})
returns
The current camera position.
since
v2000.0
group
Camera
Function
(x: number, y: number): Vec2 Function
(xy: number): Vec2 Function
(): Vec2 Function
(scale: Vec2): Vec2 param
scale- The scale to set the camera to.
deprecated
Use
returns
The current camera scale.
since
v2000.0
group
Camera
Function
(x: number, y: number): Vec2 Function
(xy: number): Vec2 Function
(): Vec2 Function
(angle?: number): number param
angle- The angle to rotate the camera.
deprecated
Use
returns
The current camera rotation.
since
v2000.0
group
Camera
Function
(flashColor: Color, fadeOutTime: number): TimerController param
flashColor- The color of the flash.
param
fadeOutTime- The time it takes for the flash to fade out.
deprecated
use
returns
A timer controller.
since
v3001.0
group
Camera
Function
(): Mat4 deprecated
use
group
Camera
Function
(p: Vec2): Vec2 Transform a point from world position (relative to the root) to screen position (relative to the screen).
param
p- The point to transform.
since
v3001.0
group
Camera
Function
(p: Vec2): Vec2 Transform a point from screen position (relative to the screen) to world position (relative to the root).
param
p- The point to transform.
since
v3001.0
group
Camera
Function
(src: string | SoundData | Asset<SoundData> | MusicData | Asset<MusicData>, options?: AudioPlayOpt): AudioPlay Play a piece of audio.
// play a one off sound
play("wooosh")
// play a looping soundtrack (check out AudioPlayOpt for more options)
const music = play("OverworldlyFoe", {
volume: 0.8,
loop: true
})
// using the handle to control (check out AudioPlay for more controls / info)
music.paused = true
music.speed = 1.2
returns
A control handle.
since
v2000.0
group
Audio
Function
(options?: AudioPlayOpt): AudioPlay Yep. Plays a burp sound.
returns
A control handle.
since
v2000.0
group
Audio
Function
(v: number): void Set the global volume.
param
v- The volume to set.
setVolume(0.5)
since
v3001.10
group
Audio
Function
(): number Get the global volume.
returns
The current volume.
since
v3001.10
group
Audio
Function
(v?: number): number deprecated
Use
// makes everything quieter
volume(0.5)
returns
The new volume or the current volume.
since
v2000.0
group
Audio
Constant
: AudioContext Get the underlying browser AudioContext.
Function
(a?: T, b?: T): T Get a random value between the given bound.
param
a- The lower bound. If not upper bound, this is the upper bound and the lower bound is 0.
param
b- The upper bound.
// a random number between 0 - 8
rand(8)
// a random point on screen
rand(vec2(width(), height()))
// a random color
rand(rgb(255, 255, 255))
// a random number between 50 - 100
rand(50, 100);
// a random point on screen with x between 20 - 100 and y between 20 - 100
rand(vec2(20), vec2(100));
// spawn something on the right side of the screen but with random y value within screen height
add([
pos(width(), rand(0, height())),
]);
since
v2000.0
group
Random
Function
(a?: number, b?: number): number rand() but floored to integer. If not arguments, returns 0 or 1.
param
a- The lower bound. If not upper bound, this is the upper bound.
param
b- The upper bound.
randi(); // returns either 0 or 1
randi(10); // returns a random integer between 0 and 9
randi(10, 20); // returns a random integer between 10 and 19
returns
A random integer between 0 and 1.
since
v2000.0
group
Random
Function
(seed?: number): number Get / set the random number generator seed.
param
seed- The seed to set.
randSeed(Date.now())
returns
The new seed.
since
v2000.0
group
Random
Function
(lst: T[]): T Choose a random item from a list.
param
lst- The list to choose from.
// decide the best fruit randomly
const bestFruit = choose(["apple", "banana", "pear", "watermelon"]);
returns
A random item from the list.
since
v3001.0
group
Random
Function
(lst: T[], count: number): T[] Choose multiple random items from a list.
param
lst- The list to choose from.
param
count- The number of items to choose.
returns
An array of random items from the list.
since
v3001.0
group
Random
Function
(lst: T[]): T[] Shuffle an array.
param
lst- The list to shuffle.
returns
A shuffled array.
since
v3001.0
group
Random
Function
(layers: string[], defaultLayer: string): void Define the layer names. Should be called before any objects are made.
param
layers- The layer names.
param
defaultLayer- The default layer name.
layers(["bg", "obj", "ui"], "obj")
// no layer specified, will be added to "obj"
add([
sprite("bean"),
]);
// add to "bg" layer
add([
sprite("bg"),
layer("bg"),
]);
since
v3001.10
group
Layers
Function
(): string[] | null Get the layer names.
returns
The layer names or null if not set.
since
v3001.10
group
Layers
experimental
This feature is in experimental phase, it will be fully released in v4000.0
Function
(): string | null Get the default layer name.
returns
The default layer name or null if not set.
since
v3001.0.5
group
Layers
experimental
This feature is in experimental phase, it will be fully released in v4000.0
Function
(map: string[], opt: LevelOpt): GameObj<PosComp | LevelComp> Construct a level based on symbols.
param
map- The map data.
param
opt- The level options.
addLevel([
" $",
" $",
" $$ = $",
" % ==== = $",
" = ",
" ^^ = > = &",
"===========================",
], {
// define the size of tile block
tileWidth: 32,
tileHeight: 32,
// define what each symbol means, by a function returning a component list (what will be passed to add())
tiles: {
"=": () => [
sprite("floor"),
area(),
body({ isStatic: true }),
],
"$": () => [
sprite("coin"),
area(),
pos(0, -9),
],
"^": () => [
sprite("spike"),
area(),
"danger",
],
}
})
returns
A game obj with the level.
since
v2000.0
group
Level
Function
(key: string, def?: T): T | null Get data from local storage, if not present can set to a default value.
param
key- The key to get data from.
param
def- The default value to set if not found.
returns
The data or null if not found.
since
v2000.0
group
Data
Function
(key: string, data: any): void Set data from local storage.
param
key- The key to set data to.
param
data- The data to set.
since
v2000.0
group
Data
Function
(): string Take a screenshot and get the data url of the image.
returns
The dataURL of the image.
since
v2000.0
group
Data
Function
(filename: string, dataurl: string): void Trigger a file download from a url.
Function
(filename: string, text: string): void Trigger a text file download.
Function
(filename: string, data: any): void Trigger a json download from a .
Function
(filename: string, blob: Blob): void Trigger a file download from a blob.
Function
(frameRate?: number): Recording Start recording the canvas into a video. If framerate is not specified, a new frame will be captured each time the canvas changes.
returns
A control handle.
since
v2000.1
group
Data
Interface
: Screen recording control handle.
(): void Pause the recording.
(): void Resume the recording.
(): Promise<Blob> Stop the recording and get the video data as mp4 Blob.
(filename?: string): void Stop the recording and downloads the file as mp4. Trying to resume later will lead to error.
Function
(opt: DrawSpriteOpt): void Draw a sprite.
param
opt- The draw sprite options.
drawSprite({
sprite: "bean",
pos: vec2(100, 200),
frame: 3,
});
since
v2000.0
group
Draw
Function
(opt: DrawTextOpt): void Draw a piece of text.
param
opt- The draw text options.
drawText({
text: "oh hi",
size: 48,
font: "sans-serif",
width: 120,
pos: vec2(100, 200),
color: rgb(0, 0, 255),
});
since
v2000.0
group
Draw
Function
(opt: DrawRectOpt): void Draw a rectangle.
param
opt- The draw rect options.
drawRect({
width: 120,
height: 240,
pos: vec2(20, 20),
color: YELLOW,
outline: { color: BLACK, width: 4 },
});
since
v2000.0
group
Draw
Function
(opt: DrawLineOpt): void Draw a line.
param
opt- The draw line options.
drawLine({
p1: vec2(0),
p2: mousePos(),
width: 4,
color: rgb(0, 0, 255),
});
since
v3000.0
group
Draw
Function
(opt: DrawLinesOpt): void Draw lines.
param
opt- The draw lines options.
drawLines({
pts: [ vec2(0), vec2(0, height()), mousePos() ],
width: 4,
pos: vec2(100, 200),
color: rgb(0, 0, 255),
});
since
v3000.0
group
Draw
Function
(curve: (t: number) => Vec2, opt: DrawCurveOpt): void Draw a curve.
drawCurve(t => evaluateBezier(a, b, c, d, t)
{
width: 2,
color: rgb(0, 0, 255),
});
since
v3001.0
group
Draw
Function
(opt: DrawBezierOpt): void Draw a cubic Bezier curve.
param
opt- The draw cubic bezier options.
drawBezier({
pt1: vec2(100, 100),
pt2: vec2(200, 100),
pt3: vec2(200, 200),
pt4: vec2(100, 200),
width: 2,
color: GREEN
});
since
v3001.0
group
Draw
Function
(opt: DrawTriangleOpt): void Draw a triangle.
param
opt- The draw triangle options.
drawTriangle({
p1: vec2(0),
p2: vec2(0, height()),
p3: mousePos(),
pos: vec2(100, 200),
color: rgb(0, 0, 255),
});
since
v3001.0
group
Draw
Function
(opt: DrawCircleOpt): void Draw a circle.
param
opt- The draw circle options.
drawCircle({
pos: vec2(100, 200),
radius: 120,
color: rgb(255, 255, 0),
});
since
v2000.0
group
Draw
Function
(opt: DrawEllipseOpt): void Draw an ellipse.
param
opt- The draw ellipse options.
drawEllipse({
pos: vec2(100, 200),
radiusX: 120,
radiusY: 120,
color: rgb(255, 255, 0),
});
since
v3000.0
group
Draw
Function
(opt: DrawPolygonOpt): void Draw a convex polygon from a list of vertices.
param
opt- The draw polygon options.
drawPolygon({
pts: [
vec2(-12),
vec2(0, 16),
vec2(12, 4),
vec2(0, -2),
vec2(-8),
],
pos: vec2(100, 200),
color: rgb(0, 0, 255),
});
since
v3000.0
group
Draw
Function
(opt: DrawUVQuadOpt): void Draw a rectangle with UV data.
param
opt- The draw rect with UV options.
since
v2000.0
group
Draw
Function
(text: FormattedText): void Draw a piece of formatted text from formatText().
param
text- The formatted text object.
// text background
const txt = formatText({
text: "oh hi",
});
drawRect({
width: txt.width,
height: txt.height,
});
drawFormattedText(txt);
since
v2000.2
group
Draw
Function
(content: () => void, mask: () => void): void Whatever drawn in content will only be drawn if it's also drawn in mask (mask will not be rendered).
Function
(content: () => void, mask: () => void): void Subtract whatever drawn in content by whatever drawn in mask (mask will not be rendered).
Function
(): void Push current transform matrix to the transform stack.
pushTransform();
// These transforms will affect every render until popTransform()
pushTranslate(120, 200);
pushRotate(time() * 120);
pushScale(6);
drawSprite("bean");
drawCircle(vec2(0), 120);
// Restore the transformation stack to when last pushed
popTransform();
since
v2000.0
group
Draw
Function
(): void Pop the topmost transform matrix from the transform stack.
Function
(x: number, y: number): void Translate all subsequent draws.
pushTranslate(100, 100)
// this will be drawn at (120, 120)
drawText({
text: "oh hi",
pos: vec2(20, 20),
})
since
v2000.0
group
Draw
Function
(p: Vec2): void Function
(args: Vec2Args | [undefined]): void Function
(x: number, y: number): void Scale all subsequent draws.
Function
(s: Vec2 | number): void Function
(args: Vec2Args | [undefined] | [undefined, undefined]): void Function
(angle?: number): void Rotate all subsequent draws.
Function
(mat?: Mat4): void Apply a transform matrix, ignore all prior transforms.
Function
(name: string, uniform?: Uniform | ( () => Uniform)): void Apply a post process effect from a shader name.
loadShader("invert", null, `
vec4 frag(vec2 pos, vec2 uv, vec4 color, sampler2D tex) {
vec4 c = def_frag();
return vec4(1.0 - c.r, 1.0 - c.g, 1.0 - c.b, c.a);
}
`)
usePostEffect("invert")
since
v3000.0
group
Draw
Function
(options: DrawTextOpt): FormattedText Format a piece of text without drawing (for getting dimensions, etc).
// text background
const txt = formatText({
text: "oh hi",
});
drawRect({
width: txt.width,
height: txt.height,
});
drawFormattedText(txt);
returns
The formatted text object.
since
v2000.2
group
Draw
Function
(w: number, h: number): Canvas Create a canvas to draw stuff offscreen.
returns
The canvas object.
since
v3001.0
group
Draw
Type
: RenderProps & { : string The text to render.
?: string | FontData | Asset<FontData> | BitmapFontData | Asset<BitmapFontData> The name of font to use.
?: number The size of text (the height of each character).
?: TextAlign Text alignment (default "left")
?: number The maximum width. Will wrap word around if exceed.
?: number The gap between each line (only available for bitmap fonts).
?: number The gap between each character (only available for bitmap fonts).
?: Anchor | Vec2 The anchor point, or the pivot point. Default to "topleft".
?: CharTransform | CharTransformFunc Transform the pos, scale, rotation or color for each character based on the index or char (only available for bitmap fonts).
?: Record<string, CharTransform | CharTransformFunc> Stylesheet for styled chunks, in the syntax of "this is a [stylename]styled[/stylename] word" (only available for bitmap fonts).
?: boolean If true, any (whitespace) indent on the first line of the paragraph
will be copied to all of the lines for those parts that text-wrap.
} How the text should look like.
Type
: "center" | "left" | "right" How the text should be aligned.
Type
: string | "auto" | "default" | "none" | "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-int" | "zoom-out" Type
: "topleft" | "top" | "topright" | "left" | "center" | "right" | "botleft" | "bot" | "botright" Type
: Rect | Line | Point | Circle | Ellipse | Polygon Constant
: Debug The Debug interface for debugging stuff.
// pause the whole game
debug.paused = true
// enter inspect mode
debug.inspect = true
returns
The debug interface.
since
v2000.0
group
Debug
Interface
: : boolean Pause the whole game.
: boolean Draw bounding boxes of all objects with area()
component, hover to inspect their states.
: number Global time scale.
: boolean Show the debug log or not.
(): number Current frames per second.
(): number Total number of frames elapsed.
(): number Number of draw calls made last frame.
(): void Step to the next frame. Useful with pausing.
(): void Clear the debug log.
(msg: any): void Log some text to on screen debug log.
(msg: any): void Log an error message to on screen debug log.
: Recording | null The recording handle if currently in recording mode.
(): number Get total number of objects.
Function
(plugin: KAPLAYPlugin<T>): KAPLAYCtx & T Import a plugin.
param
plugin- The plugin to import.
returns
The updated context with the plugin.
since
v2000.0
group
Plugins
Type
: (k: KAPLAYCtx) => T | ( (args: any) => (k: KAPLAYCtx) => T) A plugin for KAPLAY.
// a plugin that adds a new function to KAPLAY
const myPlugin = (k) => ({
myFunc: () => {
k.debug.log("hello from my plugin")
}
})
// use the plugin
kaplay({
plugins: [ myPlugin ]
})
// now you can use the new function
myFunc()
group
Plugins
Constant
: string All chars in ASCII.
since
v2000.0
group
Constants
Constant
: Vec2 Left directional vector vec2(-1, 0).
since
v2000.0
group
Constants
Constant
: Vec2 Right directional vector vec2(1, 0).
since
v2000.0
group
Constants
Constant
: Vec2 Up directional vector vec2(0, -1).
since
v2000.0
group
Constants
Constant
: Vec2 Down directional vector vec2(0, 1).
since
v2000.0
group
Constants
Constant
: Color Red color.
since
v2000.0
group
Constants
Constant
: Color Green color.
since
v2000.0
group
Constants
Constant
: Color Blue color.
since
v2000.0
group
Constants
Constant
: Color Yellow color.
since
v2000.0
group
Constants
Constant
: Color Cyan color.
since
v2000.0
group
Constants
Constant
: Color Cyan color.
since
v2000.0
group
Constants
Constant
: Color White color.
since
v2000.0
group
Constants
Constant
: Color Black color.
since
v2000.0
group
Constants
Type
: { ?: KGamepadButton | KGamepadButton[] ?: MouseButton | MouseButton[] } A button binding.
Type
: Record<string, ButtonBinding> A buttons definition for an action (jump, walk-left, run).
Type
: "keyboard" | "gamepad" | "mouse" A button binding device
Class
: (action: () => void)
=> void Class
: (uniform: Uniform)
=> void Interface
: Describes how to transform each character.
?: Vec2 Offset to apply to the position of the text character.
Shifts the character's position by the specified 2D vector.
?: Vec2 | number Scale transformation to apply to the text character's current scale.
When a number, it is scaled uniformly.
Given a 2D vector, it is scaled independently along the X and Y axis.
?: number Increases the amount of degrees to rotate the text character.
?: Color Color transformation applied to the text character.
Multiplies the current color with this color.
?: number Opacity multiplication applied to the text character.
For example, an opacity of 0.4 with 2 set in the transformation, the resulting opacity will be 0.8 (0.4 × 2).
?: boolean If true, the styles applied by this specific entry transform
will override, rather than compose with, the default styles given in and by other
components' styles.
Interface
: ?: number Animation speed.
?: CompList<any> Additional components.
Interface
: : number Width of each block.
: number Height of each block.
?: Vec2 Position of the first block.
: {} Definition of each tile.
?: (sym: string, pos: Vec2) => CompList<any> | null | undefined Called when encountered a symbol not defined in "tiles".
Type
: { ?: boolean Recursively get all children and their descendants.
?: boolean Live update the returned list every time object is added / removed.
?: "tags" | "comps" Get only by tags or components.
} Type
: { ?: string | string[] All objects which include all or any of these tags, depending on includeOp.
?: "and" | "or" Selects the operator to use. Defaults to and.
?: string | string[] All objects which do not have all or any of these tags, depending on excludeOp.
?: "and" | "or" Selects the operator to use. Defaults to and.
?: number All objects which are near or far to the position of this, depending on distanceOp.
?: "near" | "far" Selects the operator to use. Defaults to near.
?: boolean All objects visible from this standpoint.
?: "children" | "siblings" | "ancestors" | "descendants" All objects in the given group. Defaults to children.
} Type
: {} Constant
: KAPLAYInternal Internal data that should not be accessed directly.
Function
(pt1: number, m1: number, m2: number, pt2: number): (t: number) => number A second order function returning an evaluator for the given 1D Hermite curve
param
pt1- First point
param
m1- First control point (tangent)
param
m2- Second control point (tangent)
param
pt2- Second point
returns
A function which gives the value on the 1D Hermite curve at t
Function
(pt1: Vec2, m1: Vec2, m2: Vec2, pt2: Vec2, tension: number): (t: number) => Vec2 A second order function returning an evaluator for the given 2D Cardinal curve
param
pt1- Previous point
param
m1- First point
param
m2- Second point
param
pt2- Next point
param
tensionThe tension of the curve, [0..1] from round to tight.
returns
A function which gives the value on the 2D Cardinal curve at t
Function
(pt1: Vec2, m1: Vec2, m2: Vec2, pt2: Vec2): (t: number) => Vec2 A second order function returning an evaluator for the given 2D Catmull-Rom curve
param
pt1- Previous point
param
m1- First point
param
m2- Second point
param
pt2- Next point
returns
A function which gives the value on the 2D Catmull-Rom curve at t
Function
(pt1: Vec2, pt2: Vec2, pt3: Vec2, pt4: Vec2): (t: number) => Vec2 A second order function returning an evaluator for the given 2D quadratic Bezier curve
param
pt1- First point
param
pt2- First control point
param
pt3- Second control point
param
pt4- Second point
returns
A function which gives the value on the 2D quadratic Bezier curve at t
Function
(pt1: Vec2, pt2: Vec2, pt3: Vec2, pt4: Vec2, tension: number, continuity: number, bias: number): (t: number) => Vec2 A second order function returning an evaluator for the given 2D Kochanek–Bartels curve
param
pt1- Previous point
param
pt2- First point
param
pt3- Second point
param
pt4- Next point
param
tension- The tension of the curve, [-1..1] from round to tight.
param
continuity- The continuity of the curve, [-1..1] from box corners to inverted corners.
param
bias- The bias of the curve, [-1..1] from pre-shoot to post-shoot.
returns
A function which gives the value on the 2D Kochanek–Bartels curve at t
Function
(pos: Vec2, opt?: BoomOpt): GameObj Add an explosion effect.
param
pos- The position of the explosion.
param
opt- The options for the explosion.
onMousePress(() => {
addKaboom(mousePos());
});
returns
The explosion object.
since
v2000.0
group
Misc
Type
: ReturnType<typeof initGfx> Class
: static (ctx: GfxCtx, img: ImageSource, opt?: TextureOpt)
=> Texture (img: ImageSource, x?: number, y?: number)
=> void ()
=> void Frees up texture memory. Call this once the texture is no longer being used to avoid memory leaks.
Type
: {}[] Class
: (primitive: GLenum, verts: number[], indices: number[], shader: Shader, tex?: Texture | null, uniform?: Uniform)
=> void Class
: (primitive?: GLenum)
=> void Function
:
{ : (action: () => unknown) => void : (item: WebGLTexture) => void : (item: WebGLBuffer) => void : (item: WebGLBuffer) => void : (item: WebGLFramebuffer) => void : (item: WebGLRenderbuffer) => void : (item: WebGLProgram) => void : (fmt: VertexFormat) => void } Type
: [number, number, number] Type
: [number, number, number, number] Type
: [Color] | [Color, number] | RGBValue | RGBAValue | [string] | [number[]] | [] Class
: (e1: number, e2: number)
=> number[][] static (radians: number)
=> Mat2 static (x: number, y: number)
=> Mat2 Type
: "jump-start" | "jump-end" | "jump-none" | "jump-both" Type
: {} Type
: RenderProps & { ?: number The amount of line segments to draw.
?: number The width of the line.
} Type
: DrawCurveOpt & { : Vec2 The the first control point.
: Vec2 The the second control point.
} Type
: Omit<RenderProps, "angle"> & { : number Radius of the circle.
?: number Starting angle.
?: boolean If fill the shape with color (set this to false if you only want an outline).
?: [Color, Color] Use gradient instead of solid color.
?: number Multiplier for circle vertices resolution (default 1)
?: Anchor | Vec2 The anchor point, or the pivot point. Default to "topleft".
} How the circle should look like.
Interface
: Type
: GfxFont Interface
: Class
: Type
: (idx: number, ch: string) => CharTransform A function that returns a character transform config. Useful if you're generating dynamic styles.
Type
: {} Formatted text with info on how and where to render each character.
Interface
: One formated character.
Type
: Omit<RenderProps, "angle" | "scale"> & { : Vec2 Starting point of the line.
: Vec2 Ending point of the line.
?: number The width, or thickness of the line,
} How the line should look like.
Type
: "none" | "round" | "bevel" | "miter" Type
: "butt" | "round" | "square" Type
: Omit<RenderProps, "angle" | "scale"> & { : Vec2[] The points that should be connected with a line.
?: number The width, or thickness of the lines,
?: number | number[] The radius of each corner.
?: LineJoin Line join style (default "none").
?: LineCap Line cap style (default "none").
?: number Maximum miter length, anything longer becomes bevel.
} How the lines should look like.
Type
: RenderProps & { : number Width of the rectangle.
: number Height of the rectangle.
?: [Color, Color] Use gradient instead of solid color.
?: boolean If the gradient should be horizontal.
?: boolean If fill the shape with color (set this to false if you only want an outline).
?: number | number[] The radius of each corner.
?: Anchor | Vec2 The anchor point, or the pivot point. Default to "topleft".
} How the rectangle should look like.
Interface
: (node: number, neighbor: number): number (node: number, goal: number): number (from: number, to: number): number[] (from: Vec2, to: Vec2, opt: any): Vec2[] Class
: A grid is a graph consisting of connected grid cells
(tile: number)
=> number[] (a: number, b: number)
=> number (a: number, b: number)
=> number (start: number, goal: number)
=> number[] (start: Vec2, goal: Vec2)
=> Vec2[] Class
: (x: number, y: number)
=> number Class
: Type
: RenderProps & { : string | SpriteData | Asset<SpriteData> The sprite name in the asset manager, or the raw sprite data.
?: number If the sprite is loaded with multiple frames, or sliced, use the frame option to specify which frame to draw.
?: number Width of sprite. If height
is not specified it'll stretch with aspect ratio. If tiled
is set to true it'll tiled to the specified width horizontally.
?: number Height of sprite. If width
is not specified it'll stretch with aspect ratio. If tiled
is set to true it'll tiled to the specified width vertically.
?: boolean When set to true, width
and height
will not scale the sprite but instead render multiple tiled copies of them until the specified width and height. Useful for background texture pattern etc.
?: boolean If flip the texture horizontally.
?: boolean If flip the texture vertically.
?: Quad The sub-area to render from the texture, by default it'll render the whole quad(0, 0, 1, 1)
?: Anchor | Vec2 The anchor point, or the pivot point. Default to "topleft".
} How the sprite should look like.
Type
: RenderProps & { : Vec2 First point of triangle.
: Vec2 Second point of triangle.
: Vec2 Third point of triangle.
?: boolean If fill the shape with color (set this to false if you only want an outline).
?: number The radius of each corner.
} How the triangle should look like.
Type
: Shader Type
: ReturnType<typeof initAppGfx> Class
: (img: ImageSource)
=> [Texture, Quad, number] (img: ImageSource)
=> [Texture, Quad, number] Type
: number | { ?: number The starting frame.
?: boolean If this anim should be played in loop.
?: boolean When looping should it move back instead of go to start frame again.
?: number This anim's speed in frames per second.
?: number[] List of frames for the animation.
If this property exists, **from, to, and pingpong will be ignored**.
} Frame-based animation configuration.
Type
: Record<string, SpriteAnim> A dict of name <-> animation.
Interface
: Sprite loading configuration.
?: number If the defined area contains multiple sprites, how many frames are in the area horizontally.
?: number If the defined area contains multiple sprites, how many frames are in the area vertically.
?: NineSlice 9 slice sprite for proportional scaling.
?: Quad[] Individual frames.
?: SpriteAnims Animation configuration.
?: boolean If the sprite is a single image.
Type
: { : number The width of the 9-slice's left column.
: number The width of the 9-slice's right column.
: number The height of the 9-slice's top row.
: number The height of the 9-slice's bottom row.
} Type
: string | ImageSource Class
: (name: string | null, loader: Promise<D>)
=> Asset<D> (name: string | null, data: D)
=> Asset<D> (handle: string)
=> Asset<D> | undefined ()
=> [string, Asset<D>][] Type
: ReturnType<typeof initAssets> Type
: { : { : Array<{ : "forward" | "reverse" | "pingpong" }> } } Interface
: Type
: Record<string, SpriteAtlasEntry> Type
: LoadSpriteOpt & { : number X position of the top left corner.
: number Y position of the top left corner.
: number Sprite area width.
: number Sprite area height.
} A sprite in a sprite atlas.
Type
: ReturnType<typeof initAudio> Class
: Class
: : (a: T, b: T) => boolean (item: T)
=> void Insert an item into the binary heap
()
=> T | null Remove the smallest item from the binary heap in case of a min heap
or the greatest item from the binary heap in case of a max heap
()
=> void Remove all items
(index1: number, index2: number)
=> void get (): number Returns the amount of items
Interface
: Audio play configurations.
?: boolean If audio should start out paused.
?: boolean If audio should be played again from start when its ended.
?: number Volume of audio. 1.0 means full volume, 0.5 means half volume.
?: number Playback speed. 1.0 means normal playback speed, 2.0 means twice as fast.
?: number Detune the sound. Every 100 means a semitone.
// play a random note in the octave
play("noteC", {
detune: randi(0, 12) * 100,
})
?: number The start time, in seconds.
?: number The stereo pan of the sound.
-1.0 means fully from the left channel, 0.0 means centered, 1.0 means fully right.
Defaults to 0.0.
Interface
: (time?: number): void Start playing audio.
(time: number): void Seek time.
: boolean If the sound is paused.
: number Playback speed of the sound. 1.0 means normal playback speed, 2.0 means twice as fast.
: number Detune the sound. Every 100 means a semitone.
// tune down a semitone
music.detune = -100
// tune up an octave
music.detune = 1200
: number Volume of the sound. 1.0 means full volume, 0.5 means half volume.
?: number The stereo pan of the sound.
-1.0 means fully from the left channel, 0.0 means centered, 1.0 means fully right.
Defaults to 0.0.
: boolean If the audio should start again when it ends.
(): number The current playing time (not accurate if speed is changed).
(): number The total duration.
(action: () => void): KEventController Register an event that runs when audio ends.
(action: () => void): KEventController Type
: {} Options for the particles's component
Interface
: (origin: Vec2, target: Vec2, navigationOpt: any): Vec2[] | undefined Interface
: Interface
: (target: Vec2): Vec2[] | undefined Interface
: Interface
: (cb: (objects: GameObj[]) => void): KEventController Attaches an event handler which is called when using "stop" and the end of the path is reached.
param
cbThe event handler called when the patrol finishes.
Type
: "loop" | "ping-pong" | "stop" Interface
: Type
: () => GameObj<any>[] Type
: SentryCandidatesCb | QueryOpt Type
: "forward" | "reverse" | "ping-pong" Type
: "none" | "linear" | "slerp" | "spline" Interface
: : number Duration of the animation in seconds
?: number Loops, Default is undefined aka infinite
?: TimeDirection Behavior when reaching the end of the animation. Default is forward.
?: EaseFunc Easing function. Default is linear time.
?: Interpolation Interpolation function. Default is linear interpolation.
?: number[] Timestamps in percent for the given keys, if omitted, keys are equally spaced.
?: EaseFunc[] Easings for the given keys, if omitted, easing is used.
Interface
: ?: boolean Changes the angle so it follows the motion, requires the rotate component
?: boolean The animation is added to the base values of pos, angle, scale and opacity instead of replacing them
Interface
: Interface
: (name: string, keys: T[], opts: AnimateOpt): void Animates a property on this object.
param
nameName of the property to animate.
param
keysKeys determining the value at a certain point in time.
param
optsOptions.
(name: string): void Removes the animation from the given property.
param
nameName of the property to remove the animation from.
(): void Removes the animations from all properties
(cb: () => void): KEventController Attaches an event handler which is called when all the animation channels have finished.
param
cbThe event handler called when the animation finishes.
(cb: (name: string) => void): KEventController Attaches an event handler which is called when an animation channels has finished.
param
cbThe event handler called when an animation channel finishes.
: BaseValues Base values for relative animation
: { (time: number): void Move the animation to a specific point in time
: number Returns the duration of the animation
} (): Record<string, AnimationChannel> (): {} Serializes the options of this object to plain Javascript types
Type
: number[] | number[][] Type
: {} Type
: {} & AnimationOptions Type
: {} Interface
: Type
: {} Interface
: Type
: "constant" | "inverseLinear" | "inverseSquared" Type
: {} Interface
: Type
: {} Interface
: Type
: {} Interface
: Type
: {} Interface
: (body: GameObj<BodyComp>, submergedArea: Polygon): void (body: GameObj<BodyComp>, submergedArea: Polygon): void Type
: GameObjEventMap & {} Type
: keyof GameObjEventMap Type
: { : [KGamepadButton, KGamepad] : [KGamepadButton, KGamepad] : [KGamepadButton, KGamepad] : [string, Vec2, KGamepad] } App events with their arguments
Type
: T extends [
Parsing error with InferType
, ...
Parsing error with InferType
] ? E : never Type
: string The name of a scene.
Type
: (args: any) => void Type
: ReturnType<typeof initGame> Type
: { : ReturnType<typeof initAssets> : HTMLCanvasElement | null : CanvasRenderingContext2D | null } Sensitive KAPLAY data
Type
: string Type
: (U extends any ? (k: U) => void : never ) extends (k:
Parsing error with InferType
) => void ? I : never Type
: T extends any ? Pick<T, {
[K in
keyof T]:
T[K] extends undefined ? never : K } [keyof T]> : never Type
: T extends
Parsing error with InferType
? {
[K in
keyof U]:
U[K] } : never Type
: Expand<UnionToIntersection<Defined<T>>> Type
: MergeObj<ReturnType<T[number]>> Type
: Array<T | KAPLAYPlugin<any>> Type
: { : Record<string, KGamepadButton> : Partial<Record<GamepadStick, {}>> } A gamepad definition.
Type
: { : number The order of the gamepad in the gamepad list.
(b: KGamepadButton): boolean If certain button is pressed.
(b: KGamepadButton): boolean If certain button is held down.
(b: KGamepadButton): boolean If certain button is released.
(stick: GamepadStick): Vec2 Get the value of a stick.
} A KAPLAY gamepad
Type
: Record<Tag, string | null> Inspect info for a game object.
Interface
: Sprite animation configuration when playing.
?: boolean If this anim should be played in loop.
?: boolean When looping should it move back instead of go to start frame again.
?: number This anim's speed in frames per second.
?: () => void Runs when this animation ends.
Type
: string Interface
: ?: number The size to load the font in (default 64).
Type
: {} Type
: Exclude<TexImageSource, VideoFrame> Type
: { (action: () => void): void } Interface
: Type
: "nearest" | "linear" Texture scaling filter. "nearest" is mainly for sharp pixelated scaling, "linear" means linear interpolation.
Type
: "repeat" | "clampToEdge" Interface
: Common render properties.
?: string | ShaderData | Asset<ShaderData> | null Type
: RenderProps & {} Type
: RenderProps & { : number Width of the UV quad.
: number Height of the UV quad.
?: boolean If flip the texture horizontally.
?: boolean If flip the texture vertically.
?: Texture The texture to sample for this quad.
?: Quad The texture sampling area.
?: Anchor | Vec2 The anchor point, or the pivot point. Default to "topleft".
} Type
: RenderProps & { : number The horizontal radius.
: number The vertical radius.
?: number Starting angle.
?: boolean If fill the shape with color (set this to false if you only want an outline).
?: [Color, Color] Use gradient instead of solid color.
?: number Multiplier for circle vertices resolution (default 1)
?: Anchor | Vec2 The anchor point, or the pivot point. Default to "topleft".
} How the ellipse should look like.
Type
: RenderProps & { : Vec2[] The points that make up the polygon
?: boolean If fill the shape with color (set this to false if you only want an outline).
?: number[] Manual triangulation.
?: Vec2 The center point of transformation in relation to the position.
?: number | number[] The radius of each corner.
?: Color[] The color of each vertex.
?: Vec2[] The uv of each vertex.
?: Texture The texture if uv are supplied.
?: boolean Triangulate concave polygons.
} How the polygon should look like.
Interface
: ?: number The width, or thickness of the line.
?: Color The color of the line.
?: number Opacity (overrides fill opacity).
?: number Miter limit. If the length of the miter divided by the line width exceeds this limit, the style is converted to a bevel.
Type
: "intersect" | "subtract" Enum
:
Interface
: : number The current index relative to the start of the
associated frames
array for this animation.
This may be greater than the number of frames
in the sprite.
Class
: Class
: : ButtonState<KGamepadButton> : Map<GamepadStick, Vec2> Class
: Type
: ReturnType<typeof initApp> Type
: ReturnType<typeof initAppState> Function
:
(gopt: KAPLAYOpt, ggl: GfxCtx) => { : { : (action: () => unknown) => void : (item: WebGLTexture) => void : (item: WebGLBuffer) => void : (item: WebGLBuffer) => void : (item: WebGLFramebuffer) => void : (item: WebGLRenderbuffer) => void : (item: WebGLProgram) => void : (fmt: VertexFormat) => void } : Uniform | ( () => Uniform) | null } Function
:
(ggl: GfxCtx, spriteAtlasPadding: number) => { : AssetBucket<SpriteData> } Function
:
() => {} Function
:
() => { : KEventHandler<GameObjEvents> : Record<SceneName, SceneDef> } Function
:
(opt: { ?: Record<string, GamepadDef> }) => { : Map<MouseButton, string[]> : Map<KGamepadButton, string[]> : ButtonState<MouseButton> : Map<number, GamepadState> : "mouse" | "keyboard" | "gamepad" | null : KEventHandler<AppEventMap> } Function
:
(opt: { ?: Record<string, GamepadDef> }) => { : { : Map<MouseButton, string[]> : Map<KGamepadButton, string[]> : ButtonState<MouseButton> : Map<number, GamepadState> : "mouse" | "keyboard" | "gamepad" | null : KEventHandler<AppEventMap> } : (fixedUpdate: () => void, update: (processInput: () => void, resetInput: () => void) => void) => void : (k?: Key | Key[]) => boolean : (k?: Key | Key[]) => boolean : (k?: Key | Key[]) => boolean : (k?: Key | Key[]) => boolean : (m?: MouseButton) => boolean : (m?: MouseButton) => boolean : (m?: MouseButton) => boolean : (btn?: KGamepadButton | KGamepadButton[]) => boolean : (btn?: KGamepadButton | KGamepadButton[]) => boolean : (btn?: KGamepadButton | KGamepadButton[]) => boolean : (stick: GamepadStick) => Vec2 : (btn?: string | string[]) => boolean : (btn?: string | string[]) => boolean : (btn?: string | string[]) => boolean : (btn: string, binding: ButtonBinding) => void : (btn: string) => ButtonBinding : (action: () => void) => KEventController : ( (action: (key: Key) => void) => KEventController) & ( (key: Key | Key[], action: (key: Key) => void) => KEventController) : ( (action: (key: Key) => void) => KEventController) & ( (key: Key | Key[], action: (key: Key) => void) => KEventController) : ( (action: (key: Key) => void) => KEventController) & ( (key: Key | Key[], action: (key: Key) => void) => KEventController) : ( (action: (key: Key) => void) => KEventController) & ( (key: Key | Key[], action: (key: Key) => void) => KEventController) : ( (action: (m: MouseButton) => void) => KEventController) & ( (mouse: MouseButton | MouseButton[], action: (m: MouseButton) => void) => KEventController) : ( (action: (m: MouseButton) => void) => KEventController) & ( (mouse: MouseButton | MouseButton[], action: (m: MouseButton) => void) => KEventController) : ( (action: (m: MouseButton) => void) => KEventController) & ( (mouse: MouseButton | MouseButton[], action: (m: MouseButton) => void) => KEventController) : (f: (pos: Vec2, dpos: Vec2) => void) => KEventController : (action: (ch: string) => void) => KEventController : (f: (pos: Vec2, t: Touch) => void) => KEventController : (f: (pos: Vec2, t: Touch) => void) => KEventController : (f: (pos: Vec2, t: Touch) => void) => KEventController : (action: (delta: Vec2) => void) => KEventController : (action: () => void) => KEventController : (action: () => void) => KEventController : ( (action: (btn: KGamepadButton, gamepad: KGamepad) => void) => KEventController) & ( (btn: KGamepadButton, action: (btn: KGamepadButton, gamepad: KGamepad) => void) => KEventController) : ( (action: (btn: KGamepadButton, gamepad: KGamepad) => void) => KEventController) & ( (btn: KGamepadButton | KGamepadButton[], action: (btn: KGamepadButton, gamepad: KGamepad) => void) => KEventController) : ( (action: (btn: KGamepadButton, gamepad: KGamepad) => void) => KEventController) & ( (btn: KGamepadButton | KGamepadButton[], action: (btn: KGamepadButton, gamepad: KGamepad) => void) => KEventController) : (stick: GamepadStick, action: (value: Vec2, gp: KGamepad) => void) => KEventController : (action: (gamepad: KGamepad) => void) => void : (action: (gamepad: KGamepad) => void) => void : ( (action: (btn: string) => void) => KEventController) & ( (btn: string | string, action: (btn: string) => void) => KEventController) : ( (action: (btn: string) => void) => KEventController) & ( (btn: string | string, action: (btn: string) => void) => KEventController) : ( (action: (btn: string) => void) => KEventController) & ( (btn: string | string, action: (btn: string) => void) => KEventController) : () => ButtonBindingDevice | null : KEventHandler<AppEventMap> }