да? и откуда же ему браться. Тело приобретает ускорение при толчке от земли, а дальше, это ускорение падает до 0 (точка повисает над землёй) и падает ниже 0 (тело с ускорением движется вниз).
|
В данном коде при прыжке игрок мгновенно перемещается в точку над землей, а потом с ускорением падает вниз. Говоря про ускорение при движении вверх, я имел в виду, что игрок не должен сразу перемещаться в точку над землей, он должен подпрыгнуть до нее. Т.е. игрок будет двигаться вверх с определенной скоростью, но так как ускорение направлено вниз, он постепенно остановится и начнет падать вниз.
Например: в файле ES_FPS_3.bb в функции update_user() заменить этот код: Код:
If pick_ent Код:
If if_jumping=0 Код:
Global if_jumping |
Мдя - понизь просто ускорение, движение в компьютерной эмуляции так или иначе состоит из рывков моментального перемещения. У меня игрок перемещается на х потом на ещё часть х и ещё - т.е. плавно до точки зависания. А скачкообразность первого перемещения на х зависит только от кол-ва ФПС и калибровки коэффициентов, при чём так или иначе приращения будут дискретны, а значит характер движения на dt не равномерным.
|
Цитата:
Цитата:
|
А я вообще не вижу здесь перемещения :D
|
Цитата:
Цитата:
|
нестал разбиратся в коде... но пишу что translateentity zzz,0,1,0 переместит обект не резко а плавно ! ;)
|
Блин! по твоему, alcoSHoLiK, строка
If KeyHit(57) And jump_bool=False Then user_vy#=1 каким то таинственным образом двигает объект? Где здесь move,translate,position entity?! |
Я говорил что эта строка двигает объект? Нет.
Я говорил "мгновенно перемещает". Да, я украинец. Возможно, я не знаю русский. Тогда приведу синонимы: "мгновенно перемещает"="телепортирует"="переставляет из одной точки в другую". Т.е. само перемещение происходит фактически за 0 интервал времени. Я утверждал, что строчка If KeyHit(57) And jump_bool=False Then user_vy#=1 не передвигает объект по оси Y, а мгновенно перемещает(телепортирует) его в точку 1 по Y. Но ведь в реальном мире при прыжке человек поднимается вверх, потом опускается. Он не телепортируется в точку над землей, он поднимается по оси Y до нее. В оригинальном коде такого нет. Я привел пример, как это сделать, немного изменив оригинальный код. Это все, о чем говорил. Никаких претензий к автору я не имею, просто показал, как можно сделать прыжок более реалистичным. |
мдя... все опять кричат что я читать не умею
сами вы читать неумеете Цитата:
|
ДЖИМОН!
ТЫ БЫ В КОДЕ СНАЧАЛА РАЗОБРАЛСЯ, А ПОТОМ КОММЕНТАРИИ ОСТАВЛЯЛ! Код:
TranslateEntity user,0,user_vy#*delta_t,user_vy#*0.01,True УЧИСЬ ВНИКАТЬ В СУТЬ СПОРА! |
alcoSHoLiK, я лишь говорю, что перемещение на 1 можно заменить на 0.1 или 0.00001, добившись оного варьированием коэффициентов. И будет тебе плавное смещение. ТО есть , имхо, алгоритм тут не причём. А понятие "плавного движения"- здесь суть абстракция, и используется только на приближения - допустим, в космосиме с размерами порядка 500 скачок на 1 можно считать плавным и т.п.
Короче высказались все, порядочно и пофлудили. |
Вложений: 2
Жаль нет ружья...
Самое время сделать из нашего оружия ружьё (или дробовик - это кому как нравится). Добавим задержку между выстрелами. Как всегда, код будет максимально упрощён и носить чисто ознакомительный характер. Топаем в константы и дописываем: Код:
Const G#=0.001 Код:
Global user_vy# Переходим в update_user(). Переписываем условие выстрела: Код:
If MouseHit(1) And MilliSecs()-last_shot_time>shot_delay Код:
;= |
Автомат в руки
Вот мне тут сообщают в ICQ, что дескать невозможно главгеру оружие вручить из-за моей модели представления... Странно... Попробуем. Смотрим в контакт-лист: ни одного моделлера в сети =/ кхым... Роль оружия будет выполнять цилиндр. Код:
Global user Код:
Function create_user(x#=0,y#=10,z#=0) Но недолго: если стрелять очередью, видно, что огонь ведётся не из ствола, а так сказать, Цитата:
Если бы у меня была нормальная модель, то дельный моделлер просто разместил бы пивот на конце ствола. Сейчас мы сделаем то же самое, но ручками ^_^ Код:
Function create_user(x#=0,y#=10,z#=0) Код:
Local user_gun Завершая тему личной обороны игрока, хотелось бы добавить вот что: Код:
Graphics3D 800,600,32 |
Вложений: 2
Куда глаза глядят
Следующее что хотелось рассмотреть в цикле заметочек. Указание направления дивжения бота при помощи спрайта. Как таковой пример особой ценности не имеет, однако может понадобиться в дальнейшем и может быть модфицирован под нужды "девелопера". Открываем графический редактор (к примеру MS Paint) и творим: нам понадобиться круг, с одним проведённым радиусом. Теперь вопрос: подгружать спрайт по мере необходимости или использовать образец? Для такой простой игры это не критично, однако, стоит приучиться использовать копии объектов. (в идеале должен быть и образец для каждого типа "выстрела"). Приступим: Код:
Global pricel=LoadImage("pricel.bmp") Код:
Function create_world() Код:
NameEntity b\entity,Handle(b) Код:
SpriteViewMode orient_sprite,2 |
Часовой пояс GMT +4, время: 03:54. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot