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

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

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

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

Ответ
 
Опции темы
Старый 12.02.2011, 18:26   #1
Aikon
ПроЭктировщик
 
Регистрация: 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
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,853 пользователей)
Ответ: FPS: Проблема с реализацей игрока

уменьшить гравитацию?
(Offline)
 
Ответить с цитированием
Старый 12.02.2011, 18:40   #3
Aikon
ПроЭктировщик
 
Регистрация: 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
RBK
Знающий
 
Аватар для RBK
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Aikon (16.02.2011)
Старый 12.02.2011, 23:04   #5
Aikon
ПроЭктировщик
 
Регистрация: 12.02.2011
Сообщений: 131
Написано 23 полезных сообщений
(для 52 пользователей)
Ответ: FPS: Проблема с реализацией игрока

RBK, да, спасибо, не углядел про второй параметр. Но, почему их всего два?
Получается, что можно задать растяжение в горизонтальной плоскости. А чтобы получить вытянутый вверх эллипсоид, придется еще и повернуть Pivot игрока. Придется пробовать.

Размеры камеры и координаты трогать не хочу, поскольку хочу манипулировать камерой отдельно (пролеты камеры, с последующим возвращением к игроку) и при этом указывать глобальные координаты.
Задание CameraRange насколько я понимаю ничем не чревато, поскольку это просто задает просчитываемый объем для DirectX.

Про гравитацию не совсем понял. У меня так и сделано - вертикальная скорость 0.2. Выталкивается вверх от столкновения с поверхностью, напр. лестница. Прыжка вверх нет (не надо).
(Offline)
 
Ответить с цитированием
Старый 12.02.2011, 23:21   #6
Alex_Noc
Разработчик
 
Регистрация: 02.04.2007
Сообщений: 353
Написано 54 полезных сообщений
(для 289 пользователей)
Ответ: FPS: Проблема с реализацией игрока

а че коллизионную модель (прозрачность 0) ктото отменял в местах лестниц?
(Offline)
 
Ответить с цитированием
Старый 12.02.2011, 23:25   #7
Aikon
ПроЭктировщик
 
Регистрация: 12.02.2011
Сообщений: 131
Написано 23 полезных сообщений
(для 52 пользователей)
Ответ: FPS: Проблема с реализацией игрока

Alex_Noc, немножко подробнее можно расшифровать?
На данный момент лестница (угол наклона ~45 градусов, ступеньки) содержится в mesh-уровня, т.е. нет отличия где ходит игрок - по лестнице или по уровню.
(Offline)
 
Ответить с цитированием
Старый 13.02.2011, 01:33   #8
RBK
Знающий
 
Аватар для RBK
 
Регистрация: 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 получим:
Миниатюры
Нажмите на изображение для увеличения
Название: 1.GIF
Просмотров: 744
Размер:	2.3 Кб
ID:	12626  
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Aikon (13.02.2011)
Старый 13.02.2011, 03:48   #9
Aikon
ПроЭктировщик
 
Регистрация: 12.02.2011
Сообщений: 131
Написано 23 полезных сообщений
(для 52 пользователей)
Ответ: FPS: Проблема с реализацией игрока

RBK, спасибо! Получилось. Теперь и по лестницам игрок нормально ходит и в дверях не застревает

А не подскажешь еще, как шаги озвучить? Понятно, что можно через таймер:
1. Запускаем звук, напр. на 2сек. Выставляем флаг, что больше звук играть нельзя + таймер на 2сек.
2. Через 2сек таймер снимет флаг.
Но, что то не очень, как мне кажется
(Offline)
 
Ответить с цитированием
Старый 13.02.2011, 11:38   #10
RBK
Знающий
 
Аватар для RBK
 
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений
(для 166 пользователей)
Ответ: FPS: Проблема с реализацией игрока

Действительно не очень, снова смотрим в справку:
ChannelPlaying (указатель_на_канал)
Параметры
указатель_на_канал = переменная, назначенная каналу

Описание
Часто вам необходимо узнать, воспроизводится звуковой канал в данный момент или нет. Эта команда возвращает 1, если звук играет, или 0, если звук остановлен. Используйте ее для повторного воспроизведения фоновой музыки или любого другого звука, который мог неожиданно остановиться.
Далее управление звуком сводится к трём пунктам:
1)Если игрок движется, звук не играет - запускаем звук
2)Если игрок движется, звук играет - ничего не делаем
3)Если игрок не движется, звук играет - звук останавливаем
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Aikon (14.02.2011)
Старый 13.02.2011, 23:13   #11
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: FPS: Проблема с реализацией игрока

Не!
В блитзе есть такое: звук прикрепляют к каналу (channel). Звук запускается loop-ом бесконечно.
Когда не нужен звук - уменьшается громкость звучания, когда нужен - увеличивается. (А звук так и играет повторами).
+ в этом ещё - можно менять звучность и получается, что звуки (шагов) разные..
(Offline)
 
Ответить с цитированием
Старый 13.02.2011, 23:32   #12
RBK
Знающий
 
Аватар для RBK
 
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений
(для 166 пользователей)
Ответ: FPS: Проблема с реализацией игрока

Как вариант подойдёт, но допустим у меня десяток звуков шагов по разным покрытиям. Мне их что, все запустить? Что-то мне подсказывает, что такое количество каналов совсем нехорошо.
(Offline)
 
Ответить с цитированием
Старый 14.02.2011, 00:55   #13
Alex_Noc
Разработчик
 
Регистрация: 02.04.2007
Сообщений: 353
Написано 54 полезных сообщений
(для 289 пользователей)
Ответ: FPS: Проблема с реализацией игрока

if not chanelplaying(музон) then playsound (музон)
как то так
(Offline)
 
Ответить с цитированием
Старый 14.02.2011, 00:56   #14
Alex_Noc
Разработчик
 
Регистрация: 02.04.2007
Сообщений: 353
Написано 54 полезных сообщений
(для 289 пользователей)
Ответ: FPS: Проблема с реализацией игрока

Сообщение от LLI.T.A.L.K.E.R. Посмотреть сообщение
Не!
В блитзе есть такое: звук прикрепляют к каналу (channel). Звук запускается loop-ом бесконечно.
Когда не нужен звук - уменьшается громкость звучания, когда нужен - увеличивается. (А звук так и играет повторами).
+ в этом ещё - можно менять звучность и получается, что звуки (шагов) разные..
ИЗВРАЩЕНЕЦ!!!
(Offline)
 
Ответить с цитированием
Старый 14.02.2011, 00:57   #15
Alex_Noc
Разработчик
 
Регистрация: 02.04.2007
Сообщений: 353
Написано 54 полезных сообщений
(для 289 пользователей)
Ответ: FPS: Проблема с реализацией игрока

Сообщение от RBK Посмотреть сообщение
Как вариант подойдёт, но допустим у меня десяток звуков шагов по разным покрытиям. Мне их что, все запустить? Что-то мне подсказывает, что такое количество каналов совсем нехорошо.
МЫСЛИ СИСТЕМНО!!!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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