Evgenii Legotckoi
Evgenii Legotckoi20. Oktober 2015 12:06

QML - Lektion 005. Verwenden eines Sprites und eines animierten Sprites in QML Qt

Nachdem drei Lektionen über Sprites geschrieben wurden, von ihrer Zeichnung bis zu ihrer praktischen Anwendung in Qt in this und dieser Artikel, denke ich, dass es unmöglich ist, an der Verwendung von Sprites in QML Qt vorbeizukommen.

Sprites in QML sind sogar noch einfacher zu verwenden als in Qt/C++, weil QML über Klassen verfügt, die speziell für die Arbeit mit Sprites entwickelt wurden: Sprite und * AnimatedSprite. *

Projektstruktur für die Arbeit mit Sprite und AnimatedSprite

Das Projekt wird als standardmäßiges QtQuick-Projekt mit Steuerelementen erstellt, wonach ich alle zusätzlichen Dinge wie die Menüleiste und die Schaltflächen wegwerfe. Ich hinterlasse nur das, was wir für die Demonstration verwenden werden.

  • main.cpp - die Hauptprojektdatei, in der die qml-Datei gestartet wird;
  • main.qml - Anwendungsfenster;
  • MainForm.ui.qml - Formular für die Arbeit mit dem Designer;
  • sprite_sheet.png - das Bild unseres Sprites.

sprite_sheet.png

main.qml

Da die Lektion selbst ziemlich einfach ist, werde ich mich nur auf den Programmcode dieser Datei konzentrieren.

In dieser Lektion biete ich zwei Optionen für die Verwendung von Sprites an. Eine Möglichkeit besteht darin, eine SpriteSequence zu verwenden, die verschiedene Sprites mit unterschiedlichen Quellen enthalten kann. Und die zweite Option ist die Verwendung von AnimatedSprite , bei der eine Quelle genommen wird. Beide Optionen zur Verwendung von Sprites in diesem Tutorial führen zum gleichen Ergebnis.

Die SpriteSequence gibt die Größe des Sprites und seine Position im Hauptanwendungsfenster an, während die Framegröße des Sprites und die Anzahl seiner Frames bereits im Objekt Sprite, festgelegt sind, das platziert wird in SpriteSequence. Gleichzeitig können Sie in SpriteSequence mehrere solcher Sprite. -Objekte platzieren

Bei AnimatedSprite werden alle Parameter für Größe und Ort sowie Framegröße und -anzahl in AnimatedSprite selbst gesetzt. Der Unterschied besteht darin, dass nur eine Datei als Quelle für Sprites genommen werden kann .

Sie müssen auch den Parameter frameSync als true angeben. Dann arbeiten die Sprites synchron, wenn dies nicht getan wird, dann arbeiten sie langsam und nacheinander.

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 // Синхронизация
        }
    }
}

Insgesamt

Als Ergebnis erhalten Sie eine Anwendung in der linken und rechten Ecke, die identisch funktionierende Explosions-Sprites enthält. Im Video-Tutorial wird die Anwendung demonstriert, und das Video-Tutorial zeigt auch, wie sich Sprites bei falscher Konfiguration verhalten.

Videoanleitung

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken