Рационально ли использование элементов Qt в игровом движке?
Здравствуйте. У меня вопрос чисто теоретический. Я проектирую игровой движок. Движок будет для довольно простых игр (2-D Изометрия и все такое, но это не важно), поэтому для ввода/вывода, графики и звука буду использовать SDL. Все, вроде бы, ясно, но вот за последнее время я очень привык к Qt и хотел-бы использовать его элементы в движке (библиотеку коллекций, строки, XML-инструменты, сигналы-слоты, т.д.). Сильно ли я проиграю в быстродействии и/или других важных иговых аспектах если я включу такую высокоуровневую библиотеку?
P.S.
Понимаю, что делать движки - удел школьников в глазах многих людей, но для меня это просто приятный вызов.
Ну, для отрисовки графики и воспроизведения звука это верно. Но я немного не о том. Например, при атаке по юниту я хотел бы вызывать сигнал void attacked(double _damage) из атакующего объекта и передавать его в слот void getDamage(double _damage) атакуемого. Это пример, возможно, он выглядит глупо, но суть вопроса в том не земедлит ли такое решение работу игры.
Или, например, диалоговая система. Я бы подгружал диалоги из XML QDomDocument'oм и хранил бы варианты в QMap или QVector, а при выборе варианта отсылал бы сигнал с индексом варианта. Что-то такое. Дело в том, что я слышал негативные отзывы о быстродействии Qt (особенно сигналы-слоты) взамен на удобство программиста. И хотел бы узнать так ли это на самом деле.
IvanFaQerstein: Да, сигналы обрабатываются не мгновенно (хотя можно сделать DirectConnect, но по сути это будет просто вызов функции, что сводит смысл использования Qt ради сигналов к нулю. Вообще в c++11 появился какой-то свой вменяемый механизм для межпроцессного взаимодействия.
IvanFaQerstein: Ну и, как я понял, вы хотите сделать что-то наподобии стратегии? Вам тогда и не надо обрабатывать все в реальном времени. Все стратегии (по крайней мере большинство) выполняются пошагово (с маленьким "тиком"). Т.е. грубо говоря вы для себя решили, что у вас в секунду будет 100 "тиков" (например) и соотственно вы 100 раз в секунду последовательно обсчитываете урон по юнитам, их перемещение и т.п.
Если движок делаете для себя, чтобы поиграться, то можете использовать любые библиотеки для своего удобства. Все вопросы по поводу быстро/медленно можно решать только в конкретной ситуации с помощью тестов. Сделайте, например, миллион сигналов и замерьте скорость, если вам этого хватит, значит можете пользоваться. По игровым аспектам вы вряд ли выиграете, Qt не для того предназначен, но, опять-таки, кого это волнует, если вас устраивает?