Як написати гру на Qt - Урок 1
З цього уроку розпочинається серія статей про те, як написати гру на Qt. У попередній статті було розказано про систему позиціонування графічних елементів QGraphicsItem у графічній сцені QGraphicsScene. Було намальовано трикутник і поміщено до центру графічної сцени, розміри якої були 500 на 500 пікселів. А тепер настав час цей трикутник пожвавити, а вірніше почати ним управляти.
Складемо технічне завдання уроку:
- У вікні знаходиться графічна сцена з розмірами 500 на 500 пікселів (це вже зроблено в попередньому уроці);
- У центрі графічної сцени знаходиться червоний трикутник (що вже зроблено минулого уроці);
- Трикутник повинен переміщатись при натисканні клавіш зі стрілками Up, Down, Left, Right;
- Трикутник ні виходить межі графічної сцени, тобто має бути обмежений розмірами графічної сцени.
Примітка. У цьому проекті використовується WinAPI, тому проект застосовується для використання в операційній системі Windows, а для Linux і MacOS застосуємо лише алгоритм, який використовується в даному уроці. Тому якщо Ви бажаєте написати гру під ці ОС, необхідно буде використовувати бібліотеки цих ОС для асинхронної обробки натискання клавіш.
Структура проекту
- Triangle.pro - профайл проекту, що створюється за замовчуванням і в даному проекті не вимагає коригування;
- main.cpp - файл, з якого стартує додаток, в даному файлі викликається widget, в якому розташовуватиметься графічна сцена з трикутником, яким ми керуватимемо;
- widget.h - заголовний файл, що викликається віджетом з графічною сценою;
- widget.cpp - файл вихідних кодів віджету;
- triangle.h -заголовний файл класутрикутника, який успадкований від QGraphicsItem;
- triangle.cpp - файл вихідних кодів класуТрикутник.
mainwindow.ui
У дизайнері інтерфейсів просто закидаємоQGraphicsView у віджет. Більше нічого не потрібне.
У цьому файлі лише оголошуємо графічну сцену, об'єкт трикутника, яким керуватимемо, а також таймер, за відліками якого буде проводитися перевірка стану клавіш клавіатури, якими ми керуватимемо трикутником на графічній сцені.
У цьому файлі проводиться ініціалізація графічної сцени та її розмірів, а також у графічній сцені відмальовуються межі поля, де переміщатиметься трикутник. Але ключовим моментом є ініціалізація таймера, з обробки сигналу від якого буде проводитися зміни стану графічної сцени, а також будуть змінюватися координати розташування трикутника при відстеженні стану клавіш клавіатури.
А ось тепер приступаємо до програмного коду, який відповідає за графічний об'єкт, яким ми керуватимемо. Клас успадковується відQObject до роботи з сигналами і слотами , і навіть відQGraphicsItem.
Саме в цьому файлі підключається заголовний файлwindows.h для роботи з функціоналом
triangle.cpp
Відмальовка трикутника взята з попереднього уроку з позиціювання графічних елементів у графічній сцені, а ось перемальовка в слоті, який оброблятиме сигнал від таймера, а також ініціалізація первинного повороту об'єкта вже є новим шматком коду.
Поворот об'єкта визначається в градусах змінноїangle і встановлюється функцієюsetRotation(), яка була успадкована відQGraphicsItem. Також для відстеженнястану кнопок клавіатури використовується функція зWinAPI, а самеGetAsyncKeyState(), яка за кодом кнопки визначає стан цієї самої кнопки. При кожному сигналі від об'єкта класу QTimer відбувається перевірка натиснутих клавіш і залежно від стану змінюється положення трикутника.
Примітка
Для того, щоб проект скомпілювався з комплектом збірки MSVC, додайте до pro файл проекту наступні рядки:
В результаті виконаної роботи ми зробили перші кроки до того, щоб написати гру. А саме навчилися керувати об'єктом, тобто нашим героєм-трикутником, з яким ми також попрацюємо в майбутніх уроках написання першої нашої гри.