CommunityRédaction et éditiongithub.com

melonjs/melonjs-renderables

Utilisez cette compétence pour sous-classer Renderable, écrire une méthode draw() personnalisée, gérer les événements de pointeur ou de clic sur les objets du jeu, appliquer des effets postérieurs et des shaders, ou contrôler l'ordre de rendu. Couvre le contrat de dessin relatif à la position, isKinematic et l'entrée, addPostEffect par rapport à la propriété shader obsolète, et l'ordre z. Déclencheurs : Renderable, extends Renderable, draw(, update(, isKinematic, pointerEvent, registerPointerEvent, onClick, addPostEffect, removePostEffect, ShaderEffect, addChild, z-order, anchorPoint, floating.

Qu'est-ce que melonjs-renderables ?

Cette compétence fournit des conseils détaillés pour les développeurs utilisant melonJS, un framework de jeu HTML5. Elle se concentre sur la sous-classification de la classe `Renderable`, essentielle pour créer des objets de jeu personnalisés avec leur propre logique de rendu. La compétence explique le contrat de dessin relatif à la position (`pos`), l'utilisation de `isKinematic` pour les objets qui ne sont pas affectés par la physique mais qui interagissent avec les entrées, et la gestion des événements de pointeur comme les clics via `pointerEvent` et `registerPointerEvent`. Elle clarifie également la différence entre `addPostEffect` (moderne) et la propriété `shader` (obsolète) pour appliquer des effets visuels, et détaille le contrôle de l'ordre de rendu avec `z-order`, `addChild`, `anchorPoint` et `floating`. La compétence est conçue pour aider les développeurs à éviter les pièges courants et à implémenter correctement le rendu personnalisé dans melonJS, fonctionnant sur toutes les plateformes supportées par le framework (navigateurs, Electron, etc.).

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

Installed? Explore more Rédaction et édition skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

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-renderables ?

Utilisez cette compétence lorsque vous sous-classez Renderable, écrivez une méthode draw() personnalisée, gérez les événements de pointeur ou de clic sur les objets du jeu, appliquez des effets postérieurs et des shaders, ou contrôlez l'ordre de rendu. Couvre le contrat de dessin relatif à la position, isKinematic et l'entrée, addPostEffect par rapport à la propriété shader obsolète, et l'ordre z. Déclencheurs : Renderable, extends Renderable, draw(, update(, isKinematic, pointerEvent, registerPointerEvent, onClick, addPostEffect, removePostEffect, ShaderEffect, addChild, z-order, anchorPoint, floating.

Contrat de dessin relatif à la position

Lorsque vous sous-classez Renderable et écrasez draw(renderer), votre implémentation doit être relative à this.pos. Le contexte de rendu est déjà décalé par this.pos, donc draw() doit toujours dessiner à partir de (0, 0).

class MonObjet extends me.Renderable {
    constructor(x, y, largeur, hauteur) {
        super(x, y, largeur, hauteur);
    }

    draw(renderer) {
        // Dessine un rectangle à partir de (0,0) – il sera décalé par this.pos
        renderer.setColor("red");
        renderer.fillRect(0, 0, this.width, this.height);
    }
}

isKinematic et entrée

Définissez this.isKinematic = true dans le constructeur si votre objet n'a pas besoin de physique (vitesse, accélération) mais doit toujours recevoir des événements de pointeur. Ceci est crucial pour les éléments d'interface utilisateur ou les objets décoratifs qui doivent être cliquables.

constructor(x, y) {
    super(x, y, 64, 64);
    this.isKinematic = true;
    this.anchorPoint.set(0.5, 0.5);
}

Gestion des événements de pointeur

Utilisez registerPointerEvent() pour connecter des événements de pointeur (clic, survol, etc.) à votre Renderable.

constructor(x, y) {
    super(x, y, 32, 32);
    this.isKinematic = true;
    this.registerPointerEvent("pointerdown", this, this.onClick.bind(this));
}

onClick(event) {
    console.log("Objet cliqué !", event);
    // Réagit au clic
}

Note : onClick est un rappel pratique pratique mais registerPointerEvent("pointerdown", ...) est plus flexible.

Effets postérieurs vs shader obsolète

Préférez addPostEffect(ShaderEffect) pour appliquer des effets visuels après le rendu. La propriété this.shader est obsolète et ne doit pas être utilisée dans un nouveau code.

import me from "melonjs";
import MonEffetPersonnalisé from "./MonEffetPersonnalisé";

// Ajoute un effet postérieur au jeu
me.game.world.addPostEffect(new MonEffetPersonnalisé());

Votre effet doit étendre me.Renderable et implémenter onRender(renderer).

class MonEffetPersonnalisé extends me.Renderable {
    constructor() {
        super(0, 0, me.game.viewport.width, me.game.viewport.height);
        this.floating = true;
    }

    onRender(renderer) {
        // Applique un effet (ex. teinte)
        renderer.setColor("rgba(255,0,0,0.3)");
        renderer.fillRect(0, 0, this.width, this.height);
    }
}

Ordre Z, addChild, anchorPoint et floating

  • z-order : Contrôle l'ordre de rendu. Les valeurs plus élevées sont rendues plus tôt (derrière). Utilisez this.z = nombre pour définir.
  • addChild : Ajoute un enfant à un conteneur (comme me.game.world). L'enfant hérite de la position du parent.
  • anchorPoint : Point d'ancrage pour les transformations. (0.5, 0.5) est le centre, (0, 0) est le coin supérieur gauche.
  • floating : Si true, l'objet ignore le défilement de la caméra – utile pour les interfaces utilisateur ou les effets d'arrière-plan fixes.
class MonUI extends me.Renderable {
    constructor() {
        super(10, 10, 200, 50);
        this.floating = true;          // Ne bouge pas avec la caméra
        this.anchorPoint.set(0, 0);    // Ancre en haut à gauche
        this.z = 100;                  // Rendu derrière la plupart des éléments
        this.isKinematic = true;
    }
}

// Ajout au monde
me.game.world.addChild(new MonUI());

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