the x coordinates of the trigger area
the y coordinates of the trigger area
trigger settings
Optionalcolor?: anyTransition color (also accepts legacy fade property)
Optionalcontainer?: anyTarget container. See level.load
Optionalduration?: numberTransition duration (in ms)
Optionalevent?: stringthe type of event to trigger (only "level" supported for now)
Optionalflatten?: booleanFlatten all objects into the target container. See level.load
Optionalheight?: numberheight of the trigger area
OptionalonLoaded?: FunctionLevel loaded callback. See level.load
OptionalsetViewportBounds?: booleanResize the viewport to match the level. See level.load
Optionalshape?: anyMask shape for "mask" transition type (e.g. an Ellipse for iris, a Polygon for diamond/star)
Optionalshapes?: Rect[] | Polygon[] | Line[] | Ellipse[]collision shape(s) that will trigger the event
Optionalto?: stringlevel to load if level trigger
Optionaltransition?: stringTransition type: "fade" for a color fade, "mask" for a shape-based mask transition
Optionalwidth?: numberwidth of the trigger area
// fade transition (default)
world.addChild(new Trigger(x, y, {
shapes: [new Rect(0, 0, 100, 100)],
color: "#000",
duration: 250,
to: "mymap2",
}));
Define the renderable opacity
Set to zero if you do not wish an object to be drawn
Whether the renderable object will always update, even when outside of the viewport
a reference to the parent object that contains this renderable
The anchor point is used for attachment behavior, and/or when applying transformations.
The coordinate system places the origin at the top left corner of the frame (0, 0) and (1, 1) means the bottom-right corner

a Renderable's anchor point defaults to (0.5,0.5), which corresponds to the center position.
Note: Object created through Tiled will have their anchorPoint set to (0, 0) to match Tiled Level editor implementation.
To specify a value through Tiled, use a json expression like json:{"x":0.5,"y":0.5}, or (since 19.9) a plain string preset such as bottom.
At construction time, settings.anchorPoint also accepts the named presets
"center", "top", "bottom", "left", "right", "top-left", "top-right",
"bottom-left", "bottom-right" on every renderable that consumes it
(Sprite, Entity, Collectable, ImageLayer, Text, BitmapText, Sprite3d and subclasses).
Whether Renderable#preDraw applies the Renderable#anchorPoint offset to the renderer transform.
When true (the default), the renderable is shifted by
-anchorPoint × (width, height) so its anchor — not its top-left
corner — aligns with its position. Correct for sprites and other 2D
renderables.
Set to false for a renderable that emits its own final world
coordinates and takes its origin from geometry rather than a bounds
box — e.g. a Mesh on the Camera3d world-space path (a 3D
mesh is positioned by its transform and has no anchor). The WebGL mesh
batcher reuses this same renderer transform as its view matrix,
so applying the normalized anchor there would shift every mesh by
half its OWN bounds box; because scene meshes size that box per node,
props and the platforms they rest on would drift apart and overlap.
When enabled, an object container will automatically apply any defined transformation before calling the child draw method.
// enable "automatic" transformation when the object is activated
onActivateEvent: function () {
// reset the transformation matrix
this.currentTransform.identity();
// ensure the anchor point is the renderable center
this.anchorPoint.set(0.5, 0.5);
// enable auto transform
this.autoTransform = true;
....
}
the blend mode to be applied to this renderable — any of the modes listed on CanvasRenderer#setBlendMode, honoured identically by every renderer
the renderable physics body — the handle returned by the
active PhysicsAdapter's addBody (or constructed
imperatively via new Body(...)). Typed as the portable
PhysicsBody interface; cast to the adapter-specific
concrete type (MatterAdapter.Body, BuiltinAdapter.Body, or
the legacy Body class) to reach native fields.
// define a new Player Class
class PlayerEntity extends me.Sprite {
// constructor
constructor(x, y, settings) {
// call the parent constructor
super(x, y , settings);
// define a basic walking animation
this.addAnimation("walk", [...]);
// define a standing animation (using the first frame)
this.addAnimation("stand", [...]);
// set the standing animation as default
this.setCurrentAnimation("stand");
// add a physic body
this.body = new me.Body(this);
// add a default collision shape
this.body.addShape(new me.Rect(0, 0, this.width, this.height));
// configure max speed, friction, and initial force to be applied
this.body.setMaxVelocity(3, 15);
this.body.setFriction(0.4, 0);
this.body.force.set(3, 0);
this.isKinematic = false;
// set the display to follow our position on both axis
app.viewport.follow(this, app.viewport.AXIS.BOTH);
}
...
}
Declarative body definition consumed by the active
PhysicsAdapter when this renderable is added to a
container. Adapter API only — leave undefined if you
build a body imperatively via this.body = new Body(...).
When set, the parent container forwards it to
world.adapter.addBody(this, this.bodyDef), which constructs
the underlying physics body (matter, builtin SAT, …) and
assigns the engine-portable wrapper to this.body. This is
the engine-portable path: the same bodyDef produces an
equivalent body under any adapter.
Typical fields: type ("static"/"dynamic"/"kinematic"),
shapes, collisionType, collisionMask, restitution,
frictionAir, density, gravityScale, isSensor,
maxVelocity, fixedRotation. See BodyDefinition.
the renderable transformation matrix (4x4).
For standard 2D use, only the 2D components are used (rotate around Z, scale X/Y, translate X/Y).
For 3D use (e.g. Mesh), the full 4x4 matrix supports rotation around any axis,
3D translation, and perspective projection.
Use the rotate(), scale(), and translate() methods rather than modifying this directly.
The edges here are the direction of the nth edge of the polygon, relative to
the nth point. If you want to draw a given edge from the edge value, you must
first translate to the position of the starting point.
If true, this renderable will be rendered using screen coordinates, as opposed to world coordinates. Use this, for example, to define UI elements.
(G)ame (U)nique (Id)entifier"
a GUID will be allocated for any renderable object added
to an object container (including the app.world container)
a list of indices for all vertices composing this polygon
when true the renderable will be redrawn during the next update cycle
If true then physic collision and input events will not impact this renderable
make the renderable object persistent over level changes
A mask limits rendering elements to the shape and position of the given mask object. So, if the renderable is larger than the mask, only the intersecting part of the renderable will be visible.
The name of the renderable
an event handler that is called when the renderable leave or enter a camera viewport
Array of points defining the Polygon
Note: If you manually change points, you must call recalcafterwards so that the changes get applied correctly.
origin point of the Polygon
the list of post-processing shader effects applied to this renderable (GPU backends — WebGL and WebGPU). Effects are applied in order. Use addPostEffect, getPostEffect, and removePostEffect to manage effects, or assign directly. On the Canvas renderer effects stay inert (the scene keeps rendering un-effected).
The shape type (used internally).
Whether to update this object when the game is paused.
If true, this floating renderable will be rendered by all cameras (e.g. background image layers). If false (default), floating elements are only rendered by the default camera (e.g. UI/HUD elements). Only applies to floating renderables in multi-camera setups.
bottom coordinate of the Rectangle
absolute center of this rectangle on the horizontal axis
absolute center of this rectangle on the vertical axis
the depth of this renderable on the z axis
height of the Rectangle
The left coordinate of the Rectangle.
returns the parent application (or game) to which this renderable is attached to
the parent application or undefined if not attached to any container/app
right coordinate of the Rectangle
since 19.2.0 — use addPostEffect / getPostEffect / removePostEffect instead
top coordinate of the Rectangle
width of the Rectangle
return the angle to the specified target
angle in radians
center the rectangle position around the given coordinates
the x coordinate around which to center this rectangle
the y coordinate around which to center this rectangle
this rectangle
Returns true if the polygon contains the given point.
(Note: it is highly recommended to first do a hit test on the corresponding
bounding rect, as the function can be highly consuming with complex shapes)
x coordinate or a vector point to check
y coordinate
True if the polygon contain the point, otherwise false
Returns true if the polygon contains the given point.
(Note: it is highly recommended to first do a hit test on the corresponding
bounding rect, as the function can be highly consuming with complex shapes)
True if the polygon contain the point, otherwise false
Returns true if the rectangle contains the given rectangle
rectangle to test
True if the rectangle contain the given rectangle, otherwise false
return the distance to the specified target
distance
Draw this renderable (automatically called by melonJS).
All draw operations for renderable are made respectively
to the position or transforms set or applied by the preDraw method.
The main draw loop will first call preDraw() to prepare the context for drawing the renderable,
then draw() to draw the renderable, and finally postDraw() to clear the context.
If you override this method, be mindful about the drawing logic: preDraw
applies this renderable's transforms, tint and anchor offset, but does
not translate to this.pos. The renderer arrives positioned at the
parent container's origin, so draw relative to this.pos — drawing at
(0, 0) places the shape at the container's origin instead.
a renderer instance
Optionalviewport: any
the viewport to (re)draw
Check if this rectangle is identical to the specified one.
Other rectangle.
true if equals
flip the renderable on the horizontal axis (around the center of the renderable)
Optionalflip: boolean = true
true to flip this renderable.
Reference to this object for method chaining
flip the renderable on the vertical axis (around the center of the renderable)
Optionalflip: boolean = true
true to flip this renderable.
Reference to this object for method chaining
Where this renderable IS in the game world — its own pos plus every
ancestor's, as a Vector3d so the z component is summed across
the chain too (important for Camera3d's frustum culling, which
previously read obj.depth — local pos.z — and mis-culled children
nested under a container with its own non-zero depth).
Reach for this for anything positional: culling, distance checks, hit tests, placing one renderable relative to another. It is cheap, and it is what the engine's own culling uses.
Reach for Renderable#getWorldTransform instead when a position is not enough — when rotation, scale or flip along the ancestor chain matters, or when you need to map an arbitrary point rather than just the origin. This method sums translations only, so under a rotated or scaled ancestor it reports where the renderable's pivot is and nothing about how its content is oriented.
Note the two also frame the question differently. This one is "where am
I"; getWorldTransform() is "what space is my content drawn in". For a
Container those coincide, because a container offsets its
children by its own position. For a leaf they differ by exactly that
position, which a leaf applies inside its own draw().
The returned vector is pooled and reused — copy it if you need to hold onto the value across another call.
this renderable's absolute position
returns the bounding box for this renderable
bounding box Rectangle object
returns a list of indices for all triangles defined in this polygon
an array of vertex indices for all triangles forming this polygon.
ProtectedgetProtected
The transform this renderable interposes between its ancestor's frame and the frame its own content is drawn in — a mirror of what Renderable#preDraw applies to the renderer, as a matrix.
This is not Renderable#currentTransform. A renderable's
placement is split across two members: pos holds where it is, and
currentTransform holds only what rotate() / scale() / translate()
accumulate — it never contains the position. preDraw composes the two
by conjugation, so a rotation pivots about the renderable's position
rather than the origin. On a renderable you never rotated,
currentTransform is therefore the identity and says nothing about
where its content lands, while this method returns the translation that
actually places it.
Container extends this with the offset it applies to its
children, which a leaf renderable does not have: a leaf's own draw()
places itself from pos.
matrix to write into; nothing is stored on the renderable itself, so callers own the lifetime
out, for chaining
get the renderable alpha channel value
current opacity value between 0 and 1
Get post-processing shader effects. When called with a class, returns the first effect matching the given class. When called without arguments, returns the full effects array.
OptionaleffectClass: Function
the effect class to search for
the matching effect, the effects array, or undefined
The space this renderable's content is drawn IN, as a matrix — the full form of Renderable#getAbsolutePosition, which sums positions up the ancestor chain and therefore cannot represent the rotation, scale or flip accumulated along the way.
Reach for getAbsolutePosition() instead for ordinary positional
work — culling, distance checks, hit tests. It is cheaper and it is what
the engine culls with. Use this when a position is not enough:
inv(A) · B converts
between two frames, which is how ParticleEmitter.referenceSpace
measures particles against a container that is not their parent)The two also frame the question differently, and it shows on a leaf.
getAbsolutePosition() is "where am I"; this is "what space is my
content drawn in". For a Container those coincide, because a
container offsets its children by its own position. For a leaf they
differ by exactly that position, which a leaf applies inside its own
draw(). So with no rotation, scale or flip anywhere, a container's
translation column equals its getAbsolutePosition() while a leaf's
equals its PARENT's.
The walk stops at a floating ancestor, because a floating renderable
draws in screen space: Container#draw resets the transform
outright for those, so the chain genuinely ends there rather than
continuing to the root.
The camera needs no special handling — Camera2d folds its view
transform into the root container's currentTransform, so it is picked
up like any other level.
matrix to write into; nothing is stored on the renderable itself, so callers own the lifetime
out, for chaining
Returns true if the vertices composing this polygon form a convex shape (vertices must be in clockwise order).
true if the vertices are convex, false if not, null if not computable
Determines whether all coordinates of this rectangle are finite numbers.
false if all coordinates are positive or negative Infinity or NaN; otherwise, true.
Rotate this renderable towards the given target.
the renderable or position to look at
Reference to this object for method chaining
Lifecycle hook fired by Container when this renderable is
added to a container that is part of the active scene graph.
Override to wire up input handlers, register external listeners,
or grab adapter references — this.parentApp is guaranteed to be
available here. Pair with Renderable#onDeactivateEvent.
the rest parameter exists for subclass-signature
compatibility; Container.addChild currently forwards nothing
Legacy collision callback — fires every frame this renderable body is overlapping another body. Kept for backward compatibility with code written against pre-19.5 melonJS; semantics are unchanged from the 19.4 contract.
NOTE — onCollision is NOT equivalent to Renderable.onCollisionActive.
The two handlers exist side by side and have intentionally different
contracts:
onCollision (legacy) |
onCollisionActive (modern) |
|
|---|---|---|
| Cadence for dynamic-dynamic pairs | 2× per frame per side | 1× per frame per side |
response.a semantics |
Fixed per pair (first body in detector call) | Always the receiver (response.a === this) |
response.b semantics |
Fixed per pair | Always the partner (response.b === other) |
response.normal / response.depth |
✗ | ✓ — normal.y < -0.7 = "push me up" |
return false to skip push-out |
✓ (honored by SAT) | ✗ — use bodyDef.isSensor or setSensor instead |
If you're writing new code, prefer onCollisionActive. Keep
onCollision only when its every-frame, return-false, fixed-a/b
semantics are what you want.
the SAT response object; the legacy handler receives this, not the adapter's CollisionResponse, which is why normal and depth are absent from the table above
the other renderable touching this one (a reference to response.a or response.b)
true if the object should respond to the collision (its position and velocity will be corrected); the return value is only honored by the builtin SAT adapter.
Fire the trigger when an entity first enters the trigger zone.
Using onCollisionStart rather than onCollision so the event
runs exactly once per entry — under the legacy alias this would
fire every frame the entity was inside the trigger.
Lifecycle hook fired by Container when this renderable is removed from its container or its container is itself removed. Override to release input handlers, unsubscribe from events, or drop adapter references. Pair with Renderable#onActivateEvent.
the rest parameter exists for subclass-signature
compatibility; Container.removeChildNow currently forwards nothing
OnDestroy Notification function
Called by engine before deleting the object. Receives whatever
destroy(...args) was called with — the production path
(Container.removeChildNow) passes nothing. Stage has its own
onDestroyEvent, which does forward the active Application.
forwarded by destroy(...args); normally empty
check if this rectangle is intersecting with the specified one
Other rectangle.
true if overlaps
restore the rendering context after drawing (automatically called by melonJS).
a renderer object
Prepare the rendering context before drawing (automatically called by melonJS). This will apply any defined transforms, anchor point, tint or blend mode and translate the context accordingly to this renderable position.
a renderer object
Computes the calculated collision polygon.
This must be called if the points array, angle, or offset is modified manually.
Reference to this object for method chaining
resize the rectangle
new width of the rectangle
new height of the rectangle
this rectangle
Rotate this renderable by the specified angle (in radians). When called with just an angle, rotates around the Z axis (2D rotation). When called with an angle and a Vector3d axis, rotates around that axis in 3D.
The angle to rotate (in radians)
Optionalv: any
the axis to rotate around (defaults to Z axis for 2D)
Reference to this object for method chaining
scale the renderable around his anchor point. Scaling actually applies changes to the currentTransform member which is used by the renderer to scale the object when rendering. It does not scale the object itself. For example if the renderable is an image, the image.width and image.height properties are unaltered but the currentTransform member will be changed.
a number representing the abscissa of the scaling vector.
Optionaly: number = x
a number representing the ordinate of the scaling vector.
Optionalz: number = 1
a number representing the depth of the scaling vector.
Reference to this object for method chaining
scale the renderable around his anchor point
scaling vector
Reference to this object for method chaining
set the renderable alpha channel value
opacity value between 0.0 and 1.0
set new value to the Polygon
position of the Polygon
position of the Polygon
array of vector or vertices defining the Polygon
this instance for object chaining
Set new dimensions for the rectangle.
The new width of the rectangle.
The new height of the rectangle.
set the vertices defining this Polygon
array of vector or vertices defining the Polygon
this instance for object chaining
apply an isometric projection to this shape
Reference to this object for method chaining
Returns a polygon whose edges are the same as this box.
a new Polygon that represents this rectangle.
multiply the renderable currentTransform with the given matrix
the transformation matrix
Reference to this object for method chaining
Translate the renderable by the specified offset.
x offset
Optionaly: number = 0
y offset
Optionalz: number = 0
z offset
Reference to this object for method chaining
ProtectedtriggerProtected
Trigger this event. Override in subclasses to customize behavior.
update function (automatically called by melonJS).
time since the last update in milliseconds.
true if the renderable is dirty
update the bounding box for this shape.
Optionalabsolute: boolean = true
update the bounds size and position in (world) absolute coordinates
this shape bounding box Rectangle object
Trigger an event when colliding with another object. Supports both fade and mask-based transitions when loading a new level.