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

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

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

FAQ Туториалы и часто задаваемые вопросы

Ответ
 
Опции темы
Старый 08.10.2005, 13:01   #31
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,794 полезных сообщений
(для 20,911 пользователей)
да? и откуда же ему браться. Тело приобретает ускорение при толчке от земли, а дальше, это ускорение падает до 0 (точка повисает над землёй) и падает ниже 0 (тело с ускорением движется вниз).
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 08.10.2005, 13:35   #32
alcosholik
 
Сообщений: n/a
В данном коде при прыжке игрок мгновенно перемещается в точку над землей, а потом с ускорением падает вниз. Говоря про ускорение при движении вверх, я имел в виду, что игрок не должен сразу перемещаться в точку над землей, он должен подпрыгнуть до нее. Т.е. игрок будет двигаться вверх с определенной скоростью, но так как ускорение направлено вниз, он постепенно остановится и начнет падать вниз.

Например: в файле 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, 13:44   #33
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,794 полезных сообщений
(для 20,911 пользователей)
Мдя - понизь просто ускорение, движение в компьютерной эмуляции так или иначе состоит из рывков моментального перемещения. У меня игрок перемещается на х потом на ещё часть х и ещё - т.е. плавно до точки зависания. А скачкообразность первого перемещения на х зависит только от кол-ва ФПС и калибровки коэффициентов, при чём так или иначе приращения будут дискретны, а значит характер движения на dt не равномерным.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 08.10.2005, 13:49   #34
alcosholik
 
Сообщений: n/a
У меня игрок перемещается на х потом на ещё часть х и ещё - т.е. плавно до точки зависания
If KeyHit(57) And jump_bool=False Then user_vy#=1
Не могу увидеть здесь плавного перемещения до точки зависания.
 
Ответить с цитированием
Старый 08.10.2005, 13:51   #35
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,794 полезных сообщений
(для 20,911 пользователей)
А я вообще не вижу здесь перемещения :D
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 08.10.2005, 14:10   #36
alcosholik
 
Сообщений: n/a
У меня игрок перемещается на х потом на ещё часть х и ещё - т.е. плавно до точки зависания.
А я вообще не вижу здесь перемещения :D
 
Ответить с цитированием
Старый 08.10.2005, 14:35   #37
jimon
 
Сообщений: n/a
нестал разбиратся в коде... но пишу что translateentity zzz,0,1,0 переместит обект не резко а плавно !
 
Ответить с цитированием
Старый 08.10.2005, 15:08   #38
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,794 полезных сообщений
(для 20,911 пользователей)
Блин! по твоему, alcoSHoLiK, строка
If KeyHit(57) And jump_bool=False Then user_vy#=1
каким то таинственным образом двигает объект? Где здесь move,translate,position entity?!
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 08.10.2005, 18:13   #39
alcosholik
 
Сообщений: n/a
Я говорил что эта строка двигает объект? Нет.
Я говорил "мгновенно перемещает". Да, я украинец. Возможно, я не знаю русский. Тогда приведу синонимы: "мгновенно перемещает"="телепортирует"="переставляет из одной точки в другую". Т.е. само перемещение происходит фактически за 0 интервал времени.

Я утверждал, что строчка
If KeyHit(57) And jump_bool=False Then user_vy#=1
не передвигает объект по оси Y, а мгновенно перемещает(телепортирует) его в точку 1 по Y.
Но ведь в реальном мире при прыжке человек поднимается вверх, потом опускается. Он не телепортируется в точку над землей, он поднимается по оси Y до нее.
В оригинальном коде такого нет. Я привел пример, как это сделать, немного изменив оригинальный код.
Это все, о чем говорил. Никаких претензий к автору я не имею, просто показал, как можно сделать прыжок более реалистичным.
 
Ответить с цитированием
Старый 08.10.2005, 19:56   #40
jimon
 
Сообщений: n/a
мдя... все опять кричат что я читать не умею

сами вы читать неумеете

нестал разбиратся в коде... но пишу что translateentity zzz,0,1,0 переместит обект не резко а плавно !
теперь прочитайте ету строку еще пару раз пока не дойдет ...
 
Ответить с цитированием
Старый 08.10.2005, 21:46   #41
alcosholik
 
Сообщений: n/a
ДЖИМОН!
ТЫ БЫ В КОДЕ СНАЧАЛА РАЗОБРАЛСЯ, А ПОТОМ КОММЕНТАРИИ ОСТАВЛЯЛ!
TranslateEntity user,0,user_vy#*delta_t,user_vy#*0.01,True
Это строчка из оригинального кода. Характер перемещения игрока по оси Y зависит от переменной user_vy#. В рассматриваемом мной блоке кода я манипулировал значением переменной, а со следующим проходом цикла координата Y игрока изменится в зависимости от значения user_vy#.

УЧИСЬ ВНИКАТЬ В СУТЬ СПОРА!
 
Ответить с цитированием
Старый 09.10.2005, 08:51   #42
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,794 полезных сообщений
(для 20,911 пользователей)
alcoSHoLiK, я лишь говорю, что перемещение на 1 можно заменить на 0.1 или 0.00001, добившись оного варьированием коэффициентов. И будет тебе плавное смещение. ТО есть , имхо, алгоритм тут не причём. А понятие "плавного движения"- здесь суть абстракция, и используется только на приближения - допустим, в космосиме с размерами порядка 500 скачок на 1 можно считать плавным и т.п.

Короче высказались все, порядочно и пофлудили.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 03.02.2006, 12:36   #43
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,794 полезных сообщений
(для 20,911 пользователей)
Смущение

Жаль нет ружья...
Самое время сделать из нашего оружия ружьё (или дробовик - это кому как нравится).
Добавим задержку между выстрелами.
Как всегда, код будет максимально упрощён и носить чисто ознакомительный характер.
Топаем в константы и дописываем:
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, 16:09   #44
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,794 полезных сообщений
(для 20,911 пользователей)
Смущение

Автомат в руки
Вот мне тут сообщают в 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, 18:20   #45
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,794 полезных сообщений
(для 20,911 пользователей)
Смущение

Куда глаза глядят
Следующее что хотелось рассмотреть в цикле заметочек.
Указание направления дивжения бота при помощи спрайта. Как таковой пример особой ценности не

имеет, однако может понадобиться в дальнейшем и может быть модфицирован под нужды "девелопера".
Открываем графический редактор (к примеру 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
BlackDragon (14.07.2008)
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создаём свой Crimsonland. Данил FAQ и уроки 54 09.07.2009 20:19
Свои шрифты DiS[IP] Библиотеки 20 24.02.2009 07:47
3rd person и руки Stalnoy_Gvozd' 3D-программирование 6 05.01.2007 16:34
Аля свой язык..... Raiter Болтовня 12 27.09.2006 14:36
Создаём свой Fps (first Person Shooter) impersonalis Болтовня 5 22.02.2006 17:37


Часовой пояс GMT +1, время: 07:25.


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