Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 25.06.2011, 19:06   #1
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Лифт

Привет булка. Я тут написал код передвижения без деления уровня на стены и пол и кое что получилось. Сейчас сделал лифт. Но тут возникли проблемы. Некоторые лифты ведут себя более чем странно. Игрок иногда(самое непонятное почему именно иногда) проваливается через них. А лифт двигающийся по двум осям вообще смещает игрока по горизонтальной оси при движении обратно.
Не могу понять где проблема.
К слову. Реально ли на блице вообще реализовать лифт аля Квейк 3?
В аттаче исходник.
Вложения
Тип файла: rar Short Version.rar (71.4 Кб, 441 просмотров)
__________________
Ибо как сказал Бгдн:
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Geсtor (30.06.2011)
Старый 25.06.2011, 19:23   #2
Crayzi
ПроЭктировщик
 
Регистрация: 26.06.2007
Сообщений: 194
Написано 21 полезных сообщений
(для 25 пользователей)
Ответ: Лифт

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

Выложи деклс к парсеру...
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Gector (25.06.2011)
Старый 25.06.2011, 19:30   #3
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: Лифт

Сообщение от Crayzi Посмотреть сообщение

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

Выложи деклс к парсеру...
А. Да. Забыл). Не экзешник же)
Иными словами такой платформерный лифт.
Я уже даже на бумажке расписывал его движение). Но видать чтото упустил.
Вложения
Тип файла: rar parser.rar (169 байт, 440 просмотров)
__________________
Ибо как сказал Бгдн:
(Offline)
 
Ответить с цитированием
Старый 25.06.2011, 19:49   #4
Crayzi
ПроЭктировщик
 
Регистрация: 26.06.2007
Сообщений: 194
Написано 21 полезных сообщений
(для 25 пользователей)
Ответ: Лифт

Закомментируй строчку
;M\ZSpeed Float(ReadSub(S$,4," ")) 
и проверь подъемную платформу, при спуске перестанеш съезжать с нее, наверное надо разделить платформы на 2 типа, подъемные и нет, и менять тип платформы в нужный момент на тот какой нужен для определенного действия... каждый тип платформ обрабатывается по разному...
П.с. Я еще не совсем понял чё дают фнкции с либы))
П.с.с. Еще когда поднимаешся то както по 2 раза дергаешся, видать поднимаешся медленнее платформы и србатывает коллизея чтоль, ну хз короч...
П.с.с.с. Чёт я недогоняю как ты все там организовал)))) (сложновато для моего понимания)
(Offline)
 
Ответить с цитированием
Старый 25.06.2011, 20:02   #5
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: Лифт

Либа простейший парсер. Юзаю по старинке). Функция в которой она используется читает из имени чайлда его особенность. В примере она отвечает за конвертацию чайлда в лифт. Сама либо тут не причем.
Когда я только написал этот код заметил, что горизонтальная платформа придает игроку скорость но она равна половине скорости платформы. Поэтому я стал ее умножать на 2. Полагаю дело как раз в этом отставании. Видимо слишком радикальным способом от него избавился).
П.с.с.с. Чёт я недогоняю как ты все там организовал)))) (сложновато для моего понимания)
Не мудрено). Чужой код всегда сложней разбирать).
__________________
Ибо как сказал Бгдн:
(Offline)
 
Ответить с цитированием
Старый 25.06.2011, 20:27   #6
Crayzi
ПроЭктировщик
 
Регистрация: 26.06.2007
Сообщений: 194
Написано 21 полезных сообщений
(для 25 пользователей)
Ответ: Лифт

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

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

П.с. Или наоборот, игроку прописывать на какой платформе он находится, так будет чуть проще...
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Gector (25.06.2011)
Старый 25.06.2011, 20:30   #7
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: Лифт

Сообщение от Crayzi Посмотреть сообщение

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

Попробовал бы перемещать игрока вместе с платформой, а не только во время колизеи, тоесть координата платформы х=50, у=80, z=30, а координата игрока сообтевтсвенно (допустим он стоит ровно по центру, так-же в платформу запихнуть Field со значением 0-1, есть там игрок или нет, проколизеился с платформой - отметить что он на ней) равны х=50, y=81, z=30, ну или хз, я могу только варианты предложить)
Пробовал к сожалению).
__________________
Ибо как сказал Бгдн:
(Offline)
 
Ответить с цитированием
Старый 25.06.2011, 23:41   #8
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Ответ: Лифт

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
Попробуй вот так, например. Блицевые коллизии это отстой - не пользуй их.
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо NitE за это полезное сообщение:
Angel_Online (06.07.2011), Crayzi (26.06.2011), Gector (25.06.2011)
Старый 26.06.2011, 00:54   #9
Crayzi
ПроЭктировщик
 
Регистрация: 26.06.2007
Сообщений: 194
Написано 21 полезных сообщений
(для 25 пользователей)
Ответ: Лифт

Сообщение от NitE Посмотреть сообщение
Попробуй вот так, например. Блицевые коллизии это отстой - не пользуй их.
+1000, хотел чёт типо этого намутить в его коде, только терпения нехватило))
(Offline)
 
Ответить с цитированием
Старый 26.06.2011, 00:59   #10
Venom2
 
Сообщений: n/a
Ответ: Лифт

NitE
Жесть

Достаточно делать игрока чайлдом платформы когда на ней стоишь. Т.е. когда с ней есть коллизия и вектор нормали (Collision Nx Ny Nz) направлен вверх (ну или не сильно отличается, если платформа неровная)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Randomize (26.06.2011)
Старый 26.06.2011, 05:28   #11
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Ответ: Лифт

Моё дело предложить. А блицем уже 3 года как-то не пользуюсь.
(Offline)
 
Ответить с цитированием
Старый 27.06.2011, 15:43   #12
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Ответ: Лифт

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

Ща проверю 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
__________________
Мечта программиста: запрограммировать процесс программирования.

Всё гениальное - просто.

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Crayzi (27.06.2011)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com