Последние записи
- Рандомное слайдшоу
- Событие для произвольной области внутри TImage
- Удаление папки с файлами
- Распечатка файла
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
16th
Сен
Инструкция по созданию заготовки для 2D игр (для начинающих)
Posted by maloy under Исходники
8Observer8
Привет!
Для заготовки нам понадобится Qt (только для окна, функции обработки клавиш и таймера). OpenGL — только для рисования квадрата c помощью функции Rect( x1, y1, y2, y2 ). Остальное — это стандартный C++ и полная свобода творчества!
Заготовка представляет из себя медленно падающий квадрат, который мы можем перемещать влево и вправо с помощью стрелок.
Сначала представлю заготовку, потом инструкцию по её созданию, потом краткие объяснения основных моментов (объяснения я буду дополнять и переписывать по мере наличия свободного времени).
Код заготовки (обратите внимание на то, какая заготовка маленькая и как много она уже умеет!)
Scene.h
#ifndef SCENE_H
#define SCENE_H
#include <QGLWidget>
#include <QTimer>
#include <QKeyEvent>
class Scene : public QGLWidget
{
Q_OBJECT
public:
Scene( QWidget *parent = 0 );
private slots:
void slotMove();
private:
void initializeGL();
void paintGL();
void resizeGL( int w, int h );
void keyPressEvent( QKeyEvent * event );
private:
// Square position and size
int x;
int y;
const int rsize;
// Step size in x and y directions
// (number of pixels to move each time)
int xstep;
int ystep;
// Keep track of windows changing width and height
GLfloat windowWidth;
GLfloat windowHeight;
// Timer
QTimer *timer;
};
#endif // SCENE_H
Scene.cpp
#include "Scene.h"
Scene::Scene( QWidget *parent ) :
QGLWidget( parent ),
x( 0 ),
y( 100 ),
rsize( 25 ),
xstep( 25 ),
ystep( 1 )
{
timer = new QTimer( this );
connect( timer, SIGNAL( timeout() ),
this, SLOT( slotMove() ) );
timer->start( 33 );
this->setFocusPolicy( Qt::StrongFocus );
}
void Scene::slotMove()
{
y -= ystep;
updateGL();
}
void Scene::initializeGL()
{
glClearColor( 0.8f, 0.8f, 0.6f, 1.0f );
}
void Scene::paintGL()
{
// Clear the window with current clearing color
glClear( GL_COLOR_BUFFER_BIT );
// Set current drawing color
glColor3f( 0.0f, 0.5f, 0.5f );
// Draw a filled rectangle with current color
glRectf( x, y, x + rsize, y - rsize );
}
void Scene::resizeGL( int w, int h )
{
// Prevent a divide by zero
if ( h == 0 ) {
h = 1;
}
// Set Viewport to window dimensions
glViewport( 0, 0, w, h );
// Reset coordinate system
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
// Establish clipping volume (left, right, bottom, top, near, far)
GLfloat aspectRatio = ( GLfloat ) w / ( GLfloat ) h;
if ( w <= h ) {
windowWidth = 100.0f;
windowHeight = 100.0f / aspectRatio;
glOrtho( -100.0, 100.0, -windowHeight, windowHeight,
1.0, -1.0 );
} else {
windowWidth = 100.0 * aspectRatio;
windowHeight = 100.0;
glOrtho( -windowWidth, windowWidth, -100.0, 100.0,
1.0, -1.0 );
}
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
}
void Scene::keyPressEvent( QKeyEvent *event )
{
switch( event->key() ) {
case Qt::Key_Left:
x -= xstep;
break;
case Qt::Key_Right:
x += xstep;
break;
}
}
продолжение в теме на форуме
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)