好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Phaser飞机大战讲义(三)

目录:

l   真正的子弹实现, group 真正用法,提高性能

l   敌机生成的逻辑实现

l   代码的完善

l   实现微信分享

 

池的概念

在编程过程中,我们经常接触池的概念,比如线程池,连接池,对象池,都是池的思想,那么池到底是什么一种数据结构呢?

我们先来看一下原来我们是怎么使用对象的:

原来我们是简单粗暴的,用的时候,就 new 一个出来,用完了就扔掉,下次用,再 new 一个出来。这样有两个问题,第一,假如忘了扔,或者扔得不够彻底,会导致资源严重浪费;第二,每次用都要 new ,是一件麻烦事情。

而用了对象池,情况就不一样了。

我们在内存中维护一个池子,每次用的时候,从池子中拿一个出来用,用完之后放回去。这样做有几个好处,第一,内存中永远就那么几个对象,不会不停地 new ,第二,也不用每次用完再回收内存,只需要简单地放回池子。

至于它怎么优化性能,详见视频讲解。

 

在 Phaser 中通过 Group 实现对象池

饿汉式:一次创建足够多的元素

this.mybullets.createMultiple(50, 'mybullet');

懒汉式:用的时候从 group 中取,如果取不到,再新建一个,放入 group

var enemy = this.groups["enemy"].getFirstExists(false);
if(!enemy) {
  enemy = new GameTank.Enemy(this, position, 'enemy', 'enemy', {
    speed: (tankType == 1) ? 200 : 100,
    award: award,
    type: tankType
  });
} else {
  enemy.rebirth(position, {
    speed: (tankType == 1) ? 200 : 100,
    award: award,
    type: tankType
  });
}

飞机大战的敌机,子弹等都是用对象池思想来做的,具体就看视频讲解咯!

 

微信中自定义分享标题和图标

朋友圈标题 = 页面 title

朋友圈图标 = 页面中第一张大于 300x300 的图片

长按识别二维码 必须用图片,不能在 canvas 渲染

具体实现请参考代码和视频

转载请注明出处:http://HdhCmsTestphaser-china测试数据/tutorial-detail-12.html

查看更多关于Phaser飞机大战讲义(三)的详细内容...

  阅读:45次