minjs1cn / weekly-learning

每周学习分享打卡
0 stars 0 forks source link

消消乐中的地图分页和玩法地图实现 #52

Open zjz6 opened 3 years ago

zjz6 commented 3 years ago

一.地图分页

zjz6 commented 3 years ago

场景描述: 地图由top+mid1+mid2+mid3+bot,mid来回调位置拼接而成 top:level:7,height:1240 mid:13,1477 bot:11,1530 全关卡数:350,midcount = floor((totalevel-topl-botl)/midl); 用户当前关卡:nlevel=120 接口getLevel传参startl,endl来获取用户的关卡信息 地图滚动:scroll 初始化: 每页:pc = 30; 用户关卡存储:pl:map; mid1处于midshow%3==0,mid2处于1,mid3处于2 startmidy = toph; endmidy = toph+(midc-1)*midh; async getPLevel (level){ end = level; enddata = pl.get(end); if(endhave){ return enddata; } start = end; check = level-pc; starthave = pl.get(start); while(start>=check&&!have){ start--; } getLevel(start,end).then(data=>{ data.forEach((ldata,l)=>{ pl.set(l,ldata); }); return pl.get(level); }) } stageh onScroll(){ let showtop = scrollv; let showbot = scrollv+stageh;

//在最底层,需要从下往上放mid
if(showtop>=boty){

}else if(showtop<=toph){,从上往下放mid

}else{
    topInmid = floor((showtop-toph)/midh);
    botInmid = floor((showbot-toph)/midh);
    let topidx = topInmid%3;
    let botidx = botInmid%3;

    let allmid = [mid1,mid2,mid3];
    if(topidx!=botidx){//当前显示2个,check挪动一个
        topmid = allmid.splice1;
        botmid = allmid.splice2;

        topmidy = topInmid*midh+toph;

        checkmid = allmid[0];
    }else{//当前显示1个,check挪动2个

    }
}

}

zjz6 commented 3 years ago

玩法地图实现 let mapdata = [ 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 1, 1, 1, 1, 2, 2, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 2, 0, 2, 1, 0, 1, 0, 1, 0, 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, ]; 99的格子生成1010的点阵

每个点有判断左上下,右上下是否有格子,当四个方向同时存在有格子和无格子,这个点必是路径点,
找出所有的路径点
遍历,从第一个路径点开始,这个必是外围路径,遵循,路径连接方向,顺时针判断下个路径点,连起第一个路径
第一个路径完事后,
看还有点不在已有路径上,检查这个点是在这个路径内还是外,内的话,就是该路径的洞,外的话就是一条新的路径,新路径的生成同上
洞的话,从这个洞的起始点顺时针找非路径点,形成一个洞的路径
当一个点在路径内,同时在路径内的洞内,按照路径处理

这样形成基本的路径洞数据,处理点间的位置,得到起始点,拐点,连起,得到路径,

剩下的就是填充了