All streams
Search
Write a publication
Pull to refresh

Comments 7

>The QSocketNotifier makes it possible to integrate Qt's event loop with other event loops based on file descriptors.

Видимо, просто напросто уведомления от системы приходят от файлового сокета, который приложение и слушает… Других идей нет.
На самом деле, по моему опыту, лучше все же не писать под Harmattan приложение совсем без QML — лучше сделать кастомный компонент (это очень просто, поверьте), и разместить его, скажем, в качестве child-элемента к top-level элементу (Window или там Rectangle, если предпочитаете) с занятием всего занимаемого top-level элементом пространства. В плане гибкости вы ничего не потеряете, а скорее даже приобретете — доступ к Qt.application.active, на раз решающему вашу проблему с eventFilter, доступ к screen.allowSwipe, с помощью которого можно без лишнего геморроя запрещать swipe behaviour во время игры и разрешать во время паузы (если игра основана на жестах, то пользователю может не очень понравиться, когда при неосторожном движении у него игра уедет в фон, а то и закроется), и т.д. и т.п.
Весь код в этой статье будет на C++, олдфаги одобряют.

Одобряют не только олдфаги ;).
А как вы делали анимацию спрайтов?
Анимация делается в движке следующим образом: у каждого анимированного объекта есть поле — номер кадра

class AnimationObject
{
    int m_frame;

public:
    int frame() const;
};

На каждом шаге обработки логики игры для определенных объектов устанавливается нужный кадр

void updateTower(Tower& tower)
{
    ...
    if (tower.isAttacking())
    {
        tower.setFrame(tower.frame() + 1);
    }
    ...
}

При отрисовке каждого кадра достаем нужный спрайт из массива

void paintTower(const Tower& tower)
{
    drawSprite(tower.position(), towerSprites[tower.frame()];
}
Спрайт у вас сделан одной картинкой?
Да, у меня все спрайты сделаны одной картинкой 2048x2048, я пользуюсь утилитой texturepacker.
Sign up to leave a comment.

Articles