Русскоязычный портал о QML и QtQuick, QmlPortal What the duck

Каталог статей

Главная » Статьи » Обучение QML

Спрайтовая анимация в играх на QML

Для создания спрайтовой анимации нам потребуются последовательность спрайтов, зашитых в один файл. Возьмем для примера такой:

Создадим новый QML-элемент Sprite:

import QtQuick 1.0

 
Item{
id:spriteAnimation

property int framesHorizontCount:0
// колличество спрайтов по горизотали
 property int framesVerticalCount:0
// колличество спрайтов по вертикали
 property int framesCount:(framesHorizontCount*framesVerticalCount)
// кол-во спрайтов в файле
 property int currentFrame:0
// текущий спрайт при анимации
 property string sourcePath:""
// местонахождении файла со спрайтами
 property int animationSpeed:0
// скорость анимации
 x:0
y:0
z:0
clip:true
 height:spriteAnimationImage.height/framesVerticalCount
width:spriteAnimationImage.width/framesHorizontCount
// размер одного спрайта
 Image{
// выводимый на эран спрайт
 id:spriteAnimationImage
source:sourcePath
 x:-((spriteAnimation.currentFrame*spriteAnimation.width)
-Math.floor(spriteAnimation.currentFrame/spriteAnimation.framesHorizontCount)
*(spriteAnimation.framesHorizontCount*spriteAnimation.width))
y:-(Math.floor(spriteAnimation.currentFrame/spriteAnimation.framesHorizontCount)*spriteAnimation.height)
// координаты текущего спрайта
}
}


Теперь в основной программе создаем и инициализируем новый спрайт:
 Sprite{
id:explosion
 framesHorizontCount:15
framesVerticalCount:1
framesCount:(framesHorizontCount*framesVerticalCount)
currentFrame:-1
sourcePath:"MEDIA/explosion.png"
animationSpeed:40
x:0
y:0
}

Далее - создаем таймер для анимации:
 Timer{
id:explosionTimer
interval:explosion.animationSpeed
running:false
repeat:true

 onTriggered:{
explosion.currentFrame++
if (explosion.currentFrame==explosion.framesCount){
explosionTimer.stop()
}
}
}

Ну и для примера будем выводить анимированный взрыв в месте клика мышкой:
 MouseArea {
anchors.fill: parent
onClicked: {
explosion.x=mouseX-explosion.width/2
explosion.y=mouseY-explosion.height/2
explosion.currentFrame=-1
explosionTimer.start()
}
}

Получаем что-то типа такого:



Рабочий пример можно скачать тут:

qml.ucoz.com

Категория: Обучение QML | Добавил: CYAN (18.03.2012) | Автор: QmlPortal W
Просмотров: 6406 | Теги: Sprite Animation, QML | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Категории раздела

Все статьи [0]
Обучение QML [8]
Статьи с базовой информацией о языке QML
Статьи по QML [6]
Статьи по QML
QML для профессионалов [4]
Статьи по QML-темам повышенной сложности
Ссылки на видео [5]
Ссылки на видео с демонстрацией возможностей QML
Ссылки на материалы по QML в интернете [2]
Ссылки на полезные материалы по QML в интернете
Обо всём [1]
Статьи на разные темы, не имеющие отношение к QML и QtQuick

Поиск на сайте

Облако тэгов

QML QtQuick kinetic scroll анимация интерфейса кинетик скролл создание интерфейса path view qml видео демонстрация qml demo QML browser plugin просмотр QML форм QML Rectangle QML Text пример QML QML State QML Transition базовые типы QML color picker QML MouseArea QML signal QML Component qml export QML Grid QML Particle System QtQuick.Particles экспорт qml из GIMP экспорт QML из Photoshop QML пример Web-browser Набор виджетов для QML статьи о QML на русском языке D.U.C.K. H.U.N.T. MeegoHarmattan N9/N950 game QML Scene Graph Qt Quick 2 анимация Easing Easing curves Сглаживающие кривые C++ QGraphicsView Q_INVOKABLE Интеграция QML и C++ GLSL fragment shader JavaScript глобальные переменные Qt Mobility QtMultimediaKit map QtMobility.location Debian package Harmattan QtCreator Sprite Animation

Статистика сайта

Статей: 26
Новостей: 6
Файлов: 10
Форум: 19/46
Коментариев: 6

Посетители

Полезные ресурсы

сайт Российского Qt сообщества The FRUCT program Российская сеть MeeGo пользователей и разработчиков