SFML и C++ Уроки \ Разработка игр › Форумы › SFML System, Window и другие вопросы › Слуйчайные баги
В этой теме 5 ответов, 2 участника, последнее обновление Heisenberg 7 года/лет, 4 мес. назад.
-
АвторСообщения
-
Я сделал онлайн игру (Морской бой) на пк. Всё вроде в порядке, но во время теста иногда проскакивали случайные баги. Например: раз в 20 или более игр кликал на клетку, соседнюю с кораблём а отображалось попадание вместо промаха (причём в следующей игре корабли были расставлены точно также и все действия совершены были один в один но уже бага не было); или например при потопление корабля, у игрока, чей корабль потоплен штриховка рисовалась на соседних клетках, а у игрока потопившего – рисовалась штриховка в точке (0, 0), ( такое случайным образом редко проскакивало ).
В общем, мой вопрос в том, как бороться с такими случайными и редкими багами и с чем они могут быть связаны? В качестве сервера пока использую собственный компьютер.
Предоставьте участки подозрительного кода, возможно происходит потеря пакета данных.
Там несколько сотен кода суммарно на сервере и клиенте, которые отвечают за саму игру, и в которых проскальзывают редкие баги. Поэтому думаю скидывать подозрительный код не стоит… хотелось бы узнать из-за чего может быть потеря данных (кроме проблем с провайдером). И почему это происходит настолько редко. Я сегодня весь день тестил, сыграл наверно игр 40+, и такие баги случились всего пару раз.
П.С.
Все пакеты, после работы с ними я чищу, и память на сервере не захламляю (локальные переменные удаляю после работы с ними).
Несколько сотен?
Ого так много!..
Сходите к экстрасенсу.
Ошибка может быть где угодно.Вроде исправил эти случайные баги (по крайней мере за большое количество тестовых игр не один не случился).
Проблему решил следующим образом:
1) Перед всеми подозрительными участками кода (где это не критично) поставил socket.setBlocking(true); (раньше было фолс).
2) После всех подозрительных участков кода поставил socket.setBlocking(false); т.к. для остальных участков иначе создавались проблемы иногда.
Там действительно терялась иногда часть данных именно при получении их клиентом (на сервере все нормально было).
Отлично!
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.