Показать сообщение отдельно
Старый 04.09.2005, 06:50   #24
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Жизнь в коробке
Рано или поздно, надо чётко обазначить границы игрового мира. После добавления в игру SkyBox, это становится необходимо сделать.
Модифицируем ф-цию создания неба и сохраним её под новым именем (прототип тоже надо оставить в коде):
Function MakeBox()

	m=CreateMesh()
;front face
	s=CreateSurface( m )
	AddVertex s,-1,+1,-1,0,0:AddVertex s,+1,+1,-1,1,0
	AddVertex s,+1,-1,-1,1,1:AddVertex s,-1,-1,-1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
;right face
	s=CreateSurface( m )
	AddVertex s,+1,+1,-1,0,0:AddVertex s,+1,+1,+1,1,0
	AddVertex s,+1,-1,+1,1,1:AddVertex s,+1,-1,-1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
;back face
	s=CreateSurface( m )
	AddVertex s,+1,+1,+1,0,0:AddVertex s,-1,+1,+1,1,0
	AddVertex s,-1,-1,+1,1,1:AddVertex s,+1,-1,+1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
;left face
	s=CreateSurface( m )
	AddVertex s,-1,+1,+1,0,0:AddVertex s,-1,+1,-1,1,0
	AddVertex s,-1,-1,-1,1,1:AddVertex s,-1,-1,+1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
;top face
	s=CreateSurface( m)
	AddVertex s,-1,+1,+1,0,1:AddVertex s,+1,+1,+1,0,0
	AddVertex s,+1,+1,-1,1,0:AddVertex s,-1,+1,-1,1,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3

	ScaleMesh m,100,100,100
	FlipMesh m
	EntityFX m,9
	EntityOrder m,10
	Return m
	
End Function
Теперь функция возвращает хендл простой неоттекстурированной корбки. Зайдём в create_world():
border=MakeBox()
;ScaleEntity border,140,140,140
EntityAlpha border,.5
Запустим прогамму. Если некоторое время идти в одном направлении, можно увидеть коробку, ограничивающую уровень.

Теперь поставим этой коробке в соответствие тип для колизии
Const BORDERT=5;for box
EntityAlpha border,.5
EntityType border,BORDERT
Collisions USERT,BORDERT,2,1
Боты могут проходить сквозь эту стену - на случай если игрок будет в крайнем положении, в следствие чего бот создастся за стеной. Поэтому коллизию с типом ботов не ставим. Спрайтам выстрелов это тоже не нужно.
Теперь, если идти в одну сторону, в какой-то момент вы просто упрётесь в стену.
Ставим стене нулевую альфу и растягиваем её.
border=MakeBox()
ScaleEntity border,140,140,140
EntityAlpha border,0
EntityType border,BORDERT
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием