Я это все давно уже сделал.
Время подгрузки с тайлами 200х200 м (город)
на атлон 1900 +
1 сек
Вся эта фигня еще и с сервером работает
Примерно как это выглядит в коде:
Function UpdateLevel()
*If EntityX(HeroModel)>110
* * messageLoad()
* * EntityType *HeroModel,0
* * posXInc()
* * U_l()
*EndIf
* If EntityX(HeroModel)<-110
* * messageLoad()
* * EntityType *HeroModel,0
* * posXDec()
* * U_l()
*EndIf
* * If EntityZ(HeroModel)>110
* * *messageLoad()
* * *EntityType *HeroModel,0
* * * posZInc()
* * *U_l()
*EndIf
* If EntityZ(HeroModel)<-110
* * * messageLoad()
* * * EntityType *HeroModel,0
* * * posZDec()
* * * U_l()
*EndIf
End Function
Function posXInc()
* *FreeEntity x1z1
* *FreeEntity x1z2
* *FreeEntity x1z3
*
* x1z1=x2z1
* x1z2=x2z2
* x1z3= x2z3
* x2z1=x3z1
* x2z2=x3z2
* x2z3= x3z3
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)
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 posXDec()
* *FreeEntity x3z1
* *FreeEntity x3z2
* *FreeEntity x3z3
*
* x3z1=x2z1
* x3z2=x2z2
* *x3z3= x2z3
* x2z1=x1z1
* x2z2=x1z2
* x2z3=x1z3
LocationX=LocationX-1
If LocationX=x_min-1 LocationX=x_max
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)
Level_A$="0"+(xd)+"_"+"0"+(zd)
x1z1=CreateScene(Level_A$)
Level_A$="0"+(xd)+"_"+"0"+(LocationZ)
x1z2=CreateScene(Level_A$)
*
Level_A$="0"+(xd)+"_"+"0"+(zi)
x1z3=CreateScene(Level_A$)
PosLevel()
PositionEntity HeroModel,EntityX(HeroModel)+200,EntityY(HeroModel),EntityZ(HeroModel)
End Function
Function posZInc()
* *FreeEntity x1z1
* *FreeEntity x2z1
* *FreeEntity x3z1
*
* x1z1=x1z2
* x2z1=x2z2
* *x3z1=x3z2
* x1z2=x1z3
* x2z2=x2z3
* x3z2=x3z3
LocationZ=LocationZ+1
If LocationZ=z_max +1 LocationZ=z_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)
Level_A$="0"+(xd)+"_"+"0"+(zi)
x1z3=CreateScene(Level_A$)
Level_A$="0"+(LocationX)+"_"+"0"+(zi)
x2z3=CreateScene(Level_A$)
*
Level_A$="0"+(xi)+"_"+"0"+(zi)
x3z3=CreateScene(Level_A$)
PosLevel()
PositionEntity HeroModel,EntityX(HeroModel),EntityY(HeroModel),EntityZ(HeroModel)-200
End Function
;==================
Function posZDec()
* *FreeEntity x1z3
* *FreeEntity x2z3
* *FreeEntity x3z3
*
* x1z3=x1z2
* x2z3=x2z2
* x3z3=x3z2
* x1z2=x1z1
* x2z2=x2z1
* x3z2=x3z1
LocationZ=LocationZ-1
If LocationZ=z_min-1 LocationZ=z_max
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)
Level_A$="0"+(xd)+"_"+"0"+(zd)
x1z1=CreateScene(Level_A$)
Level_A$="0"+(LocationX)+"_"+"0"+(zd)
x2z1=CreateScene(Level_A$)
*
Level_A$="0"+(xi)+"_"+"0"+(zd)
x3z1=CreateScene(Level_A$)
PosLevel()
PositionEntity HeroModel,EntityX(HeroModel),EntityY(HeroModel),EntityZ(HeroModel)+200
End Function
;==================
Function PosLevel()
PositionEntity x1z1,-200,0,-200
PositionEntity x1z2,-200,0,0
PositionEntity x1z3,-200,0,200
PositionEntity x2z1,0,0,-200
PositionEntity x2z2,0,0,0
PositionEntity x2z3,0,0,200
PositionEntity x3z1,200,0,-200
PositionEntity x3z2,200,0,0
PositionEntity x3z3,200,0,200
End Function
;=====================
Function U_l()
EntityType HeroModel,1
Send_Location()
gravity=0.1
Rotate_camera()
UpdateSky()
Position_location_bot()
End Function
Оптимально использовать бзд формат.
Он на 1-2% медленней рисуется чем 3дс, но зато внешний вид намного лучше + масса возможностей в плане графики (поддержка интересных материалов в максе)