forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Лифт (http://forum.boolean.name/showthread.php?t=14987)

Gector 25.06.2011 19:06

Лифт
 
Вложений: 1
Привет булка. Я тут написал код передвижения без деления уровня на стены и пол и кое что получилось. Сейчас сделал лифт. Но тут возникли проблемы. Некоторые лифты ведут себя более чем странно. Игрок иногда(самое непонятное почему именно иногда) проваливается через них. А лифт двигающийся по двум осям вообще смещает игрока по горизонтальной оси при движении обратно.
Не могу понять где проблема.
К слову. Реально ли на блице вообще реализовать лифт аля Квейк 3?
В аттаче исходник.

Crayzi 25.06.2011 19:23

Ответ: Лифт
 
Цитата:

Сообщение от Gector (Сообщение 193083)
Привет булка. Я тут написал код передвижения без деления уровня на стены и пол и кое что получилось. Сейчас сделал лифт. Но тут возникли проблемы. Некоторые лифты ведут себя более чем странно. Игрок иногда(самое непонятное почему именно иногда) проваливается через них. А лифт двигающийся по двум осям вообще смещает игрока по горизонтальной оси при движении обратно.
Не могу понять где проблема.
К слову. Реально ли на блице вообще реализовать лифт аля Квейк 3?
В аттаче исходник.

Реально, чё-ж тут нереального, просто надо хорошо себе представить как все должно работать и при каких действиях могут возникнуть "спорные моменты"...
П.с. код не смотрел т. к. в квэйк 3 играл всего пару раз и лифтов там не видел)
П.с.с. Ща позырю код, мож чё прояснится...

Выложи деклс к парсеру...

Gector 25.06.2011 19:30

Ответ: Лифт
 
Вложений: 1
Цитата:

Сообщение от Crayzi (Сообщение 193085)

Реально, чё-ж тут нереального, просто надо хорошо себе представить как все должно работать и при каких действиях могут возникнуть "спорные моменты"...
П.с. код не смотрел т. к. в квэйк 3 играл всего пару раз и лифтов там не видел)
П.с.с. Ща позырю код, мож чё прояснится...

Выложи деклс к парсеру...

А. Да. Забыл). Не экзешник же)
Иными словами такой платформерный лифт.
Я уже даже на бумажке расписывал его движение). Но видать чтото упустил.

Crayzi 25.06.2011 19:49

Ответ: Лифт
 
Закомментируй строчку
PHP код:

;M\ZSpeed Float(ReadSub(S$,4," ")) 

и проверь подъемную платформу, при спуске перестанеш съезжать с нее, наверное надо разделить платформы на 2 типа, подъемные и нет, и менять тип платформы в нужный момент на тот какой нужен для определенного действия... каждый тип платформ обрабатывается по разному...
П.с. Я еще не совсем понял чё дают фнкции с либы))
П.с.с. Еще когда поднимаешся то както по 2 раза дергаешся, видать поднимаешся медленнее платформы и србатывает коллизея чтоль, ну хз короч...
П.с.с.с. Чёт я недогоняю как ты все там организовал)))) (сложновато для моего понимания)

Gector 25.06.2011 20:02

Ответ: Лифт
 
Либа простейший парсер. Юзаю по старинке). Функция в которой она используется читает из имени чайлда его особенность. В примере она отвечает за конвертацию чайлда в лифт. Сама либо тут не причем.
Когда я только написал этот код заметил, что горизонтальная платформа придает игроку скорость но она равна половине скорости платформы. Поэтому я стал ее умножать на 2. Полагаю дело как раз в этом отставании. Видимо слишком радикальным способом от него избавился).
Цитата:

П.с.с.с. Чёт я недогоняю как ты все там организовал)))) (сложновато для моего понимания)
Не мудрено). Чужой код всегда сложней разбирать).

Crayzi 25.06.2011 20:27

Ответ: Лифт
 
Цитата:

Сообщение от Gector (Сообщение 193091)
Не мудрено). Чужой код всегда сложней разбирать).

Ну да, у каждого свои тараканы в голове))

Попробовал бы перемещать игрока вместе с платформой, а не только во время колизеи, тоесть координата платформы х=50, у=80, z=30, а координата игрока сообтевтсвенно (допустим он стоит ровно по центру, так-же в платформу запихнуть Field со значением 0-1, есть там игрок или нет, проколизеился с платформой - отметить что он на ней) равны х=50, y=81, z=30, ну или хз, я могу только варианты предложить)

П.с. Или наоборот, игроку прописывать на какой платформе он находится, так будет чуть проще...

Gector 25.06.2011 20:30

Ответ: Лифт
 
Цитата:

Сообщение от Crayzi (Сообщение 193095)

Ну да, у каждого свои тараканы в голове))

Попробовал бы перемещать игрока вместе с платформой, а не только во время колизеи, тоесть координата платформы х=50, у=80, z=30, а координата игрока сообтевтсвенно (допустим он стоит ровно по центру, так-же в платформу запихнуть Field со значением 0-1, есть там игрок или нет, проколизеился с платформой - отметить что он на ней) равны х=50, y=81, z=30, ну или хз, я могу только варианты предложить)

Пробовал к сожалению).

NitE 25.06.2011 23:41

Ответ: Лифт
 
Цитата:

Type lift
Field x%,y%,z%
Field ent
Field size#
Field spd#
Field maxh
End Type

Function createlift(x,y,z,size,spd#,maxh)
li.lift = New lift
li\x=x
li\y=y
li\z=z
li\ent=CreateCube()

li\size=size
li\size=size
ScaleEntity li\ent,li\size,.1,li\size
PositionEntity li\ent,x,y,z,1
li\spd=spd
li\maxh=maxh

End Function


TheLift = createlift(20,1,20,8,.1,10)

цикл


For li.lift = Each lift
If EntityY(li\ent,1)=>li\maxh
li\spd=-li\spd
EndIf
If EntityY(li\ent,1)=<0
li\spd=-li\spd
EndIf


If EntityX(player,1)<EntityX(li\ent,1)+li\size And EntityX(player,1)>EntityX(li\ent,1)-li\size And EntityZ(player,1)<EntityZ(li\ent,1)+li\size And EntityZ(player,1)>EntityZ(li\ent,1)-li\size

If EntityY(player,1)=> EntityY(li\ent) And EntityY(player,1)=< EntityY(li\ent)+8
;TranslateEntity player,0,li\spd*2,0,1
PositionEntity player,EntityX(player,1),EntityY(li\ent)+8,EntityZ (player,1),1
EndIf

EndIf

TranslateEntity li\ent,0,li\spd,0,1


Next
Попробуй вот так, например. Блицевые коллизии это отстой - не пользуй их.

Crayzi 26.06.2011 00:54

Ответ: Лифт
 
Цитата:

Сообщение от NitE (Сообщение 193128)
Попробуй вот так, например. Блицевые коллизии это отстой - не пользуй их.

+1000, хотел чёт типо этого намутить в его коде, только терпения нехватило))

Venom2 26.06.2011 00:59

Ответ: Лифт
 
NitE
Жесть

Достаточно делать игрока чайлдом платформы когда на ней стоишь. Т.е. когда с ней есть коллизия и вектор нормали (Collision Nx Ny Nz) направлен вверх (ну или не сильно отличается, если платформа неровная)

NitE 26.06.2011 05:28

Ответ: Лифт
 
Моё дело предложить. А блицем уже 3 года как-то не пользуюсь.

PassCall 27.06.2011 15:43

Ответ: Лифт
 
У меня похожая проблема была (с лифтом). Тоесть была плитка и персонаж.
Сначала опускалась плитка, потом персонаж, и проверялось на коллизию. Всё было нормально. Но стоило таким же макаром поднимать плитку - персонаж просачивался сквозь неё. Непонятно.

Ща проверю 1 мысль - сначала поднять плитку и сразу же опусть. Типо 2 шага вперед, и 1 назад.

ВАХ, работает!

Кусок кода:

Код:



plita_speed_x#(1)=Sin(time)*0.1

If plita_speed_x#(1)<=0 Then PositionEntity (plita_m(1),EntityX(plita_m(1))+plita_speed_x#(1),EntityY(plita_m(1))+plita_speed_x#(1)/10,EntityZ(plita_m(1)))

If plita_speed_x#(1)>0 Then
 PositionEntity (plita_m(1),EntityX(plita_m(1)),EntityY(plita_m(1))+plita_speed_x#(1)/10,EntityZ(plita_m(1)))
 PositionEntity (plita_m(1),EntityX(plita_m(1))+plita_speed_x#(1),EntityY(plita_m(1))-plita_speed_x#(1)/5,EntityZ(plita_m(1)))
End If



Часовой пояс GMT +4, время: 14:37.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot