Задать вопрос
  • Есть дизайн игры, есть иконки и кнопки, как и кто это должен делать?

    maaGames
    @maaGames
    Артем Масиков, спрайтшит большая картинка, в которой расположено куча маленьких картинок. Когда в программе задано, то нужно взять фрагмент с координатой x:0, y:0 и размером 30 на 30 пикселей, то, из-за билинейной фильтрации, может захватиться 31 пиксель. Если 31 пиксель отличается цветом от 30 пиксела, то появляется видимый артефакт.
    Если же каждая картинка/иконка в отдельном файле, то непонятно, откуда появляются эти дефекты.
  • Почему не работает сложение?

    maaGames
    @maaGames
    Данил Флигинский, Стало "норм" для формулы "1 / (i * 3) ", но не для "1/4".
    Почитай про явное и неявное приведение типов.
  • Почему вычисление треугольной матрицы методом Гаусса-Жордана работает через раз?

    maaGames
    @maaGames
    mtrx[str-1][col] != 0
    И не сравнивать на равенство нулю, вместо этого брать модуль и сравнивать с маленьким числом, обозначающим погрешность. Например: abs(mtrx[str-1][col] > 0.001), для погрешности в 1/1000.
  • C++ значение типа нельзя использовать для инициализации сущности типа?

    maaGames
    @maaGames
    SkyCrusher, Не нужн оникакое приведение типа, нужно убрать амперстанд из строчки "Base *b = &Root;"
    Амперстанд тут был бы нужен если бы требовался указатель на указатель:
    Base ** base = &Root;
  • Можно ли в игре создать объект со случайными и зашифрованными координатами?

    maaGames
    @maaGames
    Станислав, Лучше старфорс, чем привязка к серверу... Типа "в челюсть или поддых". Или про два стула...
  • Почему в cout ограничено кол-во вводимых символов?

    maaGames
    @maaGames
    rinaz22, ТОгда попробуй так:
    cin.clear();
    fflush(stdin);

    Возможно, хватит clear
  • Почему в cout ограничено кол-во вводимых символов?

    maaGames
    @maaGames
    rinaz22, Это потому что в буфере оставался "мусор" с прошлого ввода-вывода. Попробуй перед cin сделать cin.flush().
  • Как правильно использовать anonymous namespace?

    maaGames
    @maaGames
    ned_as, Анонимные пространства имён удобно использовать в cpp файлах, чтобы исключить возможность доступа к типам из других файлов. Например в любом файле можно сделать предварительное объявление вида "namespace a{ class F; }" и создавать указатель на F. При этом невозможно сделать объявление типа "struct ex" или foo. Т.е. эту функцию foo может вызвать ТОЛЬКО код, реализованный в ЭТОМ файле и невозможно вызвать откуда-то ещё, потмоу что невозможно написать прототип этой функции в других файлах.
  • Корректное использование poll recv?

    maaGames
    @maaGames Автор вопроса
    res2001, В данный помент соединение 1 к 1, но потом будет ещё одно приложение, посылающее единичные собщения, но там соединение будет разрываться сразу после подключения и пересылки данных, поэтому будет в синхронном режиме работать и select не понадобится.
    Сперва сделал чтение-запись через один порт, но сейчас сделано через два порта, в один порт сервер пишет из второго читает, а клиент наоборот. Это для простоты отладки, чтобы случайно данные не портить, потом хочу на один порт поменять.
    Спасибо, кое что прояснилось!
    И ещё вопрос вдогонку: при использовании неблокирующего сокета, будет ли функция accept ждать подключения или тоже сразу вернёт управление и её над в цикле крутить? И connect тоже в цикле крутить?
  • Корректное использование poll recv?

    maaGames
    @maaGames Автор вопроса
    Я уже передаю сотни мегабайт, полёт нормальный. С сокетами работаю через Poco и напрямую с буферами не общаюсь, а использую классы-обёртки, реализующие интерфейс std::stream. Просто по Poco никаких сложных примеров не нашёл и обратно читаю по С сокетам, чтобы разобраться.
    Чтение-запись выполняется в отдельном потоке, поэтому настоящий асинхронный код мне не особо нужен, т.е. я могу ждать в recv хоть сколько, если это в принципе допустимо сокетами.

    Т.е. при испоьзовании блокирующих сокетов можно вообще без poll/select обойтись и сразу вызывать recv и в ней сидеть и ждать?
  • Каким методом можно сопоставить координаты нажатия сенсора и кнопок в интерфейсе ПО?

    maaGames
    @maaGames
    Optimist, Визуальное и програмное разделение кнопок это немного разное. Т.е. можно сделать визуальное разделение, но нажатия проверять вплотную, можно наоборот, можно и визуально и программно с отступом проверять.
    Я всё-таки советую програмно делать отступ внутрь кнопки и какое-то время понаблюдать, пропадут ли ложные срабатывания. Т.е. чтобы понять, ошибки это пользователей или аппаратная проблема с экраном или хабом, как выше пример написали. И отступ внутрь кнопки сделать не сложно должно быть, 4 числа отнять даже эмбедед справится.
  • Клиент-серверное приложение?

    maaGames
    @maaGames Автор вопроса
    > условно держите соединение то ваш сервер блокируется
    Да, сейчас именно так и работает - блокируется. Чтобы совсе мне блокировать, я вызываю poll с таймером и в цикле. Вроде как если заменить poll на select с массивом сокетов, то можно слушать сразу несколько сокетов.
    Пока только начал читать книжки и ничего не понятно, но, похоже, мне нужно устанавливать логическое соединение с каждым клиентом, потому что нужно двустороннее взаимодейсткие (как минимум, чтобы пользователь мог отправить запрос на прерывание расчётов). Видимо, открывать-закрывать сокет мне не подойдёт. Или подойдёт, но я ещё не дочитал до того, как именно сделать, чтобы подходило :)
  • Клиент-серверное приложение?

    maaGames
    @maaGames Автор вопроса
    res2001, СУБД усложнит в том смысле, что сейчас данные сразу сериализуются в файл в нужном формате и в качестве результата просто возвращается имя этого файла. С СУБД придётся делать лишние записи и чтение из неё, что при локальной работе не нужно. Делать отдельную версию для сетевого варианта не хочется, поэтому пока что думаем, что сумеем обойтись без СУБД.

    Спасибо. Пока что буду читать и пытаться разобраться в происходящем.
  • Клиент-серверное приложение?

    maaGames
    @maaGames Автор вопроса
    res2001, Пока что читаю Снейдера, всего 300 страниц, может не запутаюсь и что-нибудь пойму... Пока точно понял, что я путаюсь в терминологии и не могу корректно сформулировать диаграму взаимодействия процессов :)
    Хранить сырые сокеты мне в любом случае не подходит, т.к. после запуска Вычислительного процесса у пользователя должна быть возможность не просто закрыть соединение, но и выключить свой ПК. Т.е. результаты сохраняются на сервере до тех пор, пока пользователь не будет готов их получить. Получается, что в процессе расчёта данные о прогрессе могут как отсылатсья, так и не отсылаться и результаты могут отсылаться как сразу, так и через какое-то время.
    Полноценную СУБД решили не подключать, т.к. это сильно усложнит работу в локальном режиме, когда и клиент и сервер на одном ПК, а две разных реализации делать мы не будем. И основным режимом именно работа на одном ПК является, клиент-сервер это менее востребованный функционал на сегодня.
  • Клиент-серверное приложение?

    maaGames
    @maaGames Автор вопроса
    res2001, Но ведь сокет определяется это парой IP:PORT ? С сырым дескриптором кроссплатформенно нельзя работать.
  • Клиент-серверное приложение?

    maaGames
    @maaGames Автор вопроса
    res2001, Сейчас Виндоус7-х64 (и старше) и Линуксы не знаю пока какой версии минимум. Велика вероятность что один из "российских" вариантов из-за санкций. Я серьёзно :(
  • Клиент-серверное приложение?

    maaGames
    @maaGames Автор вопроса
    res2001, Да, я примерно так это себе и представляю. Серверный процесс нужен только для запуска вычислительного процесса и передачи клиенту порта этого процесса. Но не ясно, как они друг друга увидят, ведь порт "случайный" и в роутере не открыт. Т.е. если в вычислительном процессе порт будет пассивным и случайным, то на клиенте нужно делать активный и открывать в роутере, но тогда только один Клиентский процесс может быть запущен. Т.е. пока идут вычисления, клиент может работать с другими расчётными моделями и запустить второй расчёт параллельно, ведь его ПК при этом не загружен расчётами.
  • Клиент-серверное приложение?

    maaGames
    @maaGames Автор вопроса
    Армянское Радио, данные тупо агрегируются в файл :) На локальном ПК файл сразу в нужном месте сохраняется и его не приходится даже передавать, а вот при работе на разных ПК этот файл с результатами расчётов придётся передавать. Как Постгрэс относится к бинарному блоб-объекту размером в десятки гигабайт?
    Вроде как Poco часть проблем с сокетами решает, но обработки разрыва соединения там нет...
  • Клиент-серверное приложение?

    maaGames
    @maaGames Автор вопроса
    Вот с полноценным сокетом у меня проблема, что его же надо в роутере пробрасывать, а админ только порт для сервера пробрасывать должен, а не для каждого запущенного экземпляра. Или я ещё чего-то совсем не понимаю, но без проброса портов не получается соединиться.
  • Клиент-серверное приложение?

    maaGames
    @maaGames Автор вопроса
    Нехватка ресурсов ПК будет решаться покупкой ещё одного ПК и переносом на него части клиентов. Т.е. в этом плане можно проблему игнорировать. Уже сейчас 16 поточный ПК с 64ГБ памяти одним вычислительным процессом забивается на 100% и хочет ещё... Видимо, потом будет какое-то ограничение ресурсов на каждый процесс, но сейчас об этом можно не думать.
    Я немного почитал, всё непонятно, но очень интересно :) Полноценная работа через сокеты на одном ПК с одним клиентом у меня заработала, теперь пытаюсь разобраться, как это всё переделать под работу с несколькими клиентами и сервером на отдельном ПК. Понятно, что всё на порядок сложнее и то, что аработало в простейшем случае теперь и не должно работать. TCP сокеты для двустороннего обмена, на сервер передаются несколько крупных блоков данных (обычно не более гигабайта в сумме) и потом с сервера на клиент передаётся очень много мелких данных в процессе работы и крупные объёмы с результатам ирасчётов, там объём ограничен только объёмом жёсткого диска.