Сменить location но оставить Direction

  • Автор темы Автор темы ilya50
  • Дата начала Дата начала

ilya50

Активный участник
Пользователь
Баллы
76
Всем привет, как сменить стартовый location, но так чтобы потом можно было проитерировать Direction от него, те чтобы смок падал в прицел игрока?
direction.png upload_2019-2-28_23-47-12.png
 
Норм тебе каждый раз в цикле получать вектор взгляда?)
Ты оч глупо оформил свой вопрос, насколько я понял тебе нужно чтобы линия из частичек была от точки выше точки взгляда на блок и заканчивалась блоком на который смотрит игрок, тогда тебе нужно не по вектору взгляда игрока двигать локацию, а по вектору от этой точки до того самого блока. Берешь разность векторов, вектор с координатами блока, куда смотрит игрок минус вектор точки над его головой.
 
А можно поподробнее какое location и какой вектор ? Мне нужно сменить скажем так точку взгляда игрока чтобы дым падал не от глаз игрока, а например от уровня рук. Всё что я пока придумал
upload_2019-3-2_17-30-41.png
[\SPOILER]
 
А можно поподробнее какое location и какой вектор ? Мне нужно сменить скажем так точку взгляда игрока чтобы дым падал не от глаз игрока, а например от уровня рук. Всё что я пока придумал
Убери свой getViewLocation (он у тебя даже неправильно написан и некорректно будет работать) и используй player#getTargetBlock.
Ну и у Location есть методы add/substract, бред придумал с этими offset-ами.
 
Убери свой getViewLocation (он у тебя даже неправильно написан и некорректно будет работать) и используй player#getTargetBlock.
Ну и у Location есть методы add/substract, бред придумал с этими offset-ами.
Мне нужно смок заспавнить как на фото, но чтобы он спавнился не из моих глаз, а из другого места, но и прилетал точно в прицел. getTargetBlock возвращает координаты блока, а мне нужна точная точка
 
Мне нужно смок заспавнить как на фото, но чтобы он спавнился не из моих глаз, а из другого места, но и прилетал точно в прицел. getTargetBlock возвращает координаты блока, а мне нужна точная точка
Тогда двигай от этой начальной точки по 0.1 блока к примеру, пока не будет столкновения с чем-то, и запоминай последнюю локацию. После вычти вектор локации откуда хочешь запустить и получишь вектор по которому нужно двигаться.
 
Тогда двигай от этой начальной точки по 0.1 блока к примеру, пока не будет столкновения с чем-то, и запоминай последнюю локацию. После вычти вектор локации откуда хочешь запустить и получишь вектор по которому нужно двигаться.
Так я ведь скинул код сверху который это делает -_-
 
Так я ведь скинул код сверху который это делает -_-
Нет, твой код двигается по вектору энтити, очевидно это не будет работать корректно, тебе надо нормализовать и умножать его на 0.1 или еще какое-то значение в зависимости от точности необходимого тебе.
+ не нужно каждый раз брать блок и проверять, проверяй только если изменились целочисленные координаты.

Если у тебя расстояния в пределах 100 блоков, то будет эффективней получать player#getTargetBlock и уже расчитать в какой именно точке вектор взгляда игрока попадает в этот блок.
 
А можно поподробнее какое location и какой вектор ? Мне нужно сменить скажем так точку взгляда игрока чтобы дым падал не от глаз игрока, а например от уровня рук. Всё что я пока придумал
Примерно так. getLocation локация ног. Поднимаем на 1 повыше.
player.getLocation().add(new Vector(0,1,0));
getDirection получаем направление взгляда. multiply(m) двигаемся вперед по направлению взгляда.
 
Примерно так. getLocation локация ног. Поднимаем на 1 повыше.
player.getLocation().add(new Vector(0,1,0));
getDirection получаем направление взгляда. multiply(m) двигаемся вперед по направлению взгляда.
Я уже оставлю то что я скидывал сверху, ибо оно работает, а вот этот вот вариант не особо
Безымянный.png
 
Я уже оставлю то что я скидывал сверху, ибо оно работает, а вот этот вот вариант не особо
Посмотреть вложение 53299
Вот на демку.
Код:
public class SpawnParticle extends BukkitRunnable {
    Player player;
    Location location;
    int i = 0;

    SpawnParticle(Player player) {
        this.player = player;
        this.location = player.getLocation().clone().add(new Vector(0,1.5,0));
    }

    @Override
    public void run() {
        i++;
        for(int x = 0;x<5;x++) {
            sp(player, location.add(location.getDirection().multiply(1)));
        }
        if(i==30)  {
            this.cancel();
        }
    }
   
    public void sp(Player player, Location location) {
        player.spawnParticle(Particle.LAVA, location, 1, 1, 1, 1, 1);
    }
}
 
Я уже оставлю то что я скидывал сверху, ибо оно работает, а вот этот вот вариант не особо
Посмотреть вложение 53299
Ну ты мб нерабочий код кинешь, чтобы тебе сказали, что не так?) То, что ты скидывал неточно, почти тоже самое, что и корды блока брать считай
 
Назад
Верх