<MyRusakov.ru />

Создание игр на Unreal Engine 5

Создание игр на Unreal Engine 5

Данный курс научит Вас созданию игр на Unreal Engine 5. Курс состоит из 12 модулей, в которых Вы с нуля освоите этот движок и сможете создавать самые разные игры.

В курсе Вы получите всю необходимую теоретическую часть, а также увидите массу практических примеров. Дополнительно, почти к каждому уроку идут упражнения для закрепления материала.

Помимо самого курса Вас ждёт ещё 8 бесплатных ценных Бонусов: «Chaos Destruction», «Разработка 2D-игры», «Динамическая смена дня и ночи», «Создание динамической погоды», «Создание искусственного интеллекта для NPC», «Создание игры под мобильные устройства», «Создание прототипа RPG с открытым миром» и и весь курс «Создание игр на Unreal Engine 4» (актуальный и в 5-й версии), включающий в себя ещё десятки часов видеоуроков.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Обёртка для работы с IndexedDB на JavaScript: класс IndexedDBWrapper

Обёртка для работы с IndexedDB на JavaScript: класс IndexedDBWrapper

IndexedDBWrapper предоставляет высокоуровневый интерфейс для выполнения основных операций с IndexedDB: открытия базы данных, добавления, получения, обновления и удаления записей. Использование асинхронного программирования через async/await обеспечивает более читаемый и поддерживаемый код.

// Класс-обёртка для удобной работы с IndexedDB
export default class IndexedDBWrapper {
    /**
     * Конструктор класса
     * @param {string} dbName - Имя базы данных
     * @param {number} version - Версия базы данных (по умолчанию 1)
     * @param {function} onUpgradeNeededCallback - Функция, вызываемая при обновлении базы данных
     */
    constructor(dbName, version = 1, onUpgradeNeededCallback = null) {
        this.dbName = dbName;
        this.version = version;
        this.db = null;
        this.onUpgradeNeededCallback = onUpgradeNeededCallback;
    }

    /**
     * Открытие базы данных с использованием async/await
     */
    async open() {
        try {
            this.db = await this.openDB();
            console.log(`Database ${this.dbName} opened successfully`);
        } catch (err) {
            console.error("Error opening database", err);
        }
    }

    /**
     * Открытие базы данных и обработка обновления версии
     * @returns {Promise<IDBDatabase>}
     */
    openDB() {
        return new Promise((resolve, reject) => {
            const request = indexedDB.open(this.dbName, this.version);

            // Обработка события обновления базы данных
            request.onupgradeneeded = (event) => {
                if (this.onUpgradeNeededCallback) {
                    this.onUpgradeNeededCallback(event);
                }
            };

            // Успешное открытие базы данных
            request.onsuccess = (event) => resolve(event.target.result);

            // Ошибка открытия базы данных
            request.onerror = (event) => reject(event.target.error);
        });
    }

    /**
     * Добавление данных в указанное хранилище
     * @param {string} storeName - Имя хранилища объектов
     * @param {Object} data - Данные для добавления
     */
    async add(storeName, data) {
        try {
            const result = await this.transaction(storeName, 'readwrite', (store) => store.add(data));
            console.log('Data added', result);
            return result;
        } catch (err) {
            console.error('Error adding data', err);
        }
    }

    /**
     * Получение данных по ключу из указанного хранилища
     * @param {string} storeName - Имя хранилища объектов
     * @param {IDBValidKey} key - Ключ для поиска
     */
    async get(storeName, key) {
        try {
            const result = await this.transaction(storeName, 'readonly', (store) => store.get(key));
            console.log('Data retrieved', result);
            return result;
        } catch (err) {
            console.error('Error retrieving data', err);
        }
    }

    /**
     * Обновление данных в указанном хранилище
     * @param {string} storeName - Имя хранилища объектов
     * @param {Object} data - Данные для обновления (должны содержать ключ)
     */
    async update(storeName, data) {
        try {
            const result = await this.transaction(storeName, 'readwrite', (store) => store.put(data));
            console.log('Data updated', result);
            return result;
        } catch (err) {
            console.error('Error updating data', err);
        }
    }

    /**
     * Удаление данных по ключу из указанного хранилища
     * @param {string} storeName - Имя хранилища объектов
     * @param {IDBValidKey} key - Ключ записи для удаления
     */
    async delete(storeName, key) {
        try {
            await this.transaction(storeName, 'readwrite', (store) => store.delete(key));
            console.log('Data deleted');
        } catch (err) {
            console.error('Error deleting data', err);
        }
    }

    /**
     * Выполнение транзакции с использованием async/await
     * @param {string} storeName - Имя хранилища объектов
     * @param {string} mode - Режим транзакции ('readonly' или 'readwrite')
     * @param {function} callback - Функция, выполняющая операцию над хранилищем
     * @returns {Promise<any>}
     */
    transaction(storeName, mode, callback) {
        return new Promise((resolve, reject) => {
            const transaction = this.db.transaction(storeName, mode);
            const store = transaction.objectStore(storeName);

            const request = callback(store);

            request.onsuccess = (event) => resolve(event.target.result);
            request.onerror = (event) => reject(event.target.error);
        });
    }

    /**
     * Закрытие соединения с базой данных
     */
    close() {
        if (this.db) {
            this.db.close();
            console.log('Database closed');
        }
    }
}

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.