网站地图    收藏   

主页 > canvas引擎 > Phaser游戏引擎 >

Phaser飞机大战讲义(三)

来源:未知    时间:2020-01-27 21:00 作者:xxadmin 阅读:

[导读] 作者:channingbreeze 日期:2017-03-19 Phaser实战系列教程第三课,以飞机大战为素材,讲述了Phaser中通过Group实现对象池的思想与技巧,实现飞机子弹,敌机的性能优化,完善游戏剩余部分,...



作者:channingbreeze

日期:2017-03-19

Phaser实战系列教程第三课,以飞机大战为素材,讲述了Phaser中通过Group实现对象池的思想与技巧,实现飞机子弹,敌机的性能优化,完善游戏剩余部分,最后实现在微信中分享的功能!




目录:

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://www.phaser-china.com/tutorial-detail-12.html

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论