|
FAQ Туториалы и часто задаваемые вопросы |
08.10.2005, 17:01
|
#31
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
да? и откуда же ему браться. Тело приобретает ускорение при толчке от земли, а дальше, это ускорение падает до 0 (точка повисает над землёй) и падает ниже 0 (тело с ускорением движется вниз).
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
08.10.2005, 17:35
|
#32
|
|
В данном коде при прыжке игрок мгновенно перемещается в точку над землей, а потом с ускорением падает вниз. Говоря про ускорение при движении вверх, я имел в виду, что игрок не должен сразу перемещаться в точку над землей, он должен подпрыгнуть до нее. Т.е. игрок будет двигаться вверх с определенной скоростью, но так как ускорение направлено вниз, он постепенно остановится и начнет падать вниз.
Например: в файле ES_FPS_3.bb в функции update_user() заменить этот код:
If pick_ent
jump_bool=False
user_vy=0
TranslateEntity user,0,-1,0,True
Else
jump_bool=True
user_vy#=user_vy#-G#*delta_t;v1=v2-a*t
EndIf
;;;
If KeyHit(57) And jump_bool=False Then user_vy#=1
на этот:
If if_jumping=0
If pick_ent
jump_bool=False
user_vy=0
TranslateEntity user,0,-1,0,True
Else
jump_bool=True
user_vy#=user_vy#-G#*delta_t;v1=v2-a*t
EndIf
Else
jump_amount#=jump_amount#-G#*delta_t
If jump_amount#<0 Then if_jumping=0
End If
;;;
If KeyHit(57) And jump_bool=False Then jump_amount#=.06: user_vy#=user_vy#+jump_amount#: if_jumping=1
при этом в начале объявив две переменные
Global if_jumping
Global jump_amount#
А значение G# я сделал равным 0.0005
|
|
|
08.10.2005, 17:44
|
#33
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Мдя - понизь просто ускорение, движение в компьютерной эмуляции так или иначе состоит из рывков моментального перемещения. У меня игрок перемещается на х потом на ещё часть х и ещё - т.е. плавно до точки зависания. А скачкообразность первого перемещения на х зависит только от кол-ва ФПС и калибровки коэффициентов, при чём так или иначе приращения будут дискретны, а значит характер движения на dt не равномерным.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
08.10.2005, 17:49
|
#34
|
|
У меня игрок перемещается на х потом на ещё часть х и ещё - т.е. плавно до точки зависания
|
If KeyHit(57) And jump_bool=False Then user_vy#=1
|
Не могу увидеть здесь плавного перемещения до точки зависания.
|
|
|
08.10.2005, 17:51
|
#35
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
А я вообще не вижу здесь перемещения :D
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
08.10.2005, 19:08
|
#38
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Блин! по твоему, alcoSHoLiK, строка
If KeyHit(57) And jump_bool=False Then user_vy#=1
каким то таинственным образом двигает объект? Где здесь move,translate,position entity?!
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
08.10.2005, 22:13
|
#39
|
|
Я говорил что эта строка двигает объект? Нет.
Я говорил "мгновенно перемещает". Да, я украинец. Возможно, я не знаю русский. Тогда приведу синонимы: "мгновенно перемещает"="телепортирует"="переставляет из одной точки в другую". Т.е. само перемещение происходит фактически за 0 интервал времени.
Я утверждал, что строчка
If KeyHit(57) And jump_bool=False Then user_vy#=1
не передвигает объект по оси Y, а мгновенно перемещает(телепортирует) его в точку 1 по Y.
Но ведь в реальном мире при прыжке человек поднимается вверх, потом опускается. Он не телепортируется в точку над землей, он поднимается по оси Y до нее.
В оригинальном коде такого нет. Я привел пример, как это сделать, немного изменив оригинальный код.
Это все, о чем говорил. Никаких претензий к автору я не имею, просто показал, как можно сделать прыжок более реалистичным.
|
|
|
08.10.2005, 23:56
|
#40
|
|
мдя... все опять кричат что я читать не умею
сами вы читать неумеете
нестал разбиратся в коде... но пишу что translateentity zzz,0,1,0 переместит обект не резко а плавно !
|
теперь прочитайте ету строку еще пару раз пока не дойдет ...
|
|
|
09.10.2005, 01:46
|
#41
|
|
ДЖИМОН!
ТЫ БЫ В КОДЕ СНАЧАЛА РАЗОБРАЛСЯ, А ПОТОМ КОММЕНТАРИИ ОСТАВЛЯЛ!
TranslateEntity user,0,user_vy#*delta_t,user_vy#*0.01,True
Это строчка из оригинального кода. Характер перемещения игрока по оси Y зависит от переменной user_vy#. В рассматриваемом мной блоке кода я манипулировал значением переменной, а со следующим проходом цикла координата Y игрока изменится в зависимости от значения user_vy#.
УЧИСЬ ВНИКАТЬ В СУТЬ СПОРА!
|
|
|
09.10.2005, 12:51
|
#42
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
alcoSHoLiK, я лишь говорю, что перемещение на 1 можно заменить на 0.1 или 0.00001, добившись оного варьированием коэффициентов. И будет тебе плавное смещение. ТО есть , имхо, алгоритм тут не причём. А понятие "плавного движения"- здесь суть абстракция, и используется только на приближения - допустим, в космосиме с размерами порядка 500 скачок на 1 можно считать плавным и т.п.
Короче высказались все, порядочно и пофлудили.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
03.02.2006, 15:36
|
#43
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Жаль нет ружья...
Самое время сделать из нашего оружия ружьё (или дробовик - это кому как нравится).
Добавим задержку между выстрелами.
Как всегда, код будет максимально упрощён и носить чисто ознакомительный характер.
Топаем в константы и дописываем:
Const G#=0.001
Const shot_delay=1000; - вот это
Const USERT=1;for user
Нетрудно догадаться - это пауза между выстрелами в мс.
Global user_vy#
Global last_shot_time
пишем чуть ниже в глобалах.
Переходим в update_user().
Переписываем условие выстрела:
If MouseHit(1) And MilliSecs()-last_shot_time>shot_delay
*create_shot(EntityX(user),EntityY(user),EntityZ(user),EntityPitch(camera),EntityYaw(user),0)
*last_shot_time=MilliSecs()
EndIf
Ну и для большей наглядности визуализируем процесс перезарадки в MAIN LOOP:
;=
If MilliSecs()-last_shot_time<=shot_delay
Text 10,10,"RELOAD..."
EndIf
;=
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
09.02.2006, 19:09
|
#44
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Автомат в руки
Вот мне тут сообщают в ICQ, что дескать невозможно главгеру оружие вручить из-за моей модели представления... Странно...
Попробуем.
Смотрим в контакт-лист: ни одного моделлера в сети =/ кхым... Роль оружия будет выполнять цилиндр.
Global user
Global camera
Global GUN
ну скука прямо..
Function create_user(x#=0,y#=10,z#=0)
MidHandle pricel
MaskImage pricel,255,255,255
user=CreateSphere()
k#=3
ScaleEntity user,k#,k#,k#
EntityRadius user,k#
camera=CreateCamera(user)
CameraRange camera,0.1,10000
PositionEntity user,x#,y#,z#
EntityType user,USERT
GUN=CreateCylinder()
TurnEntity GUN,90,0,0
ScaleEntity GUN,.5,1,.5
EntityParent GUN,camera
PositionEntity GUN,0,-.4,0.4
End Function
Запускаем и любуемсЯ =)
Но недолго: если стрелять очередью, видно, что огонь ведётся не из ствола, а так сказать,
die Sonne scheint mir aus den Augen © RAMMSTEIN
|
Нам надо как-то сассоциировать место начала движения спрайта выстрела и начало ствола.
Если бы у меня была нормальная модель, то дельный моделлер просто разместил бы пивот на конце ствола. Сейчас мы сделаем то же самое, но ручками ^_^
Function create_user(x#=0,y#=10,z#=0)
MidHandle pricel
MaskImage pricel,255,255,255
user=CreateSphere()
k#=3
ScaleEntity user,k#,k#,k#
EntityRadius user,k#
camera=CreateCamera(user)
CameraRange camera,0.1,10000
PositionEntity user,x#,y#,z#
EntityType user,USERT
GUN=CreateCylinder()
TurnEntity GUN,90,0,0
ScaleEntity GUN,.5,1,.5
EntityParent GUN,camera
PositionEntity GUN,0,-.4,0.4
end_=CreatePivot()
NameEntity end_,"END"
EntityParent end_,GUN
PositionEntity end_,0,1.3,0
End Function
Так... Ну а теперь, перепишем событие - выстрел:
Local user_gun
If MouseHit(1) And MilliSecs()-last_shot_time>shot_delay
*user_gun=FindChild(GUN,"END")
*create_shot(EntityX(user_gun,1),EntityY(user_gun,1),EntityZ(user_gun,1),EntityPitch(camera),EntityYaw(user),0)
*last_shot_time=MilliSecs()
EndIf
If MouseDown(2)
*user_gun=FindChild(GUN,"END")
*create_shot(EntityX(user_gun,1),EntityY(user_gun,1),EntityZ(user_gun,1),EntityPitch(camera),EntityYaw(user),0)
*
EndIf
Это мы в функции обновления игрока пишем.
Завершая тему личной обороны игрока, хотелось бы добавить вот что:
Graphics3D 800,600,32
SetBuffer BackBuffer()
SetFont LoadFont("Arial",21)
Color 255,0,0
Global user
Global camera
Global GUN
Следует, так же учесть - что точность выстрела после привязки выстрела к стволу немного снижается. Выход из проблемы (если это критично в вашей игре) не один, и зависит от контекста.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
20.02.2006, 21:20
|
#45
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Куда глаза глядят
Следующее что хотелось рассмотреть в цикле заметочек.
Указание направления дивжения бота при помощи спрайта. Как таковой пример особой ценности не
имеет, однако может понадобиться в дальнейшем и может быть модфицирован под нужды "девелопера".
Открываем графический редактор (к примеру MS Paint) и творим: нам понадобиться круг, с одним
проведённым радиусом.
Теперь вопрос: подгружать спрайт по мере необходимости или использовать образец? Для такой простой
игры это не критично, однако, стоит приучиться использовать копии объектов. (в идеале должен быть
и образец для каждого типа "выстрела"). Приступим:
Global pricel=LoadImage("pricel.bmp")
Global shot_sprite=LoadSprite("sprite.bmp")
Global orient_sprite=LoadSprite("orient.bmp")
Function create_world()
Function create_world()
light=CreateLight()
RotateEntity light,90,0,0
HideEntity shot_sprite
HideEntity orient_sprite
SpriteViewMode orient_sprite,2
Создание бота немного подправим:
NameEntity b\entity,Handle(b)
Orient=CopyEntity(orient_sprite)
TurnEntity Orient,90,0,0
EntityParent Orient,b\entity
PositionEntity Orient,0,-1,0
Return True
Так... теперь вернёмся в место сокрытия образца и откалибруем размер спрайта:
SpriteViewMode orient_sprite,2
ScaleSprite orient_sprite,5,5
Собственно... пока всё.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:09.
|