Я делаю 2d-игру в libgdx, и мне хотелось бы знать, какой стандартный способ перемещения (перевод между двумя известными точками) на экране.Анимационный перевод между двумя фиксированными точками (Libgdx)
Нажав кнопку, я пытаюсь оживить диагональное перемещение спрайта между двумя точками. Я знаю координаты x и y начальной и конечной точки. Однако я не могу понять математику, которая определяет, где текстура должна быть между каждым вызовом для рендеринга. На данный момент мой алгоритм вроде как:
textureProperty = new TextureProperty();
firstPtX = textureProperty.currentLocationX
firstPtY = textureProperty.currentLocationY
nextPtX = textureProperty.getNextLocationX()
nextPtX = textureProperty.getNextLocationX()
diffX = nextPtX - firstPtX
diffY = nextPtY - firstPtY
deltaX = diffX/speedFactor // Arbitrary, controlls speed of the translation
deltaX = diffX/speedFactor
renderLocX = textureProperty.renderLocX()
renderLocY = textureProperty.renderLocY()
if(textureProperty.getFirstPoint() != textureProperty.getNextPoint()){
animating = true
}
if (animating) {
newLocationX = renderLocX + deltaX
newLocationY = renderLocY + deltaY
textureProperty.setRenderPoint(renderLocX, renderLocY)
}
if (textureProperty.getRenderPoint() == textureProperty.getNextPoint()){
animating = false
textureProperty.setFirstPoint(textureProperty.getNextPoint())
}
batch.draw(texture, textureProperty.renderLocX(), textureProperty.renderLocY())
Однако, я могу предвидеть несколько проблем с этим кодом. 1) Поскольку пиксели являются целыми числами, если я делю это число на то, что не идет равномерно, оно будет округлено. 2) в результате числа 1 он пропустит цель.
Также, когда я тестирую анимацию, объекты, перемещающиеся из точки 1, пропускают длинный снимок, что предполагает, что что-то может быть неправильно с моей математикой.
Вот что я имею в виду графически:
Фактический результат:
Несомненно, это стандартная проблема. Я приветствую любые предложения.