Communitygithub.com

melonjs/melonjs-physics

Nutze dieses Skill für Kollisionen, physikalische Körper, Bewegung und räumliche Abfragen in melonJS – die integrierte SAT-Welt und die planck/matter-Adapter. Behandelt bodyDef vs. Body, Kollisionstypen und -masken, die Familie der Kollision-Callbacks und ihre Auslöseregeln, raycast/queryAABB/querySphere sowie die Verhaltensunterschiede zwischen den Adaptern.

Was ist melonjs-physics?

Dieses Skill ermöglicht es KI-Agenten, die Physik-Engine von melonJS zu steuern, insbesondere die integrierte SAT-Welt (Separating Axis Theorem) sowie die externen Planck.js- und Matter.js-Adapter. Es deckt alle wesentlichen Konzepte ab: den Unterschied zwischen `bodyDef` (Definition) und `Body` (Instanz), die Konfiguration von Kollisionstypen und -masken, die verschiedenen Kollision-Callbacks wie `onCollision`, `onCollisionStart` und `onCollisionActive` mit ihren genauen Auslöseregeln, sowie räumliche Abfragen wie `raycast`, `queryAABB` und `querySphere`. Zusätzlich werden physikalische Kräfte wie Schwerkraft, Geschwindigkeit und `applyForce` sowie die Zustandsabfrage `isGrounded` behandelt. Das Skill erklärt auch die Verhaltensunterschiede zwischen den Adaptern (SAT, Planck, Matter) und gibt Hinweise darauf, wann welcher Adapter am besten geeignet ist. Es eignet sich für Plattformen wie Claude Code, Cursor und Codex, die auf melonJS basierende Spiele oder interaktive Anwendungen entwickeln. Der Fokus liegt auf praktischen Codebeispielen und klaren Regeln zur korrekten Verwendung der Physik-API.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/melonjs/melonJS/tree/master/packages/melonjs/skills/melonjs-physics

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht melonjs-physics?

Nutze dieses Skill für Kollisionen, physikalische Körper, Bewegung und räumliche Abfragen in melonJS — die integrierte SAT-Welt und die planck/matter-Adapter. Behandelt bodyDef vs. Body, Kollisionstypen und -masken, die Familie der Kollision-Callbacks und ihre Auslöseregeln, raycast/queryAABB/querySphere sowie die Verhaltensunterschiede zwischen den Adaptern. Auslöser: Body, bodyDef, collision, collisionType, collisionMask, onCollision, onCollisionStart, onCollisionActive, raycast, queryAABB, querySphere, PlanckAdapter, MatterAdapter, gravity, velocity, applyForce, isGrounded, SAT.

Übersicht

  • SAT-Welt: Standard-Physik in melonJS, basiert auf dem Separating Axis Theorem. Bietet grundlegende Kollision und einfache Dynamik.
  • PlanckAdapter: Schnittstelle zu Planck.js, einem 2D-Physik-Engine. Bietet erweiterte Funktionen wie Gelenke, Reibung und komplexe Kollisionsmasken.
  • MatterAdapter: Schnittstelle zu Matter.js, einer weiteren beliebten 2D-Physik-Engine. Ähnlich wie Planck, aber mit eigener API und Verhalten.

Wichtige Konzepte

bodyDef vs. Body

  • bodyDef (Definition): Ein Objekt, das die Eigenschaften eines physikalischen Körpers beschreibt (z. B. Position, Form, Typ). Wird verwendet, um einen Körper zu erstellen.
  • Body: Die tatsächliche Instanz des physikalischen Körpers, die nach der Erstellung aus bodyDef existiert. Du kannst auf Body-Eigenschaften wie gravity, velocity oder applyForce zugreifen.

Kollisionstypen und -masken

  • collisionType: Definiert die Art der Kollision (z. B. me.collision.types.NO_OBJECT, me.collision.types.PLAYER_OBJECT).
  • collisionMask: Bestimmt, mit welchen collisionTypes dieser Körper kollidieren soll (Bitmaske).

Kollision-Callbacks

  • onCollision(response): Wird bei jeder Kollision aufgerufen.
  • onCollisionStart(response): Wird beim ersten Kontakt zweier Körper aufgerufen.
  • onCollisionActive(response): Wird während der gesamten Dauer einer Kollision aufgerufen (jeden Frame, solange die Körper sich überlappen).

Auslöseregeln: Die Callbacks werden nur ausgeführt, wenn beide Körper entsprechende Methoden definiert haben. onCollision überschreibt onCollisionStart und onCollisionActive, wenn beide vorhanden sind.

Räumliche Abfragen

  • raycast(start, end, callback, layer?): Führt einen Strahl von start nach end aus und ruft callback für jeden getroffenen Körper auf.
  • queryAABB(rect, callback, layer?): Findet alle Körper, die das angegebene Rechteck (AABB) schneiden.
  • querySphere(center, radius, callback, layer?): Findet alle Körper, die die angegebene Kugel (Kreis in 2D) schneiden.

Physikalische Kräfte

  • gravity: Die Schwerkraft, die auf den Körper wirkt (Vektor).
  • velocity: Die Geschwindigkeit des Körpers (Vektor).
  • applyForce(position, force): Wendet eine Kraft an einer bestimmten Position an.
  • isGrounded(): Prüft, ob der Körper auf dem Boden steht (nur in manchen Adaptern verfügbar).

Verhaltensunterschiede zwischen Adaptern

AdapterEigenschaften
SATEinfach, schnell, keine Gelenke oder Reibung. isGrounded() ist möglicherweise nicht implementiert.
PlanckAdapterVollständige Physik-Engine mit Gelenken, Reibung, Dämpfung. isGrounded() verfügbar.
MatterAdapterÄhnlich wie Planck, aber mit eigener Konfiguration (z. B. matter-Eigenschaft in bodyDef). isGrounded() verfügbar.

Beispiele

Erstellen eines Physik-Körpers

// bodyDef
let bodyDef = {
    x: 100,
    y: 100,
    width: 32,
    height: 32,
    type: me.collision.types.PLAYER_OBJECT,
    collisionMask: me.collision.types.WALL_OBJECT | me.collision.types.ENEMY_OBJECT
};

// Body erstellen (z. B. in einer Entity)
this.body = new me.Body(this, bodyDef);

Kollision-Callback

// In einer Entity
onCollisionStart: function (response) {
    console.log("Kollision gestartet mit:", response.b);
    return false; // Standardmäßig true; false verhindert weitere Kollisionsreaktionen
}

Raycast

let from = new me.Vector2d(0, 0);
let to = new me.Vector2d(100, 100);
me.game.world.raycast(from, to, function (result) {
    console.log("Getroffen:", result.body);
});

queryAABB

let rect = new me.Rect(0, 0, 100, 100);
me.game.world.queryAABB(rect, function (body) {
    console.log("Gefunden:", body);
});

Wichtige Hinweise

  • Stelle sicher, dass der korrekte Adapter (SAT, Planck, Matter) in deiner index.html oder game.js importiert ist.
  • Bei Verwendung von Planck oder Matter musst du die entsprechenden Skripte vor melonJS einbinden.
  • Verwende body.gravity, body.velocity und body.applyForce() nur, nachdem der Körper zur Welt hinzugefügt wurde.
  • isGrounded() funktioniert nur bei Planck und Matter zuverlässig; bei SAT kann es sein, dass du manuell prüfen musst.

Individual skills in this repo

This repo contains 10 individual skills — each has its own dedicated page.

melonjs/melonjs-3d

Use this skill for anything 3D or 2.5D in melonJS — Camera3d, Mesh, InstancedMesh, Sprite3d billboards, Light3d, ground shadows, glTF/GLB scenes, and depth sorting. Covers the Y-down/+Z-forward convention that is the inverse of OpenGL, the cameraClass opt-in, clip planes, and what does not work on the Canvas fallback. Triggers on: Camera3d, Mesh, InstancedMesh, Sprite3d, Light3d, billboard, glTF, glb, 3D, 2.5D, depth, cameraClass, fov, setClipPlanes, setFog, fog, distance fog, height fog, heightFalloff, transparent, transparency, alpha, blendMode, fade, castGroundShadow, lit.

melonjs/melonjs-3d-assets

Use this skill when loading 3D models into melonJS — glTF and GLB scenes, OBJ/MTL models, materials, imported lights, node animation, ground shadows and GPU instancing. Covers level.load options including the async flag, the rightHanded conversion, and exactly what the loader does and does not support. Triggers on: glTF, gltf, glb, OBJ, MTL, 3D model, getGLTF, getOBJ, getMTL, GLTFModel, GLTFScene, level.load glb, rightHanded, lightIntensityScale, castGroundShadow, shadowGroundY, EXT_mesh_gpu_instancing, KHR_lights_punctual, skinning, Blender export, 3D asset.

melonjs/melonjs-camera-and-drawing

Use this skill for camera control and immediate-mode drawing in melonJS — following a target, viewport bounds, shake and fade, secondary cameras, and drawing shapes, lines and gradients inside a custom draw(). Covers world versus screen coordinate conversion, clipping and masking, and baking with CanvasRenderTarget. Triggers on: Camera2d, viewport, follow, setBounds, shake, fadeIn, fadeOut, worldToLocal, localToWorld, colorMatrix, renderer.fill, renderer.stroke, Rect, Ellipse, Polygon, Line, Gradient, clipRect, mask, CanvasRenderTarget, NoiseTexture2d.

melonjs/melonjs-effects-and-shaders

Use this skill for post-processing effects, custom shaders, blend modes and colour grading in melonJS. Covers the built-in ShaderEffect presets, addPostEffect on renderables and cameras, writing a custom dual-language GLSL/WGSL effect, the screen_texture builtins, and why effects silently do nothing on the Canvas fallback. Triggers on: ShaderEffect, addPostEffect, removePostEffect, getPostEffect, VignetteEffect, GlowEffect, BlurEffect, PixelateEffect, ScanlineEffect, shader, GLSL, WGSL, uniform, setUniform, setTexture, setTime, blendMode, colorMatrix, screen_texture, toFrameTexture, post effect, filter.

melonjs/melonjs-loading-assets

Use this skill for loading and managing game assets in melonJS — the resource descriptor format, the full asset type list, preload versus load, retrieving loaded assets, base URLs and cross-origin settings, and the loading screen. Triggers on: loader, loader.preload, loader.load, resources, getImage, getJSON, getTMX, getGLTF, getVideo, getFont, setBaseURL, setOptions, crossOrigin, withCredentials, credentials, cookies, authenticated assets, CORS, asset, preload, LOADER_COMPLETE, loading screen, unload.

melonjs/melonjs-performance

Use this skill when a melonJS game drops frames, allocates heavily, or needs to scale to many objects. Covers object pooling, draw-call batching, atlases, baking with CanvasRenderTarget, instancing, culling and alwaysUpdate, the debug plugin, and where the real costs are. Triggers on: performance, slow, frame rate, fps, lag, pool, pool.register, pool.pull, batching, draw calls, InstancedMesh, culling, alwaysUpdate, inViewport, CanvasRenderTarget, optimise, profiling, debug plugin, memory.

melonjs/melonjs-renderables

Use this skill when subclassing Renderable, writing a custom draw() method, handling pointer or click events on game objects, applying post effects and shaders, or controlling draw order. Covers the pos-relative draw contract, isKinematic and input, addPostEffect vs the deprecated shader property, and z-ordering. Triggers on: Renderable, extends Renderable, draw(, update(, isKinematic, pointerEvent, registerPointerEvent, onClick, addPostEffect, removePostEffect, ShaderEffect, addChild, z-order, anchorPoint, floating.

melonjs/melonjs-renderer-backends

Use this skill when a feature works on one machine and not another, when choosing or pinning a renderer, or when writing code that must degrade gracefully. Covers the WebGPU to WebGL 2 to Canvas fallback ladder, what each backend supports, capability detection, and the subsystems that warn once and then stop working on Canvas. Triggers on: video.AUTO, video.WEBGPU, video.WEBGL, video.CANVAS, renderer.type, supportsDepthBuffer, shaderLanguage, WebGPU, WebGL2, Canvas fallback, context loss, backen

melonjs/melonjs-scenes-and-state

Use this skill for scene structure and game flow in melonJS — Stage subclasses, the state manager, transitions, pausing, the update loop, timers and tweens. Covers onResetEvent versus the constructor, state.set before state.change, the camera and world lifecycle per stage, and pause-aware timing. Triggers on: Stage, state, state.set, state.change, state.transition, state.pause, onResetEvent, onDestroyEvent, onActivateEvent, onDeactivateEvent, PLAY, MENU, LOADING, update loop, GAME_UPDATE, timer, setTimeout, setInterval, Tween, freeze.

melonjs/melonjs-ui-and-text

Use this skill for HUDs, buttons, menus, dialogue panels and on-screen text in melonJS. Covers UIBaseElement/UISpriteElement/UITextButton, Draggable and DropTarget, the floating screen-space container pattern, Text and BitmapText, web font loading, and NineSliceSprite panels. Triggers on: UI, HUD, button, UIBaseElement, UISpriteElement, UITextButton, Draggable, DropTarget, menu, dialogue, Text, BitmapText, font, fontface, wordWrapWidth, NineSliceSprite, score display, floating.

Verwandte Skills