Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
ах как я про это забыл. Речь о взгляде игрока."в право" относительно взгляда игрока или относительно Север/Юг/тд ?
а координатами как нить можно попроще?Берешь направление игрока и потом получаешь в виде EnumFacing (если 1.7 че-т другое).
После крутишь на право и тепехаешь игрока.
Как получить направление - поиск по форуму.
Так это будет округление до точности в 90 градусовEnumFacing
Ну, из моей логике, игрока нельзя телепортировать, если он смотрит на 45 градусов.округление до точности в 90 градусов
final double moveScale = 2D;//множитель расстояния
final double moveAngle = 90;//угол телепортации(90 = право)
EntityPlayer player = event.player;//игрок
Vec3d look = player.getLookVec();//взгляд
Vec3d currentPos = new Vec3d(player.posX, player.posY, player.posZ);
Vec3d extrapolatedPos = new Vec3d(
player.posX + look.x,
player.posY,
player.posZ + look.z);
//полярная система
double dx = extrapolatedPos.x - currentPos.x;
double dz = extrapolatedPos.z - currentPos.z;
double phi = Math.atan2(dz, dx);//угол между игроком и его 'взглядом'
phi += Math.PI / 180 * moveAngle;//поворот
double newX = moveScale * Math.cos(phi);
double newZ = moveScale * Math.sin(phi);
player.setPosition(currentPos.x + newX, currentPos.y + 0.05, currentPos.z + newZ);//телепорт
Прекрасно, но можно куда проще. Прикинув, я понял, что мы перемещаем в плоскости ака 2д. Следовательно можно просто взять вектор взгляда, найти перпендикулярный к нему вектор и, собственно, переместить по этому направлению игрока. Находится он просто - меняешь х и у(у нас x, z) и расставляешь минус в зависимости от направления перпендикуляра. На этом все! Никаких косинусов, вообще.
В самом деле, но в таком случае есть проблема, когда взгляд игрока направлен вниз.расставляешь минус
А вот тут нет. Я избежал эту проблему, применяя ro за константное значение. Т.е. в любом случае игрок куда-то сдвинетсяВ самом деле. Но у тебя та же проблема
О чем я и говорил. Речь шла о повороте строго направо
Не особо понял, что имел в виду жастагот, но я таки нашел ошибку. Поскольку я считаю, что математические ошибки существовать не должны и устранять их нужно любой ценой, несмотря на то, как стара проблема. В общем, дело вот в чем. Представим вектор, направленный вниз. Горизонтальный к нему какой? А никакой, там целая плоскость, количество векторов бесконечно. Следовательно твой способ будет всегда двигать в одну сторону, несмотря на то, как повернут игрок.Я избежал эту проблему, применяя ro за константное значение