Варп работает на активаторе. А тид это тид относительно которого двигать надо. Зачем это сделано я не знаю. Вероятно разработчики дословно скопипастили функционал A_Warp из декора, где он именно так и работает. SetActivator(Camera_TID); Warp(0, ...);
Камера становится на нужные мне координаты, но не следит, постоянно стоит на месте, какие флаги я только не ставил.. Что не так сделал?
пс, скрипт camF запускается скриптом ENTER.. может в этом дело.. если сделать запуск скрипта из камеры, может решит проблему.. буду пробовать В общем и через камеру пробовал скрипт запускать... не следит она за игроком, причем пробовал и A_Warp тоже, скопипастив код из A_Warp что бы наверняка! в вики код работает, т.е. объект следит за врагом.. у меня же нет. в чем беда хз.
Actor CamF 15583
{+NOINTERACTION
States{
Spawn: TNT1 A -1 ACS_Execute(55,0)
}
}
Я уж и не знаю есть ли смысл возиться с этим варп.. Причем что сейчас что в прошлом скрипте не зависимо откуда я беру координаты, если игрока куда-то телепортировать средствами SetActorPosition, камера обновляет свое местоположение.. но все равно не следит, только обновляет.
Может WARP не рассчитан на камеру? т.е. варпом можно двигать что угодно, но кроме камеры или как?..
В этой строчке кода камера просто двигается вместе с игроком по X и Z, влево, или вправо или вверх.. Y не меняется. Этого я и пытаюсь добиться только варп функцией.
Блин. Ну что ты за ересь пишешь. Ты хоть пробовал остановиться и подумать, как оно будет выполняться? Ну вот зачем ты опять игрока варпаешь? Такое ощущение, что выключив мозг правил строки. Извините. Регулярно просто встречаюсь с таким явлением.
script 55 (void) // запускать именем плеера. на всякий случай.
{
int player_TID = ActivatorTID();
if (player_TID == 0) player_TID = UniqueTID();
Thing_ChangeTID(0, player_TID);
SetActivator(1000); // camera_TID
while (true)
{
Warp(0, GetActorX(player_TID)+20.0, GetActorY(player_TID)+40.0, GetActorZ(player_TID)+20.0+H_V, 0, WARPF_WARPINTERPOLATION|WARPF_ABSOLUTEPOSITION|WARPF_NOCHECKPOSITION);
int dx = GetActorX(player_TID)-GetActorX(0);
int dy = GetActorY(player_TID)-GetActorY(0);
int dz = GetActorZ(player_TID)-GetActorZ(0);
ChangeActorAngle(0, VectorAngle(dx, dy), true);
ChangeActorPitch(0, VectorAngle(VectorLength(dx, dy), -dz), true);
Delay(1);
}
}
(если камера отворачивается в другую сторону от игрока, то прикрути к VectorAngle +0.5 или +0.25, в общем до полного совпадения, да)
ZZYZX эх, я наверное не так объяснял То что ты написал, да это слежение т.е. камера всегда направлена на объект.. у меня так камера в магазине работает, но я имел ввиду именно вот это:
т.е. просто добавь этот скрипт, поставь камеру не далеко от игрока и запусти.. Камера двигается за игроком, как бы следит(это я мб не понятно написал просто..) То что ты написал, камера стоит на месте и меняет свой угол, но местоположение не меняет, а надо что бы именно меняло местоположение к примеру по X координате, т.е. работала как аналог SetActorPosition если это возможно, у меня не получилось так сделать.
Моя должна двигаться за игроком и наводиться на него.
Попробуй добавить |WARPF_ABSOLUTEPOSITION|WARPF_NOCHECKPOSITION. Я забыл, что при варпе недостаточно просто указать координаты, нужно ещё уточнить, что это именно координаты, а не оффсет к текущим.
Попробуй добавить |WARPF_ABSOLUTEPOSITION|WARPF_NOCHECKPOSITION. Я забыл, что при варпе недостаточно просто указать координаты, нужно ещё уточнить, что это именно координаты, а не оффсет к текущим.
Спасибо!!! Видимо в этом и была проблема, WARPF_ABSOLUTEPOSITION этот флаг я не добавлял, а именно с ним камера начитает двигаться.. без него стоит на месте.
Только вот камера стала еще хуже работать, т.е. SetActorPosition работал лучше для камеры, с варпом камера еще сильнее отстает, я бы сказал что даже видно как дергается.. пробовал комбинировать флажки, как только не пробовал, шустрее не стало. Но так же есть еще 1 фигня, понятия не имею почему так, примерно 1-2 мин бегания с такой варп камерой, видно что она сильно отстает, но после 1-2 мин, начинает работать просто идеально!!! Что ее заставляет лагать в начале понятия не имею.. Убил процессы связанные с нвидиа експирианс, стало работать хорошо.. что за чудеса. Почему же тогда функции SetActorPosition плевать что там в процессах.. =(
От фпс зависит, полагаю. cl_capfps 1, vid_vsync 1. У варпа интерполяция в анкаппеде, проседания фпс будут заметны.
Добавлено спустя 22 часа 4 минуты 39 секунд:
Эээээ... я не знаю, куда это. Пусть здесь лежит. http://www.mediafire.com/download/xg998xmt9n8d8u5/cyclone.pk3 Запускать под последним г/з, написать в консоли give cygun. Код кривой, фиксить не планирую, написал чуть ли не на скорость за 20 минут увидев это видео. Нужен кто-то, умеющий в математику и могущий объяснить, схренли у меня проекция работает через такую жопу (а именно, имеется плавно нарастающее отклонение с обеих сторон угла в 45 градусов). Она не должна.
ZZYZX просто обалдеть! В теории же и к зажатой altfire можно присобачить этот скрипт?
Я тут неслучайно, у меня беда. Пытаюсь сделать так, чтобы игрок, когда подходил к определенной линии(она фронтально затекстурирована, тэг 111) - она динамично бы исчезала/появлялась у него на глазах, в зависимости от того, на каком расстоянии расположен игрок от линии. Для этого в центр линии я поставил даммиактор с тегом 22.
Вот чё ты творишь? Во-первых, VectorLength(DistZ, VectorLength(DistX, DistY)). Во-вторых, если предыдущая формулировка не устраивает, то можно ещё sqrt(). В-третьих, DistX = -DistX, а не DistX *= -1; так быстрее. И вообще напиши функцию abs(). В-четвёртых, у тебя dist фиксед, а сравниваешь ты с интом. То есть у тебя dist всегда в 65535 раз больше. В-пятых, если у тебя зандронум 2.х, то в вики есть distance:
function int VectorLength3d(int x, int y, int z)
{
int len;
int ang = vectorangle(x,y);
if(((ang+0.125)%0.5) > 0.25) len = fixeddiv(y, sin(ang));
else len = fixeddiv(x, cos(ang));
ang = vectorangle(len, z);
if(((ang+0.125)%0.5) > 0.25) len = fixeddiv(z, sin(ang));
else len = fixeddiv(len, cos(ang));
return len;
}
После этого
int distanceI = VectorLength3d(DistX, DistY, DistZ)>>16; // ну или любая другая вариация на тему
int alpha = 0;
if (distanceI < 255) alpha = 255-distanceI;
TranslucentLine(111, alpha, 0);
Мне просто было стыдно говорить "пожалуйста, напишите за меня код", поэтому я попытался максимум сам сделать :Ш нет, джизидум И, честно говоря, мне процентов на 20 понятно, что тут происходит. Я совсем не понимаю, что за чем писать :[[