|
3D-программирование Вопросы, касающиеся программирования 3D мира |
12.02.2011, 18:26
|
#1
|
ПроЭктировщик
Регистрация: 12.02.2011
Сообщений: 131
Написано 23 полезных сообщений (для 52 пользователей)
|
FPS: Проблема с реализацией игрока
Сделал, как в обучающих примерах, т.е. пивот с камерой сверху
Const COLLISION_PLAYER = 1, COLLISION_SCENE = 2
Collisions COLLISION_PLAYER, COLLISION_SCENE, 2, 2
...
scenePlayer = CreatePivot()
sceneCamera = CreateCamera(scenePlayer)
MoveEntity sceneCamera, 0, 3,0
MoveEntity scenePlayer, 0, 1, 0
EntityRadius scenePlayer, 1.5
EntityType scenePlayer, COLLISION_PLAYER
Предположим, что есть лестница. Чтобы игрок по ней взбирался быстрее, т.е. выталкивался обработчиком столкновений, надо увеличить радиус "ног игрока" (scenePlayer). Однако, из-за этого игрок перестает проходить, например в двери (если деревья или обстановку в доме можно расставить по шире, то квадратные двери смотрятся нелепо).
Так же малое значение радиуса позволяет подойти близко к стене и "заглянуть" через нее (это лечится заданием небольшого значения перового параметра в CameraRange).
Что посоветуете сделать?
Подскажите еще, как сделать звук шагов. Простое добавление "воспроизвести звук, если игрок шагнул" на звук шагов не похож.
Последний раз редактировалось Aikon, 12.02.2011 в 19:45.
|
(Offline)
|
|
12.02.2011, 18:29
|
#2
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,358
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: FPS: Проблема с реализацей игрока
уменьшить гравитацию?
|
(Offline)
|
|
12.02.2011, 18:40
|
#3
|
ПроЭктировщик
Регистрация: 12.02.2011
Сообщений: 131
Написано 23 полезных сообщений (для 52 пользователей)
|
Ответ: FPS: Проблема с реализацей игрока
Гравитация сделана вот так (в процедуре обработки движения игрока)
mvy# = -0.2
If EntityCollided(scenePlayer,COLLISION_SCENE) Then mvy = mvy + 0.2
TranslateEntity scenePlayer, 0, mvy, 0
Если ставить не 0.2, а другое значение, то ничего не меняется. Однако, если сделать дельту выталкивания больше, чем дельту падения, то игрок начинает бодро забегать по лестнице. Однако в этом случае, происходит дрожание пола под ногами (игрока через кадр подкидывает столкновение с землей, и гравитация вновь прижимает).
Более того, игрок получает возможность забираться по стенам спиной.
|
(Offline)
|
|
12.02.2011, 21:35
|
#4
|
Знающий
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений (для 166 пользователей)
|
Ответ: FPS: Проблема с реализацией игрока
Давай по порядку:
Предположим, что есть лестница. Чтобы игрок по ней взбирался быстрее, т.е. выталкивался обработчиком столкновений, надо увеличить радиус "ног игрока" (scenePlayer). Однако, из-за этого игрок перестает проходить, например в двери (если деревья или обстановку в доме можно расставить по шире, то квадратные двери смотрятся нелепо).
|
Смотрим справку EntityRadius
EntityRadius entity,x_radius#[,y_radius#]
Параметры
entity - указатель объекта
x_radius# - радиус по оси x эллипсоида зоны столкновений
y_radius# (optional) - радиус по оси y эллипсоида зоны столкновений. Если не указано, то будет использоваться значение параметра x_radius# (будет сфера).
|
Простой выход: используем разную ширину и высоту (передаём два параметра)
Так же малое значение радиуса позволяет подойти близко к стене и "заглянуть" через нее (это лечится заданием небольшого значения перового параметра в CameraRange).
|
CameraRange лучше особенно не трогать, используй ScaleEntity sceneCamera, 0.1, 0.1, 0.1
Для гравитации сделай вертикальную скорость. Отнимай от скорости величину гравитации каждый цикл. Если игрок столкнётся с полом - скорость равна 0, для прыжка вверх один раз прибавь положительное число.
Каждый цикл используй MoveEntity scenePlayer, 0, <вертикальная скорость>, 0
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
12.02.2011, 23:04
|
#5
|
ПроЭктировщик
Регистрация: 12.02.2011
Сообщений: 131
Написано 23 полезных сообщений (для 52 пользователей)
|
Ответ: FPS: Проблема с реализацией игрока
RBK, да, спасибо, не углядел про второй параметр. Но, почему их всего два?
Получается, что можно задать растяжение в горизонтальной плоскости. А чтобы получить вытянутый вверх эллипсоид, придется еще и повернуть Pivot игрока. Придется пробовать.
Размеры камеры и координаты трогать не хочу, поскольку хочу манипулировать камерой отдельно (пролеты камеры, с последующим возвращением к игроку) и при этом указывать глобальные координаты.
Задание CameraRange насколько я понимаю ничем не чревато, поскольку это просто задает просчитываемый объем для DirectX.
Про гравитацию не совсем понял. У меня так и сделано - вертикальная скорость 0.2. Выталкивается вверх от столкновения с поверхностью, напр. лестница. Прыжка вверх нет (не надо).
|
(Offline)
|
|
12.02.2011, 23:21
|
#6
|
Разработчик
Регистрация: 02.04.2007
Сообщений: 353
Написано 54 полезных сообщений (для 289 пользователей)
|
Ответ: FPS: Проблема с реализацией игрока
а че коллизионную модель (прозрачность 0) ктото отменял в местах лестниц?
|
(Offline)
|
|
12.02.2011, 23:25
|
#7
|
ПроЭктировщик
Регистрация: 12.02.2011
Сообщений: 131
Написано 23 полезных сообщений (для 52 пользователей)
|
Ответ: FPS: Проблема с реализацией игрока
Alex_Noc, немножко подробнее можно расшифровать?
На данный момент лестница (угол наклона ~45 градусов, ступеньки) содержится в mesh-уровня, т.е. нет отличия где ходит игрок - по лестнице или по уровню.
|
(Offline)
|
|
13.02.2011, 01:33
|
#8
|
Знающий
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений (для 166 пользователей)
|
Ответ: FPS: Проблема с реализацией игрока
Про гравитацию не совсем понял. У меня так и сделано - вертикальная скорость 0.2. Выталкивается вверх от столкновения с поверхностью, напр. лестница. Прыжка вверх нет (не надо).
|
Скорее всего надо наоборот(чтобы по стенам не летать)
mvy# = mvy# - 0.2
If EntityCollided(scenePlayer,COLLISION_SCENE) Then mvy# = 0
MoveEntity scenePlayer, 0, mvy#, 0
Камеру конечно делай как нужно тебе, я предложил вариант.
Получается, что можно задать растяжение в горизонтальной плоскости. А чтобы получить вытянутый вверх эллипсоид, придется еще и повернуть Pivot игрока. Придется пробовать.
|
Не надо ничего поворачивать, EntityRadius scenePlayer, 1.5, 3 получим:
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
13.02.2011, 03:48
|
#9
|
ПроЭктировщик
Регистрация: 12.02.2011
Сообщений: 131
Написано 23 полезных сообщений (для 52 пользователей)
|
Ответ: FPS: Проблема с реализацией игрока
RBK, спасибо! Получилось. Теперь и по лестницам игрок нормально ходит и в дверях не застревает
А не подскажешь еще, как шаги озвучить? Понятно, что можно через таймер:
1. Запускаем звук, напр. на 2сек. Выставляем флаг, что больше звук играть нельзя + таймер на 2сек.
2. Через 2сек таймер снимет флаг.
Но, что то не очень, как мне кажется
|
(Offline)
|
|
13.02.2011, 11:38
|
#10
|
Знающий
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений (для 166 пользователей)
|
Ответ: FPS: Проблема с реализацией игрока
Действительно не очень, снова смотрим в справку:
ChannelPlaying (указатель_на_канал)
Параметры
указатель_на_канал = переменная, назначенная каналу
Описание
Часто вам необходимо узнать, воспроизводится звуковой канал в данный момент или нет. Эта команда возвращает 1, если звук играет, или 0, если звук остановлен. Используйте ее для повторного воспроизведения фоновой музыки или любого другого звука, который мог неожиданно остановиться.
|
Далее управление звуком сводится к трём пунктам:
1)Если игрок движется, звук не играет - запускаем звук
2)Если игрок движется, звук играет - ничего не делаем
3)Если игрок не движется, звук играет - звук останавливаем
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
13.02.2011, 23:13
|
#11
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: FPS: Проблема с реализацией игрока
Не!
В блитзе есть такое: звук прикрепляют к каналу (channel). Звук запускается loop-ом бесконечно.
Когда не нужен звук - уменьшается громкость звучания, когда нужен - увеличивается. (А звук так и играет повторами).
+ в этом ещё - можно менять звучность и получается, что звуки (шагов) разные..
|
(Offline)
|
|
13.02.2011, 23:32
|
#12
|
Знающий
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений (для 166 пользователей)
|
Ответ: FPS: Проблема с реализацией игрока
Как вариант подойдёт, но допустим у меня десяток звуков шагов по разным покрытиям. Мне их что, все запустить? Что-то мне подсказывает, что такое количество каналов совсем нехорошо.
|
(Offline)
|
|
14.02.2011, 00:55
|
#13
|
Разработчик
Регистрация: 02.04.2007
Сообщений: 353
Написано 54 полезных сообщений (для 289 пользователей)
|
Ответ: FPS: Проблема с реализацией игрока
if not chanelplaying(музон) then playsound (музон)
как то так
|
(Offline)
|
|
14.02.2011, 00:56
|
#14
|
Разработчик
Регистрация: 02.04.2007
Сообщений: 353
Написано 54 полезных сообщений (для 289 пользователей)
|
Ответ: FPS: Проблема с реализацией игрока
Сообщение от LLI.T.A.L.K.E.R.
Не!
В блитзе есть такое: звук прикрепляют к каналу (channel). Звук запускается loop-ом бесконечно.
Когда не нужен звук - уменьшается громкость звучания, когда нужен - увеличивается. (А звук так и играет повторами).
+ в этом ещё - можно менять звучность и получается, что звуки (шагов) разные..
|
ИЗВРАЩЕНЕЦ!!!
|
(Offline)
|
|
14.02.2011, 00:57
|
#15
|
Разработчик
Регистрация: 02.04.2007
Сообщений: 353
Написано 54 полезных сообщений (для 289 пользователей)
|
Ответ: FPS: Проблема с реализацией игрока
Сообщение от RBK
Как вариант подойдёт, но допустим у меня десяток звуков шагов по разным покрытиям. Мне их что, все запустить? Что-то мне подсказывает, что такое количество каналов совсем нехорошо.
|
МЫСЛИ СИСТЕМНО!!!
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:56.
|