Qt Quick – Gra komputerowa
W ramach pracy dyplomowej przygotowałem silnik gier komputerowych opierając się o technologię Qt Quick. Miałem duże nadzieje wobec realizowanego projektu. Jeszcze przed wyborem tematu wszystko wskazywało na to, że MeeGo będzie głównym system operacyjnym w produktach Nokii. Niestety sprawy się skomplikowały. MeeGo zostało zepchnięte na bok, a mój zapał do pracy nad silnikiem bardzo zmalał. Mimo wszystko musiałem zrealizować temat, który wcześniej zgłosiłem. Nie było łatwo ponieważ silnik postanowiłem oprzeć o graf sceny Qt, który był rozwijany równocześnie z pisaniem pracy magisterskiej. Zmiany programistów Qt często skutkowały dużymi regresjami w już napisanym przeze mnie kodzie. Dodatkowo do projektu dołączyłem silnik fizyczny Box2D oraz bibliotekę FMOD służącą odgrywaniu plików dźwiękowych. Ostateczny efekt jest dość ciekawy. Silnik działa bardzo płynnie, a przygotowanie za jego pomocą gry jest niesamowicie proste oraz szybkie. Nie trzeba znać skomplikowanego języka programowania takiego jak C++ czy Java. Wystarczy elementarna znajomość QML oraz JavaScript. Przygotowany silnik ma swoje mocne strony. Za sprawą Qt teoretycznie działa na wszystkim, począwszy od komputerów (Windows, Linux, Mac OS X) po urządzenia mobilne (MeeGo, Symbian).
Możliwości silnika:
- efektywne renderowanie grafiki 2D oraz 2.5D za sprawą Qt Scenegraph;
- podstawowe elementy graficzne: kształty, obrazki oraz duszki;
- efekty końcowe realizowane w jednostkach cieniowania;
- w pełni zintegrowany silnik fizyki Box2D – zaadaptowano większość możliwości tego silnika;
- obsługa gamepadów i innych urządzeń wejścia dostępnych już w Qt;
- odgrywanie multimediów za sprawą FMOD;
- obsługa sieci.
Interfejs programowania
Gry za pomocą przygotowanego silnika tworzy się w oparciu o język QML oraz JavaScript. Deklarując scenę można się posługiwać elementami zarówno pochodzącymi z modułu Qt Quick 2.0 jak i modułu silnika Qtiko 1.0. Oto kilka przykładów.
Utworzenie pustej sceny:
import QtQuick 2.0
import Qtiko 1.0
Qtiko
{
width: 640; height: 480
// pozostały kod sceny
}
Animowanie duszka:
import QtQuick 2.0
import Qtiko 1.0
Sprite
{
source: "Flake.png"
frames: 51
PropertyAnimation on frame {to: frames; duration: 1000; loops: Animation.Infinite}
}
Rozmycie zadanego elementu za sprawą programu w jednostce cieniowania:
import QtQuick 2.0
import Qtiko 1.0
Qtiko
{
width: 210; height:180;
Image
{
id: image
source: "image.png"
anchors.fill: parent
}
ShaderEffectSource
{
id: msource;
sourceItem: image;
hideSource: true;
}
PostProcessing
{
anchors.fill: parent
source: msource
effect: Blur { level: 3 }
}
}
Odgrywanie próbki dźwiękowej A oraz po jej zakończeniu próbki B:
import QtQuick 2.0
import Qtiko 1.0
Qtiko
{
width: 400; height: 510
Sound
{
id: soundA
source: "muzykaA.wav"
play: true
onPlayChanged:
{
soundB.play = true
}
}
Sound
{
id: soundB
source: "muzykaB.wav"
play: false
}
}
Efekt echo w odgrywanej próbce dźwiękowej:
import QtQuick 2.0
import Qtiko 1.0
Qtiko
{
Sound
{
source: "muzyka.wav"
play: true
loop: true
effect: EchoEffect
{
delay: 77
active: true
}
}
}
Deklaracja fizyki oraz obiektu podłoża:
import QtQuick 2.0
import Qtiko 1.0
Qtiko
{
width: 640; height: 480
Physics
{
anchors.fill: parent
running: true
gravity: Qt.point(0, -10)
Body
{
height: 20
anchors { left: parent.left; right: parent.right; bottom: parent.bottom }
bodyType: Body.Static
fixtures: Box
{
anchors.fill: parent
categories: Box.Category1
collidesWith: Box.All
}
Image
{
source: "Rockwall.png"
anchors.fill:parent
fillMode: Image.Tile
}
}
}
}
Takich przykładów mogło by być dużo więcej, ale chciałem pokazać raptem podstawy. Niestety nie mogę udostępnić silnika. Prawa majątkowe należą do uczelni, na której realizowałem pracę.
Demo

Komentarze
Chcę dodać komentarzJesus Boadas15-09-2011
Your page looks very interesting, can you traduce it to English.
Best Regards
Agata21-10-2012
Rewela :/. A tutaj można kupić kod źródłowy tej gry (gotowiec)
https://www.garagegames.com/products/tgb-platformer-kit
Tat z ciekawości ile czas zajęło Ci stworzenie tego demka??
Marcin Baszczewski21-10-2012
Hej. Co do TGB – wykorzystałem wyłącznie grafikę. Demo, które przygotowałem opiera się wyłącznie o QML oraz moją wtyczkę. Przygotowanie takiej platformówki zajęło mi około 2 dni.
Agata22-10-2012
Link podany został dla chętnych do pogrania w grę lub zrobienia sobie własnej wersji z ta grafiką (linka do Twojego demka gry nie widzę) w 2 dni no to nieźle ;)