Evgenii Legotckoi
Evgenii Legotckoi20 жовтня 2015 р. 12:06

QML - Урок 005. Використання спрайту та анімованого спрайта в QML Qt

Після того, як по спрайт було написано три уроки, від їх малювання , до їх практичного застосування в Qt в цієї і цей статтях, вважаю, що не можна пройти повз застосування спрайтів в QML Qt .

Спрайти в QML застосовуються ще простіше, ніж у Qt/C++, оскільки у QML є класи, які спеціально створені для роботи зі спрайтами: Sprite та * AnimatedSprite. *

Структура проекту для роботи зі Sprite та AnimatedSprite

Проект створюється як стандартний проект QtQuick with controls, після чого я викидаю все зайве, нібито меню бару і клавіш. Залишаю лише те, що ми використовуватимемо для демонстрації.

  • main.cpp - основний файл проекту, в якому запускається файл qml;
  • main.qml - вікно програми;
  • MainForm.ui.qml - форма для роботи з дизайнером;
  • sprite_sheet.png - зображення нашого спрайту.

sprite_sheet.png

main.qml

Оскільки сам по собі урок досить простий, зупинюся на програмному коді тільки цього файлу.

У цьому уроці пропоную два варіанти застосування спрайтів. Один варіант - це застосування за допомогою SpriteSequence, в який можна поміщати різні спрайти, з різними джерелами. А другий варіант - це з використанням AnimatedSprite, у якому береться одне джерело. Обидва варіанти застосування спрайтів у даному уроці дадуть однаковий результат.

У SpriteSequence задається розмір спрайту та його положення у головному вікні програми, тоді як розмір кадру спрайту та кількість його кадрів задається вже в об'єкті Sprite, який міститься у SpriteSequence. При цьому в SpriteSequence можна розмістити кілька таких об'єктів Sprite.

У випадку з AnimatedSprite всі параметри розмірів та розташування, а також розмірів кадру та його кількості задаються в самому AnimatedSprite. Різниця в тому, що як джерело спрайтів може бути взятий тільки один файл.

Також необхідно вказати параметр frameSync як true. Тоді спрайти працюватимуть синхронно, якщо цього не зробити, то вони працюватимуть повільно та по черзі.

import QtQuick 2.5
import QtQuick.Controls 1.4
import QtQuick.Dialogs 1.2

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    MainForm {
        // Растягиваем форму главного окна по всему окну приложения
        anchors.fill: parent

        /* Объект последовательности спрайтов
         * В данном объекте можно задавать различные спрайты
         * с различными картинками и их последовательноть
         * */
        SpriteSequence {
            id: image
            width: 20   // Ширина области под спрайт
            height: 20  // Высота области под спрайт
            // Спрайт находится слева вверху окна приложения
            anchors.left: parent.left
            anchors.leftMargin: 100
            anchors.top: parent.top
            anchors.topMargin: 100

            // Сам объект спрайта
            Sprite {
                id: sprite
                // Источник, спрайтовая картинка
                source: "sprite_sheet.png"
                frameCount: 15      // Количество кадров
                frameWidth: 20      // Ширина фрейма
                frameHeight:  20    // Высота фрейма
                frameSync: true     // Синхронизация
            }
        }

        AnimatedSprite {
            id: animatedSprite

            width: 20   // Ширина области под спрайт
            height: 20  // Высота области под спрайт
            // Спрайт находится справа вверху окна приложения
            anchors.right: parent.right
            anchors.rightMargin: 100
            anchors.top: parent.top
            anchors.topMargin: 100

            // Источник, спрайтовая картинка
            source: "sprite_sheet.png"
            frameCount: 15  // Количество кадров
            frameWidth: 20  // Ширина фрейма
            frameHeight: 20 // Высота фрейма
            frameSync: true // Синхронизация
        }
    }
}

Підсумок

В результаті Ви отримаєте додаток у лівому та правому кутку якого будуть розташовані спрайти вибухів, що однаково працюють. Демонстрація програми наведена у відеоуроці, а також у відеоуроці показані варіанти поведінки спрайтів при неправильному налаштуванні.

Відеоурок

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
d
  • dsfs
  • 26 квітня 2024 р. 01:56

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:80бали,
  • Рейтинг балів4
d
  • dsfs
  • 26 квітня 2024 р. 01:45

C++ - Тест 002. Константы

  • Результат:50бали,
  • Рейтинг балів-4
d
  • dsfs
  • 26 квітня 2024 р. 01:35

C++ - Тест 001. Первая программа и типы данных

  • Результат:73бали,
  • Рейтинг балів1
Останні коментарі
k
kmssr08 лютого 2024 р. 15:43
Qt Linux - Урок 001. Автозапуск програми Qt під Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий Кононенко04 лютого 2024 р. 22:50
Qt WinAPI - Урок 007. Робота з ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25 грудня 2023 р. 07:30
Boost - статичне зв&#39;язування в проекті CMake під Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
J
JonnyJo25 грудня 2023 р. 05:38
Boost - статичне зв&#39;язування в проекті CMake під Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
G
Gvozdik18 грудня 2023 р. 18:01
Qt/C++ - Урок 056. Підключення бібліотеки Boost в Qt для компіляторів MinGW і MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Тепер обговоріть на форумі
Evgenii Legotckoi
Evgenii Legotckoi02 травня 2024 р. 11:07
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.
IscanderChe
IscanderChe30 квітня 2024 р. 01:22
Во Flask рендер шаблона не передаётся в браузер Доброе утро! Имеется вот такой шаблон: <!doctype html><html> <head> <title>{{ title }}</title> <link rel="stylesheet" href="{{ url_…
G
Gar22 квітня 2024 р. 02:46
Clipboard Как скопировать окно целиком в clipb?
Павел Дорофеев
Павел Дорофеев13 квітня 2024 р. 23:35
QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
f
fastrex04 квітня 2024 р. 01:47
Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…

Слідкуйте за нами в соціальних мережах