Заставить объекты перемещаться по нарисованному пути (C++)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Заставить объекты перемещаться по нарисованному пути (C++)

Сообщение Anonymous »

Я программирую игру, в которой есть функция, позволяющая игроку рисовать путь. И этот путь будет использоваться для навигации по объекту и перемещения по нему. У меня проблема со скоростью объекта. Если игроки будут перемещать мышь так быстро, это увеличит скорость перемещения объекта, а если они будут перемещать мышь медленно, то она будет медленной. У меня постоянная скорость для всех объектов, так что я не знаю, что здесь происходит. Кто-нибудь знает об этом? Есть ли какое-нибудь ключевое слово, которое мне следует искать?

Код: Выделить всё

void ControlSystem::MoveAlongPath(const float& elapsedTime)
{
if (!startMovement || selectedObject == nullptr || objectPath.empty() || pathIndex >= objectPath.size())
{
return;
}
auto banGame = BanGame::Get();
VECTOR2 currentPos = objectPath[pathIndex];
VECTOR2 nextPos = objectPath[pathIndex + 1];
VECTOR2 direction = nextPos - currentPos;
float distance = BanGame::Get()->Length(direction);

float t1 = speed * elapsedTime / distance;
VECTOR2 newPos = MathUltils::Lerp(currentPos, nextPos, t1);

float distanceToNextPoint = BanGame::Get()->Length(nextPos - newPos);
if (distanceToNextPoint = objectPath.size() - 1) {
selectedObject->SetPosition(objectPath.back());
startMovement = false;
return;
}
else
{
selectedObject->SetPosition(newPos);
}

}

float t2 = rotationSpeed * elapsedTime*0.1f;
if (t2 > 1.0f) t2 = 1.0f;
//TODO rotate object
/*VECTOR2 norDirection = BanGame::Get()->Normalize(direction);
float targetAngle = banGame->AngleBetweenVectorReturnRadian(nextPos, currentPos);
float currentAngle = banGame->ConvertToDegrees(selectedObject->GetAngle().z);
float angleDifference = banGame->ConvertToDegrees(targetAngle - currentAngle);
float interpolatedAngle = MathUltils::Lerp(currentAngle, currentAngle + angleDifference, t2);
selectedObject->SetAngle(VECTOR3(0, 0, banGame->ConvertToDegrees(interpolatedAngle)));*/

for (size_t i = 1; i < dragPoints.size(); ++i) {
banGame->DrawLine(dragPoints[i - 1], dragPoints[i], 5.0f, VECTOR3(0, 0, 1), COLOR::BLUE);
}
}
Вот мой код. Я разрабатываю свой собственный движок, но вы можете ожидать, что он будет работать так же, как в Unity Engine

Подробнее здесь: https://stackoverflow.com/questions/792 ... awn-path-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»