Evgenii Legotckoi
Қаз. 20, 2015, 10:06 Т.Қ.

QML - Сабақ 005. QML жүйесінде Sprite және AnimatedSprite пайдалану 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. Тогда спрайты будут работать синхронно, если этого не сделать, то они будут работать медленно и поочерёдно.

  1. import QtQuick 2.5
  2. import QtQuick.Controls 1.4
  3. import QtQuick.Dialogs 1.2
  4.  
  5. ApplicationWindow {
  6. visible: true
  7. width: 640
  8. height: 480
  9. title: qsTr("Hello World")
  10.  
  11. MainForm {
  12. // Растягиваем форму главного окна по всему окну приложения
  13. anchors.fill: parent
  14.  
  15. /* Объект последовательности спрайтов
  16. * В данном объекте можно задавать различные спрайты
  17. * с различными картинками и их последовательноть
  18. * */
  19. SpriteSequence {
  20. id: image
  21. width: 20 // Ширина области под спрайт
  22. height: 20 // Высота области под спрайт
  23. // Спрайт находится слева вверху окна приложения
  24. anchors.left: parent.left
  25. anchors.leftMargin: 100
  26. anchors.top: parent.top
  27. anchors.topMargin: 100
  28.  
  29. // Сам объект спрайта
  30. Sprite {
  31. id: sprite
  32. // Источник, спрайтовая картинка
  33. source: "sprite_sheet.png"
  34. frameCount: 15 // Количество кадров
  35. frameWidth: 20 // Ширина фрейма
  36. frameHeight: 20 // Высота фрейма
  37. frameSync: true // Синхронизация
  38. }
  39. }
  40.  
  41. AnimatedSprite {
  42. id: animatedSprite
  43.  
  44. width: 20 // Ширина области под спрайт
  45. height: 20 // Высота области под спрайт
  46. // Спрайт находится справа вверху окна приложения
  47. anchors.right: parent.right
  48. anchors.rightMargin: 100
  49. anchors.top: parent.top
  50. anchors.topMargin: 100
  51.  
  52. // Источник, спрайтовая картинка
  53. source: "sprite_sheet.png"
  54. frameCount: 15 // Количество кадров
  55. frameWidth: 20 // Ширина фрейма
  56. frameHeight: 20 // Высота фрейма
  57. frameSync: true // Синхронизация
  58. }
  59. }
  60. }

Итог

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

Видеоурок

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз