承接上话
管道的生成以及对象池的应用
首先创建一个预制体block,由俩个精灵节点组成,在脚本中声明并挂载到相应的位置。
@property(cc.Prefab)
block: cc.Prefab = null;
其次定义一个对象池(好处在于可以重复利用生成的对象,不必一直重新生成)
//初始化管道对象池
initBlockPool() {
this.blockPool = new cc.NodePool();
let bCount = 6;
for (let i = 1; i <= bCount; i++) {
let block = cc.instantiate(this.block);
this.blockPool.put(block);
}
}
//向对象池请求对象
createBlock() {
let block: cc.Node = null;
if (this.blockPool.size() > 0) {
block = this.blockPool.get();
} else {
block = cc.instantiate(this.block);
}
block.parent = this.blockParent;
return block;
}
//设置block位置pos
setBlockPos() {
let block = this.createBlock();
let randomY = Math.random() * 450 - 210;
let x = cc.winSize.width / 2;
let pos = cc.v2(x, randomY);
block.setPosition(pos);
block.getComponent('Block').initBlock();
}
//回收对象
onBlockKill(block) {
this.blockPool.put(block);
}
对于管道生成时位于陆地的前面,是因为管道是后面生成的所以会盖着陆地有以下俩种解决方式
方式一:通过调整zindex属性——父节点主要根据节点的 zIndex 和添加次序来排序添加次序来排序,拥有更高 zIndex 的节点将被排在后面,如果两个节点的 zIndex 一致,先添加的节点会稳定排在另一个节点之前。
方式二:就如同我上面代码定义的添加一个blockparent节点位于land节点之前,作为block的父节点,也能到达效果。