Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 18.01.2021, 21:27   #71
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,300
По умолчанию

продолжение предыдущего сообщения

C++, Qt5, QPainter

Код:
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
#include <QtGui/QPainter>
#include <QtGui/QImage>
#include <QtCore/QTimer>
#include <QtCore/QElapsedTimer>
#include <QtCore/QDebug>

#define N_FRAMES 8

class Window : public QWidget
{
    Q_OBJECT
public:
    Window()
    {
        setWindowTitle("Qt C++");
        resize(512, 256);
        m_spriteSheet.load(":/Sprites/sprites-cat-running.png");
        int index = 0;
        for (int i = 0; i < 2; i++ )
        {
            for (int j = 0; j < 4; j++)
            {
                m_frames[index] = QPoint(j * m_sw, i * m_sh);
                qDebug() << m_frames[index];
                index++;
            }
        }
        connect(&m_timer, &QTimer::timeout, this, &Window::animationLoop);
        m_timer.start(1000.f/60.f);
        m_elapsedTimer.start();
    }
private:
    QTimer m_timer;
    QElapsedTimer m_elapsedTimer;
    float m_deltaTime;
    float m_animationTime = 0.f;
    const float m_animationSpeed = 100.f;
    QImage m_spriteSheet;
    QPoint m_frames[N_FRAMES];
    int m_frameIndex = 0;
    int m_x, m_y;
    const int m_sw = 512, m_sh = 256; // Source image width and height
private slots:
    void animationLoop()
    {
        m_deltaTime = m_elapsedTimer.elapsed();
        m_elapsedTimer.restart();

        m_animationTime += m_deltaTime;

        if (m_animationTime > m_animationSpeed)
        {
            m_animationTime = 0;
            m_x = m_frames[m_frameIndex].x();
            m_y = m_frames[m_frameIndex].y();
            m_frameIndex++;
            if (m_frameIndex >= N_FRAMES)
            {
                m_frameIndex = 0;
            }
        }

        update();
    }
private:
    void paintEvent(QPaintEvent *event)
    {
        Q_UNUSED(event);
        QPainter qp(this);
        qp.drawImage(0, 0, m_spriteSheet, m_x, m_y, m_sw, m_sh);
    }
};

#include "main.moc"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Window w;
    w.show();
    return a.exec();
}
Начал делать свой сайт на Node.js и Bootstrap: http://ivan8observer8.herokuapp.com/

Последний раз редактировалось 8Observer8; 19.01.2021 в 01:40.
8Observer8 вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WebGL developer Ojoteam Фриланс 0 19.05.2017 12:37
Ищу моделера для браузерной WebGL игры Kempston Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 31.03.2016 21:23
Пример использования Gera WebGL 3D Library rekodDeveloper JavaScript, Ajax 5 02.06.2015 16:05
Вопрос по Webgl Halk_blr Помощь студентам 0 23.02.2014 22:19
WebGl, использование Three.js оптимизировать и подправить код dem66 JavaScript, Ajax 0 23.06.2012 19:14


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS