想了半天想不出来,求解如何动态生成地图?

地图就是1个和屏幕大小一样的sprite,人物可以上下左右4个方向移动,如何实现无限地图的功能呢?

我也不会,因为刚开始学习cocos。不过我想到了一个方法,这个方法可能不怎么好。不过你可以参考下。
未标题-1
可以在玩家位置的四面,或者是当前你说的和屏幕一样大小的sprite计算一下大概的位置。
就是可以玩家碰到空气墙就生成一下玩家即将看到的地图。

当然如果你说的是重复的地图,好像改下sprite的图片加载方式就可以了

改下sprite的图片加载方式是啥意思?昨天想了一晚上,今天早上起来试了一下,跟你说差不多,代码是实现了,就是运行个十几秒就特别卡了,卡到不能玩,现在又在崩溃中。。

无限地图,要求有点高了,内存要动态加载,动态释放,需要一定的开发经验。
大地图还是很容易实现的,简单一点的你就用tileMap做,能满足大部分游戏需求。
要不就自己做,运行效率高,可控性强,但是开发起来太麻烦。
原理就是一个网格状的 2位数组存地图信息,渲染可视范围内的数据就可以了。

1赞

我是这样做的,一张四方连续的图,创建九张,人物始终在中间,当人物走到5号图右边界,就把,1,4,7号图移到最右边 ,当人物走到5号图上边界,就把7,8,9号图移到最上边,其他两个方向同样处理

1赞

如果地图只是一个屏幕大小的sprite 那么每次加载地图会卡到炸 按照最低配置分辨率720x1280来说,玩家每次加载的图片都太大了,一定会掉帧。
图片可以切成256x256的小地图 根据屏幕大小和自己的位置换算出对应的格子 只加载屏幕大小四周+1|2的方便加载时不会出现黑边
如果你的地图不大,不需要考虑回收这个问题,每次更换地图在处理回收,如果地图很大,那么需要处理不再屏幕范围内显示的格子,通过对象池来缓存起来
一般来说这种格子只需要一个Node 挂载一个sprite组件就行 这样的话就不要做预设了,因为不是很复杂。如果你通过预设加载,你可以自己debug下时间差,预设加载的速度没有自己new的快。或者你把所有图全部切成预设,直接加载预设,那当我没话说。splitImg.rar (1.1 KB) 这是python的切图代码 把图片按照256x256切 横着切 不够256的切剩余像素

1赞

tileMap,get新技能 :pray:

我现在也是这样,不卡了,但是移动这些图的时候会产生黑边,你移动图是怎样实现的呢?我用的是setPosition(),按照图片的尺寸算下来的话应该是图片之间边缘刚好在一起,没有黑边才对

对对,现在越来越卡,我看了一下每次加载3个sprite,就增加3个darw call,到100多个darw call的时候就卡的不能玩了,我在这里搜帖子,有说做darw call优化的,用分层管理,但是这个我真的是不懂了,无从下手,不知道从哪里开头可以降低darw call

是在update里setPosition(),没发现黑边

你是想做吸血鬼那种地图?很简单啊,比如你有10种地图格子资源,进游戏之前先全部加载到内存里。然后布一个全是格子的场景,为了防止黑边的问题,这些格子构建的范围要比屏幕略大一些,然后每次角色移动的右边的时候就把最左侧的一列挪到最右侧,移动到上边的时候就把最下边的一行挪到最上面,其他同理。这种做法几乎没啥开销,整个场景就1个drawcall,怎么会卡?

1赞

现在是这样做的,不卡了,就是格子已经大了20像素,还是会有黑边 :+1:

这样确实就一个dc,爽翻了