• Оптимально ли я сделал управление в 2D платформере?

    @FaulerAffe Автор вопроса
    Я просмотрел почти весь предложенный вами плейлист, но всё равно возникли проблемы. Попробуем перемещать персонажа следующим образом:
    var positionDelta = new Vector2(Input.GetAxisRaw("Horizontal"), 0) * speed * Time.deltaTime;
            playerRigidBody.MovePosition(
                playerRigidBody.position + positionDelta
                );

    В данном случае персонаж будет очень медленно падать, потому что во время каждого вызова FixedUpdate метод MovePosition будет возвращать его на предыдущую координату y. То есть для 2D платформеров такой вариант не очень хорошо подходит.
    Ещё есть вариант делать перемещение через AddForce, выставив у персонажа положительный Linear Drag. В таком случае персонаж не будет бесконечно ускоряться, его скорость остановится на каком-то значении. Проблема этого метода в том, что у персонажа есть разгон, то есть он не моментально набирает указанную скорость. Опять же, для большинства платформеров такой метод не подойдёт.
    И, наконец, вариант с установкой параметра скорости у RigidBody2D:
    float movingDirection = Input.GetAxisRaw("Horizontal");
            playerRigidBody.velocity = new Vector2(movingDirection * speed, playerRigidBody.velocity.y);

    В таком случае на не нужно будет заботиться о зависимости скорости от fps, скорость по x будет набираться мгновенно, а скорость по y не будет сильно снижаться, потому что мы устанавливаем скорость, а не координату. Единственная проблема – на каком-то форуме я прочитал, что из-за использования такого метода персонаж может передвигаться рвано, но я пока что такого не заметил.
  • Для чего нужна двойная ссылка &&?

    @FaulerAffe Автор вопроса
    Mercury13, я сейчас немного другим занят, на самообразование времени очень не хватает, извините. Как только время появится - обязательно продолжу разбираться в теме и вам отвечу.
  • Почему мой запрос выдаёт ошибку?

    @FaulerAffe Автор вопроса
    Вот мне не очень понятно, как работает COUNT. Я понимаю принцип работы первой строки вот так: выбираем id, равные 10, потом группируем их (то есть должны убраться дубликаты), потом уже в этом результате считается количество ненулевых элементов в столбце id. Это верно?
    Как-то сложновато понимать, в каком порядке всё это выполняется. Есть ли правила на этот счёт?
  • Для чего нужна двойная ссылка &&?

    @FaulerAffe Автор вопроса
    Вроде понятно, что если мы видим в списке аргументов функции &&, то мы говорим, что нам этот объект больше не нужен. То есть это имеет смысл использовать только для конструктора переноса, верно? Допустим, вот в таком случае:
    void RvalueTest(std::vector<int>&& vectRvalue)
    {
    	std::vector newVect(vectRvalue);
    	std::cout << "Тут, по идее, ничего никуда не копировалось" << std::endl;
    }
    
    int main()
    {
    	setlocale(LC_ALL, "Russian");
    	std::vector<int> myVect = { 1, 2, 3, 4, 5 };
    	RvalueTest(std::move(myVect));
    	std::cout << "Тут должен быть ноль: " << myVect.size();
    }

    В последней строке должен быть ноль, но выводится 5, почему? Если просто в main'е сделать то же самое, то размер первого вектора будет равен нулю...
  • Для чего нужна двойная ссылка &&?

    @FaulerAffe Автор вопроса
    Евгений Шатунов, а вот этот пример у меня даже не компилируется, ну и ладно. Как я понял - был создан временный объект, мы вернули константную ссылку на его поле, после чего объект сразу же уничтожается, от чего ссылка, с помощью которой мы создали вектор data, стала висячей. Вы хотели сказать, что нельзя возвращать из функции ссылку на временный объект? Не очень понятно, какая разница - возвращать константную ссылку или обычную (именно в вашем примере)?
    Кстати о ссылках на временные объекты:
    class A
    {
    private:
    	int value;
    public:
    	A(int x) { this->value = x; };
    	int& getValue() { return this->value; };
    };
    
    A& getRef()
    {
    	A a(5);
    	return a;
    }
    
    int main()
    {
    	A& m = getRef();
    	std::cout << m.getValue();


    Вот тут всё понятно - выводится мусор, потому что возвращаемый по ссылке объект уже уничтожен.
    А вот тут другая ситуация:
    int& getRef()
    {
    	A a(5);
    	return a.getValue();
    }
    
    int main()
    {
    	int& m = getRef();
    	std::cout << m;
    }


    Тут возвращается ссылка на поле уничтожаемого объекта, а выводится все корректно. Странно
  • Для чего нужна двойная ссылка &&?

    @FaulerAffe Автор вопроса
    Евгений Шатунов, я прогнал у себя ваш пример и у меня отладчик в цикл даже не заходит. Что тут должно вызвать ошибку мне не очень ясно, если честно. Мы возвращаем ссылку на вектор - то есть в цикле мы работаем прямо с тем вектором, который создаётся при создании объекта класса. Такая логика вроде работает, если переписать всё вот таким образом:
    auto vect = Foo{}.GetValues();
    
    for (const auto& value : vect)
    {
    	std::cout << value << std::endl;
    }

    Видимо тут проблема в том, что результат вызова функции никуда не сохраняется.
    Ещё возник вопрос, а есть ли разница между этими вариантами? В обоих случаях c имеет один и тот же адрес.
    #include <iostream>
    int main()
    {
    	int a = 5;
    	int& b = a;
    	int& c = b;
    }

    #include <iostream>
    int main()
    {
    	int a = 5;
    	int& b = a;
    	int& c = a;
    }
  • Какие средства для написания оконных приложений на C++ сейчас актуально учить?

    @FaulerAffe Автор вопроса
    а WPF есть смысл сейчас учить? Я с C# более менее знаком.
  • Не могу создать проект в Qt, что делать?

    @FaulerAffe Автор вопроса
    Drno, установщик качается. Потом я ввел данные своего аккаунта - скачка запрещена с вашего ip
  • Не могу создать проект в Qt, что делать?

    @FaulerAffe Автор вопроса
    Drno, я даже боюсь представить, какая там будет скорость скачки. Если никто не ответит, что делать, то, наверное, так и поступлю.
  • Для чего нужен возврат значения по ссылке?

    @FaulerAffe Автор вопроса
    int& b = func(a);
    Если сделать так, то выводится три одинаковых адреса. Я не очень понимаю, что такое b. По идее это адрес, но записать в него указатель мы не можем, можем только переменную, при этом мы получим полную копию этой переменной – от адреса до значения. То есть получается, если мы хотим сделать так, чтобы новая переменная ссылалась на ту же память, что и уже созданная переменная, то мы ставим &, а если хотим создать копию, но по другому адресу, то не ставим?
  • Как сымитировать правильную скорость выполнения различных сортировок путём usleep?

    @FaulerAffe Автор вопроса
    Alexandroppolus, понял, я просто думал, что алгоритмы с одинаковым порядком роста должны выполняться +- с одинаковой скоростью на более менее больших массивах.
  • Как исправить ошибку EXC_BAD_ACCESS (code=1, address=0x0)?

    @FaulerAffe Автор вопроса
    Огромное спасибо, забуду тогда что такое malloc, видимо он вообще теперь бесполезен.
  • Как двоичный файл в моей программе может изменяться?

    @FaulerAffe Автор вопроса
    galaxy, почему-то сработал этот вариант, сам не понимаю, почему.
  • Как двоичный файл в моей программе может изменяться?

    @FaulerAffe Автор вопроса
    res2001,
    По первому пункту: действительно, проверил через ftell(f) - указатель был дальше, чем нужно. Убрал fseek. Выводилось правильно только из-за того, что там были все нули, сдвиг невозможно было заметить, на самом деле в файле было больше данных, чем нужно. Больше я ничего никуда не записывал, не знаю, как там оказались нули, но это уже и не нужно.
    По второму пункту: Ваш пример явно более правильный, тоже исправил.
    На самом деле проблема была в "wb" (при открытии бинарного файла), нужно было написать "rb". Спасибо!
  • Как завершить процесс, запущенный до подключения к серверу?

    @FaulerAffe Автор вопроса
    спасибо, помогла последняя команда.
  • Как в C++ создать массив, состоящий из разности элементов двух других массивов?

    @FaulerAffe
    Victor Bomberow, "но только тех, что соответствуют положительным элементам массива C". Это, как я понял, и подразумевает, что индексы совпадают. Как вы представляете решение задачи, если неизвестно, какой элемент C проверять?
  • Возможна ли работа с файлами в pascal онлайн?

    @FaulerAffe Автор вопроса
    Большое спасибо, за такую удобную программу даже не жалко заплатить.
  • В какой университет из этих лучше поступить?

    @FaulerAffe Автор вопроса
    Андрей Шубников, в МЭИ на Информатику и Вычислительную технику, бюджет. Поступил туда, потому что после разговора со студентом ВШЭ выяснилось, что скидка - замануха, с которой все слетают к третьему курсу и платят под 500 тысяч рублей в год, а на бюджет переходят 2%. В МФТИ в этом году был такой проходной балл на платное, что я бы там даже за деньги не смог учиться.