Communitygithub.com

melonjs/melonjs-camera-and-drawing

Utilisez cette compétence pour le contrôle de la caméra et le dessin en mode immédiat dans melonJS — suivi d'une cible, limites du viewport, shake et fondu, caméras secondaires et dessin de formes, lignes et dégradés dans un draw() personnalisé. Couvre la conversion des coordonnées monde/écran, le clipping et le masquage, ainsi que le baking avec CanvasRenderTarget. Déclenché sur : Camera2d, viewport, follow, setBounds, shake, fadeIn, fadeOut, worldToLocal, localToWorld, colorMatrix, renderer.fill, renderer.stroke, Rect, Ellipse, Polygon, Line, Gradient, clipRect, mask, CanvasRenderTarget, NoiseTexture2d.

Qu'est-ce que melonjs-camera-and-drawing ?

Cette compétence est conçue pour les développeurs utilisant le moteur de jeu melonJS, leur offrant un contrôle avancé de la caméra et des capacités de dessin en mode immédiat. Elle permet de gérer le suivi d'une cible (follow), de définir les limites du viewport (setBounds), de réaliser des effets de shake (secousse) et de fondu (fadeIn/fadeOut), ainsi que de manipuler des caméras secondaires. Le dessin en mode immédiat est facilité via une méthode draw() personnalisée, supportant les formes géométriques (Rect, Ellipse, Polygon, Line), les dégradés (Gradient), les contours et remplissages (renderer.stroke/fill). La compétence couvre également la conversion entre coordonnées monde et écran (worldToLocal/localToWorld), le clipping et le masquage (clipRect, mask), l'application de matrices de couleur (colorMatrix), et l'utilisation de CanvasRenderTarget pour le baking (pré-rendu), ainsi que NoiseTexture2d pour les textures de bruit. Compatible avec tous les environnements utilisant melonJS (web, mobile), elle est idéale pour les développeurs de jeux, les concepteurs d'UI et les créateurs d'effets visuels souhaitant un contrôle fin de l'affichage et des animations de caméra.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/melonjs/melonJS/tree/master/packages/melonjs/skills/melonjs-camera-and-drawing

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait melonjs-camera-and-drawing ?

Utilisez cette compétence pour le contrôle de la caméra et le dessin en mode immédiat dans melonJS — suivi d'une cible, limites du viewport, shake et fondu, caméras secondaires et dessin de formes, lignes et dégradés dans un draw() personnalisé. Couvre la conversion des coordonnées monde/écran, le clipping et le masquage, ainsi que le baking avec CanvasRenderTarget. Déclenché sur : Camera2d, viewport, follow, setBounds, shake, fadeIn, fadeOut, worldToLocal, localToWorld, colorMatrix, renderer.fill, renderer.stroke, Rect, Ellipse, Polygon, Line, Gradient, clipRect, mask, CanvasRenderTarget, NoiseTexture2d.

Contrôle de la caméra

Camera2d

  • follow(target, axis) : Fait suivre la caméra à la cible spécifiée (ex. le joueur). axis peut être "x", "y" ou "both".
  • setBounds(x, y, w, h) : Définit les limites du monde que la caméra peut parcourir.
  • shake(intensity, duration) : Applique un effet de secousse à la caméra.
  • fadeIn(color, duration) : Effet de fondu entrant (écran noir puis visible).
  • fadeOut(color, duration) : Effet de fondu sortant (visible puis écran noir).
  • worldToLocal(worldX, worldY) : Convertit les coordonnées monde en coordonnées écran (relatives au viewport).
  • localToWorld(screenX, screenY) : Convertit les coordonnées écran en coordonnées monde.

Caméras secondaires

Vous pouvez créer des instances Camera2d supplémentaires pour des vues multiples ou mini-cartes. Chaque caméra possède son propre viewport, ses propres limites et ses propres effets.

Dessin en mode immédiat

Personnalisez la méthode draw() d'un objet affichable pour utiliser les commandes de dessin suivantes :

renderer.stroke(shape, color, lineWidth)

Dessine le contour d'une forme géométrique (Rect, Ellipse, Polygon, Line).

renderer.fill(shape, color)

Remplit une forme géométrique avec une couleur unie.

colorMatrix

Applique une transformation de couleur (teinte, saturation, luminosité, contraste) via une matrice 4x5 avant le rendu.

Formes prises en charge

  • Rect(x, y, w, h) : Rectangle.
  • Ellipse(x, y, radiusX, radiusY) : Ellipse.
  • Polygon(vertices[]) : Polygone défini par une liste de points Vector2d.
  • Line(x1, y1, x2, y2) : Ligne simple.
  • Gradient(shape, colorStops) : Remplissage dégradé (linéaire ou radial selon la forme).

Astuce : Utilisation avec les sprites

Pour dessiner des formes immédiates sur un sprite (ex. un rectangle de hitbox) :

// Dans la méthode draw de l'objet
var rect = new me.Rect(0, 0, 32, 64);
renderer.stroke(rect, "red", 1);
renderer.fill(rect, "rgba(255, 0, 0, 0.2)");

Clipping et masquage

clipRect(x, y, w, h)

Délimite la zone de dessin à un rectangle. Tout dessin en dehors de cette zone est masqué.

context.mask = shape

Définit un masque (shape) pour le rendu. Seuls les pixels à l'intérieur du masque seront visibles. Exemple :

var mask = new me.Ellipse(100, 100, 50, 50);
renderer.mask = mask;
// Dessin ici – seul le contenu dans l'ellipse est visible
renderer.mask = null; // Supprime le masque

Baking avec CanvasRenderTarget

  • CanvasRenderTarget(width, height) : Crée une surface de rendu hors écran. Utile pour pré-rendre (baking) des compositions complexes une fois, puis les afficher comme une texture.
  • clear(color) : Efface le rendu cible avec une couleur.
  • copyTo(context, x, y) : Copie le contenu du rendu cible vers un contexte de dessin.
var rt = new me.CanvasRenderTarget(320, 240);
rt.clear("black");
// Dessiner sur le rendu cible...
rt.copyTo(me.video.renderer, 0, 0);

NoiseTexture2d

  • NoiseTexture2d(size, options) : Génère une texture de bruit (Perlin, simplex ou bruit de valeur) utilisable comme texture procédurale.options peut inclure type, scale, octaves, persistence, lacunarity.
var noiseTex = new me.NoiseTexture2d(256, { type: "perlin", scale: 10 });

Conversion de coordonnées

  • worldToLocal(worldX, worldY) : Convertit les coordonnées monde en coordonnées écran (relatives au viewport de la caméra).
  • localToWorld(screenX, screenY) : Convertit les coordonnées écran (relatives au viewport) en coordonnées monde.

Exemple :

var screenPos = camera.worldToLocal(player.pos.x, player.pos.y);
console.log("Position écran du joueur : " + screenPos.x + ", " + screenPos.y);

Notes importantes

  • Toutes les fonctions ci-dessus font partie de l'API publique de melonJS et sont disponibles dans la version stable actuelle.
  • Pour que le dessin en mode immédiat fonctionne, vous devez personnaliser la méthode draw() d'un objet dérivé de me.Drawable ou d'un me.Renderable.
  • Les effets de shake et de fondu s'appliquent à la caméra courante ; pour les caméras secondaires, appelez ces méthodes sur l'instance de caméra correspondante.

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-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-physics

Use this skill for collision, physics bodies, movement, and spatial queries in melonJS — the built-in SAT world and the planck/matter adapters. Covers bodyDef vs Body, collision types and masks, the collision callback family and their firing rules, raycast/queryAABB/querySphere, and the behaviour differences between adapters. Triggers on: Body, bodyDef, collision, collisionType, collisionMask, onCollision, onCollisionStart, onCollisionActive, raycast, queryAABB, querySphere, PlanckAdapter, MatterAdapter, gravity, velocity, applyForce, isGrounded, SAT.

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.

Skills associés