FlappyBird笔记(二)

承接上话

管道的生成以及对象池的应用

管道首先创建一个预制体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的父节点,也能到达效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值