Помогите Вычисление вектора для перемещения на заданную позицию

SoKnight

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
SoKnight_
Скажите, есть ли какая-то формула для вычисления вектора, задав велосити которым, можно было бы переместить энтити на заданную позицию. Варианты ручного подбора вектора исключены, т.к. мне нужно искать вектор автоматически... И может ли такая формула вообще существовать?
 
Код:
Player p = ...;
List<FallingBlock> platform = ...;
Vector toTarget = getDirection(p.getLocation(),p.getLocation().clone().add(0,4,0)).multiply(0.1);
p.setVelocity(toTarget);
for(FallingBlock b : platform) {
    b.setVelocity(toTarget);
}
Сам метод getDirection я скидывал выше.
Ну мне обрезать не нужно, если ты про это. Ну а так, щас попробую)
 
@BDMan, А откуда брать getDirection то? Ну просто Vector toTarget = getDirectory(...); не работает...
 
@BDMan Смотри, а можно вот так?

Код:
Vector playerVector = p.getLocation().clone().add(0, 4, 0).toVector().multiply(0.1);
p.setVelocity(playerVector);
 
@BDMan Смотри, а можно вот так?

Код:
Vector playerVector = p.getLocation().clone().add(0, 4, 0).toVector().multiply(0.1);
p.setVelocity(playerVector);
Лучше так, как я скинул.
@BDMan, А откуда брать getDirection то? Ну просто Vector toTarget = getDirectory(...); не работает...
Я же написал что я его выше скидывал!
Код:
    public static Vector getDirection(final Location location, final Location destination) {
        double x1, y1, z1;
        double x0, y0, z0;

        x1 = destination.getX();
        y1 = destination.getY();
        z1 = destination.getZ();

        x0 = location.getX();
        y0 = location.getY();
        z0 = location.getZ();

        return new Vector(x1 - x0, y1 - y0, z1 - z0);
    }
ВОТ ОН!
 
@BDMan Чёт не работает... Вот код:
Код:
if(withPlayer == true) {
            p.setGravity(false);
            p.setMetadata("InElevator", new FixedMetadataValue(EPlus.plugin, elevatorName));
            Vector playerVector = getDirection(p.getLocation(), p.getLocation().clone().add(0,wayDistance,0)).multiply(0.1);
            p.setVelocity(playerVector);
        }
       
        for(int c = 0; c < moveBlocks.size(); c++) {
            FallingBlock b = moveBlocks.get(c);
            Vector blockVector = getDirection(b.getLocation(), b.getLocation().clone().add(0,wayDistance,0)).multiply(0.1);
            moveBlocks.get(c).setVelocity(blockVector);
        }
WayDistance - Кол-во блоков между текущим этажом и целевым
 
@BDMan Чёт не работает... Вот код:
Код:
if(withPlayer == true) {
            p.setGravity(false);
            p.setMetadata("InElevator", new FixedMetadataValue(EPlus.plugin, elevatorName));
            Vector playerVector = getDirection(p.getLocation(), p.getLocation().clone().add(0,wayDistance,0)).multiply(0.1);
            p.setVelocity(playerVector);
        }
     
        for(int c = 0; c < moveBlocks.size(); c++) {
            FallingBlock b = moveBlocks.get(c);
            Vector blockVector = getDirection(b.getLocation(), b.getLocation().clone().add(0,wayDistance,0)).multiply(0.1);
            moveBlocks.get(c).setVelocity(blockVector);
        }
WayDistance - Кол-во блоков между текущим этажом и целевым
Должно работать. Ищи причину, увеличь множитель до 1.
 
Должно работать. Ищи причину, увеличь множитель до 1.
Ну я почти всё починил, но... Блоки и игрок всё равно улетают выше, чем нужно. Если что у игрока и у блоков отключена гравитация.
 
@BDMan Слушай, а можно ли как-то убить эти fallingBlock'и? Просто сейчас я их просто телепортирую "в космос"...
 
Юзать арморстенд и шелкера. Никуда никого телепортировать в космос не придется. Игрок на них сам поднимется и сможет двигаться и прыгать во время движения лифта.
 
Последнее редактирование:
Юзать арморстенд и шелкера. Никуда никого телепортировать в космос не придется. Игрок на них сам поднимется и сможет двигаться и прыгать во время движения лифта.
Да я видел твоё сообщение в дискорде про этот лифт, не хочу я так)))
+ Такое передвижение выглядит дёрганым. Мне лучше пожертвовать стабильностью, чем плавностью)
 
Да я видел твоё сообщение в дискорде про этот лифт, не хочу я так)))
+ Такое передвижение выглядит дёрганым. Мне лучше пожертвовать стабильностью, чем плавностью)
Ну смотря как сделать. Тот просто не очень качественно сделан.
А твое говно и лифтом не назвать, игрок будет как привязанный.
 
Последнее редактирование:
Ну смотря как сделать. Тот просто не очень качественно сделан.
А твое говно и лифтом не назвать, игрок будет как привязанный.
Ты думаешь, что так сложно сделать "лифт", используя цикл телепортаций? Это никому не интересно, это может сделать блен каждый, а вот плавный лифт - нет... Да и тебе так важно двигаться, когда перемещение занимает секунду-две в любом случае?
 
Назад
Верх