Мое разрешение столкновений для гоночной игры сверху вниз не совсем работает

Извините за несчастный английский,

Я работаю над разрешением столкновений в гоночной игре сверху вниз.
Обнаружение столкновения сделано из изображения, которое содержит два цвета (белый — стена, а черный — не стена). Я просто смотрю, находится ли среднее положение плеера (машины) внутри белого цвета на изображении.

эта часть работает нормально.

Когда дело доходит до разрешения, у меня появляются странные ошибки.
Я должен убедиться, что машина останется на трассе и не сможет выбраться из нее.

Мое сломанное решение выглядит так:
1. создать вектор с именем «Расстояние», содержащий вычитание текущей позиции на предыдущую
2. нормализовать вектор расстояния между 0 и 1
3. вычтите этот нормализованный вектор расстояния до текущей позиции, пока игрок не перестанет окрашиваться в белый цвет.
4. отмените скорость игрока (я не планирую так держать)

это звучит хорошо в моей голове, но когда я применяю это, я получаю некоторую ошибку сегментации и иногда некоторую телепортацию.

следующий код написан с использованием библиотеки SFML, и это моя попытка создания коллизии. вызов player.update () в конце только перемещает и вращает автомобиль.

void RacingMode::update(const sf::Time& deltaTime)
{
static sf::Vector2f prevPos(0,0);
static sf::Vector2f currPos(0,0);currPos = sf::Vector2f(player.getPosition().x, player.getPosition().y);

if(raceTrack.getPixelColor(sf::Vector2u(currPos.x, currPos.y)) != sf::Color::Black){

sf::Vector2f dist;
dist.x = currPos.x - prevPos.x;
dist.y = currPos.y - prevPos.y;

dist.x = dist.x / sqrt(dist.x*dist.x + dist.y*dist.y);
dist.y = dist.y / sqrt(dist.x*dist.x + dist.y*dist.y);

sf::Vector2f newPos(0,0);

float i = 0.0;
do{
newPos = currPos - dist*i;
i+= 0.01;
}while(raceTrack.getPixelColor(sf::Vector2u(newPos.x, newPos.y)) != sf::Color::Black);currPos = newPos;
player.setPosition(newPos);
player.setVelocity(0);

}

prevPos = currPos;

player.update(deltaTime);
}

Я был бы признателен всем, кто может указать, как я потерпел неудачу в моей попытке (или может предложить другой способ решения проблемы)

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]