SFML и C++ Уроки \ Разработка игр › Форумы › Логика игр › Стрельба по клику мыши › Ответ в теме: Стрельба по клику мыши
Возможно беда с нормализацией вектора. Когда мышь находится по отношению к спрайту на расстоянии меньше одного юнита может произойти подобное из за того что мы находим скаляр для приведения длинны вектора к 1 юниту.
Попробуй заменить мой метод нормализации на этот
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
float vectorMagnitude(const sf::Vector2f& vector) { return std::sqrt(vector.x * vector.x + vector.y * vector.y); } sf::Vector2f getVectorMovedOrigin(const sf::Vector2f& targetVector, const sf::Vector2f& originVector) { return sf::Vector2f(targetVector - originVector); } sf::Vector2f vectorNormalize(const sf::Vector2f& vector, const sf::Vector2f origin)//1 аргумент - позицию курсора, 2 аргумент - центр спрайта { return vectorNormalize(getVectorMovedOrigin(vector, origin)); } sf::Vector2f vectorNormalize(const sf::Vector2f& vector)//Если вектор уже имеет начало кординат в нужном месте { float magnitude = vectorMagnitude(vector); if (magnitude == 0.0f) return sf::Vector2f(1.0f, 0.0f); float distInv = 1.0f / magnitude; return sf::Vector2f(vector.x * distInv, vector.y * distInv); } |