Тема: подгрузка
Показать сообщение отдельно
Старый 08.04.2006, 13:20   #11
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
If EntityX(HeroModel)>110
  messageLoad() 
  EntityType HeroModel,0 
  posXInc()
  U_l()
 EndIf
по этому куску понятно ?
если игрок ушел вправо больше чем 110 то запускаеЦЦа posXInc()

Function posXInc()
  FreeEntity x1z1
  FreeEntity x1z2
  FreeEntity x1z3  выгружаются левые куски уровня (переменных кусков 9 штук по имени понятно ? )
 
 x1z1=x2z1
 x1z2=x2z2
 x1z3= x2z3
 x2z1=x3z1
 x2z2=x3z2
 x2z3= x3z3  оставшиеся 6 кусков меняют переменную - сдвигаются влево 


LocationX=LocationX+1 переменная текущей локации по Х

If LocationX=x_max +1 LocationX=x_min  если край мира то переходим на противоположный край

level$=levelSet$(LocationX,LocationZ) строковые преобразования - получаем имя текущего уровня


;--------------load-----------

высчитываем промежуточные значения:
xi=LocationX+1
xd=LocationX-1
zd=LocationZ-1
zi=LocationZ+1

If xd<x_min xd=xd+(x_max-x_min)
If xi>x_max xi=xi-(x_max-x_min)
If zd<z_min zd=zd+(x_max-x_min)
If zi>z_max zi=zi-(x_max-x_min) 


Грузим 3 новых куска
Level_A$="0"+(xi)+"_"+"0"+(zd)
x3z1=CreateScene(Level_A$)

Level_A$="0"+(xi)+"_"+"0"+(LocationZ)
x3z2=CreateScene(Level_A$)
 
Level_A$="0"+(xi)+"_"+"0"+(zi)
x3z3=CreateScene(Level_A$)


PosLevel() расставляем все куски на свои "родные" места в мире

PositionEntity HeroModel,EntityX(HeroModel)-200,EntityY(HeroModel),EntityZ(HeroModel) перемещаем героя на место 

End Function


Function levelSet$(x,z)
xstr$=Str(x)
zStr$=Str(z)
If x<10 
 xstr$="0"+xstr$
EndIf 
If z<10 
 zStr$="0"+zStr$
EndIf 
Return xstr$+"_"+zStr$
End Function
При перемещении героя отключаем ему коллизию, потом опять включаем

имена уровней по такому принципу: 04_06.b3d
то есть доступно 10 000 кусков
мир 20х20 км
если нужно больше - просто перейти к другой папке
__________________
(Offline)
 
Ответить с цитированием