Improving sprite sheets generation for Phaser JS game with Webpack 4 - Skate Platformer Game Devlog #02
Game dev updates and code snippet.
Written in September 9, 2020 - 🕒 2 min. readHey guys, second post in less than a week, unbelievable.
In the gameplay, we don’t have a lot of news since the last video, just some changes in the game build, which I would like to share here with you.
First I have to get all the tileset files, sprites, and the stage files made in Tiled.
const stageFiles = await fs.readdir(STAGES_PATH);
const tilesetFiles = await fs.readdir(TILESETS_PATH);
const tilesetImageFiles = tilesetFiles
    .filter((tilesetFile) => supportedImageTypes.includes(tilesetFile.split('.')[1]));
const spritesFolders = await fs.readdir(SPRITES_PATH);In the sprites folder there is an image for each frame of the animation:
    
    Now I pass the path from that folder to the WebpackFreeTexPacker plugin with some default settings:
const textPackerPlugin = [];
for (const spritesFolder of spritesFolders) {
    texPackerPlugin.push(
        new WebpackFreeTexPacker(
            path.resolve(__dirname, `${SPRITES_PATH}/${spritesFolder}`),
            '../assets/atlases',
            {
                height: 32,
                textureName: spritesFolder,
                fixedSize: false,
                padding: 0,
                allowRotation: false,
                detectIdentical: true,
                allowTrim: true,
                exporter: 'Phaser3',
                removeFileExtension: true,
                prependFolderName: false,
            }
        )
    );
}And for each of the tilesets images I will process them using the extrude plugin:
for (const tilesetFile of tilesetImageFiles) {
    await extrudeTilesetToImage(
        tileWidth,
        tileHeight,
        `${TILESETS_PATH}/${tilesetFile}`,
        `${DIST_PATH}/assets/tilesets/${tilesetFile}`,
        {
            margin: 0,
            spacing: 0,
        }
    );
}And the last thing I did was to take the stage files created in Tiled and pass them to the frontend using the webpack.DefinePlugin plugin so that it is possible to load the stages dynamically:
const STAGES = JSON.stringify(
    stageFiles
        .filter((stage) => stage.split('.')[1] === 'json')
        .map((stage) => stage.split('.')[0])
);
return {
    ...,
    plugins: [
        new webpack.DefinePlugin({
            CANVAS_RENDERER: JSON.stringify(true),
            WEBGL_RENDERER: JSON.stringify(true),
            IS_DEV: JSON.stringify(true),
            VERSION: JSON.stringify(packageJson.version),
            STAGES,
        }),
    ],
    ...,
};And now every time I build the game I can load stages dynamically with the constant STAGES and all my sprites and tilesets are ready to be used.
That’s what I have for you guys today, I hope you liked this video format and blog post, see you next time.
Tags:
- coding
 - games
 - javascript
 - phaser
 - phaser 3
 - game devlog
 - gamedev
 - skate platformer
 - super ollie vs pebble corp
 - webpack
 - tiled
 
Related posts
Post a comment
Comments
No comments yet.


