
Melonjs Sprites And Animation
Use this skill when creating sprites, playing frame animations, or working with texture...
Install
npx skills add melonjs/melonJS --skill melonjs-sprites-and-animation -g -a claude-code -y- Repository
- melonjs/melonJS6.4k
- Category
- Design
- Updated
- 3d ago
- License
- MIT
- Context cost
- Mediumabout 1,907 tokens
- Runs scripts
- No, instructions only
What it does
Use this skill when creating sprites, playing frame animations, or working with texture atlases in melonJS. Covers Sprite construction from a plain image or an atlas region, addAnimation/setCurrentAnimation, TextureAtlas for TexturePacker/ShoeBox/Aseprite, tint, flip, NineSliceSprite, and the centred anchorPoint that offsets naive positioning. Triggers on: Sprite, new Sprite, addAnimation, setCurrentAnimation, isCurrentAnimation, TextureAtlas, TexturePacker, Aseprite, ShoeBox, atlas, region, framewidth, frameheight, tint, flipX, flipY, NineSliceSprite, animation.
Sprites, animation and atlases
Creating sprites from images or atlases, driving frame animation, and the positioning trap that catches almost everyone.
pos is the centre, not the top-left
Renderable.anchorPoint defaults to (0.5, 0.5), so a sprite's pos is its
centre. Container forces (0, 0) instead, which is why containers and
sprites appear to disagree.
// a 64×64 sprite at (100, 100) covers 68..132, not 100..164
const s = new Sprite(100, 100, { image: "hero", framewidth: 64, frameheight: 64 });
s.anchorPoint.set(0, 0); // switch to top-left positioning if you prefer
Writing top-left maths against the centred default puts everything half a sprite off, with no error. It is the most common source of "close but subtly wrong" placement.
Constructing a sprite
From a plain image:
const hero = new Sprite(x, y, {
image: "hero", // preloaded asset name
framewidth: 32,
frameheight: 32,
});
From a texture atlas region:
const atlas = new TextureAtlas(loader.getJSON("sprites"), loader.getImage("sprites"));
const coin = new Sprite(x, y, { image: atlas, region: "coin_01.png" });
framewidth / frameheight define the animation grid on a sheet. Omit them and
the whole image is one frame.
Animation
hero.addAnimation("idle", [0, 1, 2, 3], 100); // frames, ms per frame
hero.addAnimation("walk", [4, 5, 6, 7]);
hero.addAnimation("die", [8, 9], 150);


