Созданные ответы форума
-
АвторСообщения
-
Тебе нужно засекать время которое проходит между рендерингом изображения. Умножая это время на скорость ты получаешь расстояние пройденное персонажем между двумя кадрами.
Они пишут там sfe, потому что это пространство имен библиотеки sfeMovie, основанной на SFML. Данная библиотека позволяет проигрывать видео. Вот сслыка на ее официальный сайт и github
25.02.2016 в 01:01 в ответ на: Подключение SFML 2.3.2 к Qt для разработки приложений под Android (Windows 7) #3247+2Редактор зачем то оборачивает ссылки в коде из за чего команда с git корявится правильно вот так:
git clone https://github.com/SFML/SFML.git SFMLAlex, если у тебя ругается вот на такого типа строки: std::vector<sf::Rect<int>>, и ты используешь не с++11, то я знаю что у тебя за ошибка.
Нужно писать вот так: std::vector<sf::Rect<int> >, то есть ставить пробел между закрывающимися угловыми скобками.25.02.2016 в 00:42 в ответ на: Подключение SFML 2.3.2 к Qt для разработки приложений под Android (Windows 7) #3245+2Скачиваешь:
- CMake
- Git
- Android SDK
- Android NDK
- Apache Ant
Делаешь так чтобы из командной строки/терминала до этого всего можно было достучаться. В случае с windows прописываешь в переменную окружения PATH пути до следующих директорий:
- [Path to CMake]/bin
- [Path to Git]/bin
- [Path to SDK]/tools
- [Path to SDK]/platform-tools
- [Path to NDK]
- [Path to ANT]/bin
В случае с linux тоже можно прописать, но в большинстве случаев не имеет значение поскольку все ставиться в /usr/bin и так доступно в консоли (думаю линуксойдам вообще не стоит объяснять ибо они и так все понимают, без моих корявых объяснений)
Дальше открываем терминал переходим в папочку где не жалко гадить и делаем
Shell1git clone <a href="https://github.com/SFML/SFML.git" rel="nofollow">https://github.com/SFML/SFML.git</a> SFMLДля тех кто не знаком с git, данной командой мы клонировали репозиторий с SFML себе на компьютер в папочку SFML.
Дальше нам нужно собрать библиотеку SFML для компиляторов android. Для удобства в директории (папочке ^_^) SFML создадим поддиректорию builds. В linux это происходило бы вот так:
Shell12mkdir -p SFML/builds/armeabicd SFML/builds/armeabiКак это делается в windows, я уже если честно не помню, но кажется точно также.
Собственно, если внимательно присмотреться то я создал не только директорию builds, но еще и armeabi. Сделано это потому что в данный момент существует несколько основных платформ на которых работает android: arm, mips, x86 и т.д. Под этот зверинец существует несколько компиляторов android, свой для каждой платформы. Соответственно и библиотеку нужно собирать для всех этих платформ. Но в качестве тестовой сборки сделаем только для одной самой распространенной.
Дальше нужно сгенерировать make файлы для этого воспользуемся утилитой cmake со следующими параметрами:
Shell1cmake -DANDROID_ABI=armeabi -DCMAKE_TOOLCHAIN_FILE=../../cmake/toolchains/android.toolchain.cmake ../..Если генерация прошла успешно… Кого я обманываю, конечно она скорее всего закончилась не удачно. Ну что же здесь я могу только посоветовать внимательно читать вывод cmake и ставить необходимые зависимости. Если что то не получается, то ответ скорее всего найдется в гугле.
Если генерация наконец то прошла успешно – поздравляю можете приступать к сборке.
Shell1makeДля ускорения сборки можно воспользоваться многоядерностью: добавьте параметр -j и число ядер процессора + 1. У меня
Shell1make -j 5Если вы используете visual studia, то у вас нет утилиты make. Ее аналог в visul studia кажется nmake (никогда не был приверженцем visual studia)
После окончания сборки в директории lib будет собранная библиотека.
Ибо уже поздно, а мне завтра вставать на работу и вообще уже очень лениво, то продолжение следует… Если конечно, кто то вообще сможет разобраться в моих пояснениях и дойти до этого этапа =D
24.02.2016 в 23:31 в ответ на: Подключение SFML 2.3.2 к Qt для разработки приложений под Android (Windows 7) #3241Heisenberg, если что я собрал пример, который дается для android и на этом мой запал как то по угас. Уж больно заморочено в андроиде все их файлы манифеста, активити и прочей лабуды.
Sinsinmin, здравствуй.
Я использовал алгоритм А* для нахождения оптимального решения для игры в обобщенные пятнашки. Не думаю, что тебе это чем то поможет, но вот ссылка: github.com/RazorNd/BarleyBreak
Кстати, твои картинки не отражают сути этих алгоритмов. Используя эти алгоритмы мы находим самый короткий путь или один из самых коротких путей, если есть два пути с одинаковым расстоянием. Так что найденный путь будет или одинаковым или равным по расстоянию.
tyman, давали бы уж тогда сразу ссылку на конкретную статью
Павел, сделали бы вы стили для ссылок отличающимся от основного текста сообщения.
mypmyp, в данном случае следует поступать точно также как и в случае, если мы хотим передавать в STL потоки свои классы, а именно нужно перегрузить операторы помещения и изъятия из потока данных (На самом деле скорее оператор побитового сдвига, но кто мы такие чтобы спорить с создателями STL? =D)
И так что нам нужно чтобы все это приготовить?
Ну что же начнем с класса который мы собираемся передавать в пакет. В качестве подопытного возьмем какой нибудь простенький класс
C++12345678910111213class SimpleClass{int _x,_y;public:SimpleClass(): _x(0), _y(0){}SimpleClass(int x, int y): _x(x), _y(y){}int x() const;void setX(int x);int y() const;void setY(int y);};Дальше самое вкусное: перегрузим для него наши операторы:
C++12345678910111213sf::Packet& operator << (sf::Packet &packet, const SimpleClass &yourClass){return packet << yourClass.x() << yourClass.y();}sf::Packet& operator >> (sf::Packet &packet, SimpleClass &yourClass){int x,y;packet >> x >> y;yourClass.setX(x);yourClass.setY(y);return packet;}Вся магия до не возможности проста: мы просто поочередно запихиваем все поля класса в пакет, поскольку перегрузка данной функции для отдельных полей класса у нас есть (в нашем случае для int). В случае если ваш класс содержит другие классы, то нужно перегрузить данные методы и для этих классов.
Распаковка пакета происходит точно также, как и упаковка за исключением смены оператора левого побитового сдвига на правый. © КэпЧто же и осталось последнее – это посмотреть как это все будет использоваться.
C++123456sf::Packet packet;SimpleClass yourClass;packet << yourClass;...packet >> yourClass;Как видно использование ни чем не отличается от стандартных типов данных.
P.s.: спасибо, что терпели очередной выпуск программной кулинарии от RazorNd
Пользуясь UDP не забывайте проверять пакеты на максимально возможный размер MaxDatagramSize
mypmyp, не посмотрел, что вы UDP сокеты используете. Тогда все еще проще, перейдите в не блокирующий режим udpSocket.setBlocking(false);
mypmyp, в данном случае тебе нужно использовать sf::SocketSelector. Добавляешь в него сокеты, а затем проверяешь методом isReady, если возвращают true => в сокет была записана информация. Вот пример из документации:
C++1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253// Create a socket to listen to new connectionssf::TcpListener listener;listener.listen(55001);// Create a list to store the future clientsstd::list<sf::TcpSocket*> clients;// Create a selectorsf::SocketSelector selector;// Add the listener to the selectorselector.add(listener);// Endless loop that waits for new connectionswhile (running){// Make the selector wait for data on any socketif (selector.wait()){// Test the listenerif (selector.isReady(listener)){// The listener is ready: there is a pending connectionsf::TcpSocket* client = new sf::TcpSocket;if (listener.accept(*client) == sf::Socket::Done){// Add the new client to the clients listclients.push_back(client);// Add the new client to the selector so that we will// be notified when he sends somethingselector.add(*client);}else{// Error, we won't get a new connection, delete the socketdelete client;}}else{// The listener socket is not ready, test all other sockets (the clients)for (std::list<sf::TcpSocket*>::iterator it = clients.begin(); it != clients.end(); ++it){sf::TcpSocket& client = **it;if (selector.isReady(client)){// The client has sent some data, we can receive itsf::Packet packet;if (client.receive(packet) == sf::Socket::Done){...}}}}}}Шаблонный класс вектора std::vector должен хранить указатели на TItesm, в противном случае у тебя происходит копирование объекта в результате чего все поля не базового класса усекаются.
Подожди, опиши все действия, которые ты вообще совершал. Попробуем установить проблему, чтобы люди столкнувшиеся с подобной проблемой меньше мучилась.
clang 3.5. А какую версию ты скачал SFML? Случайно не 64-битную?
-
АвторСообщения