Обнаружение ложного столкновения SFML [закрыто] ⇐ C++
Обнаружение ложного столкновения SFML [закрыто]
Я пытался создать игру в стиле платформера, и эта ошибка возникла с тех пор, как я в последний раз реализовал гравитацию.
скорость = sf::Vector2f(направление * СКОРОСТЬ); скорость.y += 600.f; // сила тяжести rect.move(скорость * deltaTime); Итак, детектор столкновений обнаруживает горизонтальное столкновение после того, как я увеличиваю его скорость по оси Y. Это сценарий столкновения, который я использую:
sf::Vector2f thisPosition = rect.getPosition(); sf::Vector2f thisHalfSize = rect.getSize() / 2.0f; sf::Vector2fotherPosition =other.rect.getPosition(); sf::Vector2fotherHalfSize =other.rect.getSize()/2.0f; float deltaX = OtherPosition.x - thisPosition.x; float deltaY = OtherPosition.y - thisPosition.y; float перекрытиеX = abs(deltaX) - (thisHalfSize.x +otherHalfSize.x); float перекрытиеY = abs(deltaY) - (thisHalfSize.y +otherHalfSize.y); if (overlapX < 0,0f && перекрытиеY < 0,0f) { если (перекрытиеX > перекрытиеY) { если (deltaX < 0,0f) { rect.move(-overlapX + 0,5f, 0,0f); направление = sf::Vector2f(1.f, 0.f); } еще { rect.move(перекрытиеX - 0,5f, 0,0f); направление = sf::Vector2f(-1.f, 0.f); } } еще { если (дельтаY < 0,0f) { rect.move(0.0f, -overlapY + 0.5f); направление = sf::Vector2f(0.f, 1.f); } еще { rect.move(0.0f, перекрытиеY - 0.5f); направление = sf::Vector2f(0.f, -1.f); } } вернуть истину; } вернуть ложь; Когда я изменил 300.f в качестве скорости, все работало нормально, но чем выше, тем больше игрок застревает в земле и не может двигаться. Я даже попробовал добавить небольшое смещение к перекрытию столкновений, но это тоже не сработало.
Я пытался создать игру в стиле платформера, и эта ошибка возникла с тех пор, как я в последний раз реализовал гравитацию.
скорость = sf::Vector2f(направление * СКОРОСТЬ); скорость.y += 600.f; // сила тяжести rect.move(скорость * deltaTime); Итак, детектор столкновений обнаруживает горизонтальное столкновение после того, как я увеличиваю его скорость по оси Y. Это сценарий столкновения, который я использую:
sf::Vector2f thisPosition = rect.getPosition(); sf::Vector2f thisHalfSize = rect.getSize() / 2.0f; sf::Vector2fotherPosition =other.rect.getPosition(); sf::Vector2fotherHalfSize =other.rect.getSize()/2.0f; float deltaX = OtherPosition.x - thisPosition.x; float deltaY = OtherPosition.y - thisPosition.y; float перекрытиеX = abs(deltaX) - (thisHalfSize.x +otherHalfSize.x); float перекрытиеY = abs(deltaY) - (thisHalfSize.y +otherHalfSize.y); if (overlapX < 0,0f && перекрытиеY < 0,0f) { если (перекрытиеX > перекрытиеY) { если (deltaX < 0,0f) { rect.move(-overlapX + 0,5f, 0,0f); направление = sf::Vector2f(1.f, 0.f); } еще { rect.move(перекрытиеX - 0,5f, 0,0f); направление = sf::Vector2f(-1.f, 0.f); } } еще { если (дельтаY < 0,0f) { rect.move(0.0f, -overlapY + 0.5f); направление = sf::Vector2f(0.f, 1.f); } еще { rect.move(0.0f, перекрытиеY - 0.5f); направление = sf::Vector2f(0.f, -1.f); } } вернуть истину; } вернуть ложь; Когда я изменил 300.f в качестве скорости, все работало нормально, но чем выше, тем больше игрок застревает в земле и не может двигаться. Я даже попробовал добавить небольшое смещение к перекрытию столкновений, но это тоже не сработало.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Rust-эквивалент hardware_destructive_interference_size в C++, чтобы избежать ложного обмена
Anonymous » » в форуме C++ - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему эффект ложного разделения очевиден только для атомарных значений? [дубликат]
Anonymous » » в форуме C++ - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-