Показать сообщение отдельно
Старый 09.02.2006, 19:09   #44
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 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)
 
Ответить с цитированием