1.电子地图类:
地图的展示实际上就是一个算法问题,假设有一个500X300的可视窗口,需要展示一个地图,地图很大,(256*100) X (256*100)的,如果上来就 两个for循环,那就不对了。这样做,反正用户也只能看到宽口区域的那我们就只加载窗口区域的。
比如:窗口大小 windowW:Number,windowH:Number;
单位地图大小: uintPicW:Number,uintPicH:Number;
当前地图坐标:position:Point;
怎样来求出,当前需要记载的图片呢?
这样,如下图,
我们可以很容易的求出窗口的4个点,所占的地图的索引:
x0 = position.x - windowW/2;
x1 = position.x + windowW/2;
y0 = position.y - windowH/2;
y1 = position.y + windowH/2;
mapIndexX0 = uint(x0/256);
mapIndexX1 = uint(x1/256);
mapIndexY0 = uint(y0/256);
mapIndexY1 = uint(y1/256);
所以要加载的可视区域地图图片就是, mapIndexX0 - mapIndexX1 mapIndexY0- mapIndexY1区域的图片;
但是,怎么缓存呢,其实就是对得到的这区域的图片在多加载点而已,浏览器会对图片进行缓存。
这样做,上面的mapIndexX0 - mapIndexX1 mapIndexY0- mapIndexY1,是必须要加载的图片的对应索引,加个缓存,比如多加载可视区域外 ? 圈的图片,mapIndexX0-?,mapIndexX1+?,mapIndexY0-?,mapIndexY1+?,当然还要考虑index的最大最小值.