TL;DR: Разработчик создал веб-инструмент для создания пиксель-арта и анимации, используя Preact для реактивности и localforage для хранения данных. Проект работает годами, несмотря на небольшой размер кодовой базы и отсутствие значительного код-рота.
Введение: Контекст и актуальность
Создание инструментов для художников и аниматоров — задача, которая требует не только понимания их потребностей, но и технической реализации, обеспечивающей удобство и производительность. В этой статье мы рассмотрим опыт разработки веб-приложения для создания пиксель-арта и анимации, которое было создано с использованием современных фронтенд-технологий.
Основная часть: Технические детали и примеры кода
Архитектура приложения
Основой приложения является Preact — легковесная библиотека для создания пользовательских интерфейсов, которая обеспечивает реактивность и высокую производительность. Preact был выбран из-за его минималистичного подхода и совместимости с React, что позволяет использовать существующие экосистемы и инструменты.
Для хранения данных используется localforage — библиотека, которая предоставляет простой API для работы с локальным хранилищем (IndexedDB, WebSQL, localStorage). Это позволяет сохранять проекты пользователей даже после закрытия браузера.
import { useState, useEffect } from 'preact/hooks';
import localforage from 'localforage';
function useProjectStorage(projectId) {
const [project, setProject] = useState(null);
useEffect(() => {
localforage.getItem(`project_${projectId}`).then((savedProject) => {
if (savedProject) {
setProject(savedProject);
}
});
}, [projectId]);
const saveProject = (newProject) => {
localforage.setItem(`project_${projectId}`, newProject).then(() => {
setProject(newProject);
});
};
return [project, saveProject];
}
Реализация холста для пиксель-арта
Холст реализован с использованием HTML5 Canvas API. Это позволяет эффективно работать с графикой и обеспечивает высокую производительность даже при работе с большими изображениями.
function createCanvas(width, height) {
const canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
return canvas;
}
function drawPixel(ctx, x, y, color) {
ctx.fillStyle = color;
ctx.fillRect(x, y, 1, 1);
}
Анимация и управление кадрами
Для создания анимации используется концепция кадров. Каждый кадр представляет собой отдельное изображение, которое можно редактировать и сохранять. Пользователь может добавлять новые кадры, удалять существующие и изменять их порядок.
function addFrame(frames, newFrame) {
return [...frames, newFrame];
}
function removeFrame(frames, index) {
return frames.filter((_, i) => i !== index);
}
function reorderFrames(frames, fromIndex, toIndex) {
const result = [...frames];
const [removed] = result.splice(fromIndex, 1);
result.splice(toIndex, 0, removed);
return result;
}
Практическое применение
Приложение позволяет художникам и аниматорам создавать пиксель-арт и анимацию прямо в браузере, без необходимости устанавливать дополнительные программы. Это особенно полезно для тех, кто работает на разных устройствах или в условиях ограниченных ресурсов.
Заключение
Разработка веб-инструмента для пиксель-арта и анимации — это пример того, как современные фронтенд-технологии могут быть использованы для создания мощных и удобных приложений. Использование Preact и localforage позволило создать легковесное и производительное решение, которое работает годами без значительного код-рота. Этот проект демонстрирует, что даже небольшие команды или отдельные разработчики могут создавать качественные инструменты для профессионального использования.
Источник: https://www.reddit.com/gallery/1qloikm