【用Cocos Creator给暗恋的女生写一个游戏(8)】——(Run Game) Prefab的动态管理
我们先来考虑一下这个PrefabManager是干什么的,我们的游戏中有重复出现的水管和老公,所以PrefabManager要能够动态管理他们,理所当然要有创建和销毁的方法,创建很简单,我们只需要每隔一段距离往pipeLayer添加子节点就行了,但销毁它们还是需要一些技巧的,从逻辑角度来说,当水管和老公移动到屏幕外时我们就要将他们销毁,这里我们用一个普通班不会教的方法——利用碰撞检测系统
我们先给PrefabManager添加一个碰撞组件,编辑如图
给水管兄弟添加碰撞组件,设置tag为333
给水管哥哥添加碰撞组件,设置tag为3331
给水管弟弟添加碰撞组件,设置tag也为3331
给老公添加碰撞组件,设置tag为666
PrefabManager.js
cc.Class({extends: cc.Component,properties: {pipeGroupPre:cc.Prefab,starPre:cc.Prefab,pipeLayer:cc.Node,//上下管子之间距离范围spacingRange: cc.p(0,0),// 下面管子Y轴偏移量范围botYRange: cc.p(0,0),// 左右管子之间距离pipeSpace:0,//第一个管子位置oPipeX:0,//星星位置范围starYRange:cc.p(0,0),},init: function (game) {this.game = game;this.pipePool = new cc.NodePool();this.starPool = new cc.NodePool();for(var i=0;i<4;i++){this.pipePool.put(cc.instantiate(this.pipeGroupPre));this.starPool.put(cc.instantiate(this.starPre));}this.curPipeX = this.oPipeX;//当前管子位置this.spawnPipe();this.spawnPipe();cc.director.getCollisionManager().enabled = true;},onCollisionEnter: function(other,self){if(other.tag === 333){this.desPipe(other.node);}else if(other.tag === 666){this.desStar(other.node);}},spawnPipe: function(){var pipeGroup = this.pipePool.get();var pipeTop = pipeGroup.getChildByName("PipeTop");var pipeBot = pipeGroup.getChildByName("PipeBot");var botYPos = this.botYRange.x + Math.random() * (this.botYRange.y - this.botYRange.x);var space = this.spacingRange.x + Math.random() * (this.spacingRange.y - this.spacingRange.x);var topYPos = botYPos + space;pipeTop.y = topYPos;pipeBot.y = botYPos;pipeGroup.x = this.curPipeX;this.pipeLayer.addChild(pipeGroup);this.spawnStar();this.curPipeX += this.pipeSpace;},desPipe: function(node){this.pipePool.put(node);this.spawnPipe();},spawnStar: function(){if(Math.random() < 0.8){var star = this.starPool.get();star.y = this.starYRange.x + Math.random()*(this.starYRange.y - this.starYRange.x);star.x = this.curPipeX + this.pipeSpace/2;this.pipeLayer.addChild(star);}},desStar: function(node){this.starPool.put(node);},});
按照惯例,我们从上往下看
在属性中我们定义了需要用到的两个Prefab和一个pipeLayer节点,还有一些随机设置Prefab的参数(这里用二维的点来表示范围,x是最小值,y是最大值)
第一个管子的位置要在屏幕外
在init方法里我们定义了两个cc.NodePool,分别存放pipeGroup和star
最后排的那位同学问了一个问题”为什么要用NodePool,直接用instantiate复制和destroy销毁不就行了么?”
老师很表扬这种勇于提问的表现,但也要批评这位同学不好好预习的行为
现在我们来翻一下官方文档
“记住了吗”
“记住了”
屏幕里最多出现两个水管,因为人生难免有意外,所以我们在pool里放四个,
当prefab滚到屏幕外的回收区时,我们就把它放回pool里,这样就可以实现一个良性循环,毕竟全球变暖了,话说今年好像比去年热了,话说我好像跑题了。。。
每添加一个pipeGroup我们就要调用一次spawnStar方法,但老公不是一个随便的人,所以我们要给他添加一个出现的概率,0.8吧,毕竟老公是我们这个游戏的唯一吸引力。。。
最后我们要在Game.js里初始化PrefabManager
var Player = require("Player");
var CameraManager = require("CameraManager");
var PrefabManager = require("PrefabManager");
cc.Class({extends: cc.Component,properties: {player:Player,cameraManager:CameraManager,prefabManager:PrefabManager,},onLoad: function () {//返回键返回菜单cc.eventManager.addListener({event: cc.EventListener.KEYBOARD,onKeyPressed: function(keyCode, event) {if(keyCode == cc.KEY.back){cc.director.loadScene('Menu');}}}, this.node);this.startGame();},startGame: function(){this.cameraManager.init(this);this.prefabManager.init(this);this.player.init(this);},stopGame: function(){},gainScore: function(){},gainEnergy:function(){},
});
看一下效果
【用Cocos Creator给暗恋的女生写一个游戏(8)】——(Run Game) Prefab的动态管理相关推荐
- 【用Cocos Creator给暗恋的女生写一个游戏(3)】——游戏加载界面
恰好今天Creator1.2发布,我们紧跟潮流,就用1.2开始做吧 X给游戏起了一个名字47-21,其中深意自己体会. (其实就是思琪名字的谐音,并且今年是她21岁的生日...当然你也可以理解为思琪爱 ...
- 全套源码丨Cocos Creator 轻松玩转 3D 策略对战游戏,创意拉满!
又一款 Cocos Demo Team 的作品<疯狂打群架>上线了!<疯狂打群架>是一款 3D 策略对战小游戏,具有丰富的关卡.兵种等元素,项目完整开源,含工程源码.美术资源. ...
- 有没有测试女生暗恋的软件,判断一个女生有多喜欢你?有一套专门的“测试方法”,一试便知...
原标题:判断一个女生有多喜欢你?有一套专门的"测试方法",一试便知 如何判断一个女生有多喜欢你? 在追女生的过程中,如果你能了解到女生对你的真实想法,那就可以判断正确的表白时机. ...
- Cocos Creator 一步一步实现重力球游戏
「获取源码」 点击上方蓝字关注公众号「游戏开发小白变怪兽」,回复「重力球」获取源码及美术资源. 「游戏玩法」 通过手机陀螺仪,调整手机,让球从上一层的间隔中落到下一层,楼层会不断上涨,如果球碰到上方或 ...
- Cocos Creator一步一步实现重力球游戏,附完整代码
『 游戏玩法 』 通过手机陀螺仪,调整手机,让球从上一层的间隔中落到下一层,楼层会不断上涨,如果球碰到上方或者下方的火焰,游戏结束. 『 游戏预览 』 『 开发工具 』 1. CocosCreator ...
- 用c语言给心仪的女生写一个电子钢琴
导火线 2020/3/26 周四的晚上,上完公选课的我跑去打了几局排位,还遇到对面开挂.我心里那个气啊,就差2颗星了,还让不让人玩了.直接举报! 完了之后.某某人给我发了一条微信,说某某人其实比较喜欢 ...
- 判断奇偶microsoft visual basic_#梅园# 在心理学上面如何判断一个男生暗恋你的表现...
都知道暗恋其实是比较痛苦的一件事情,因为暗恋只有自己一个人知道对方并不知道,但是有时候可以通过一个人的表现看出他是不是暗恋你,那一个男生暗恋你的表现都有哪些呢?如果一个男生暗恋你的话,你会发现他总会在 ...
- json list格式_来来来,一文让你读懂Cocos Creator如何读写JSON文件
前言 在游戏开发过程中,读取配置文件是必不可少的,而使用JSON做配置文件又比较常见,本文重点给大家讲述如何在Cocos Creator开发中读取和解析JSON数据文件以及如何写JSON文件. 一.J ...
- Cocos Creator入职学习日记——篇1(KeyWord:艺术字、渐变色、透明过渡特效)
刚入职,事情不是特别多,看到了之前一直在找的Cocos Creator的一些使用技巧,简做记录 目录 一.艺术字 二.渐变色 三.透明过渡特效 四.分享时间 一.艺术字 Cocos Creator的艺 ...
最新文章
- Oracle 12c因bug导致ORA-04031问题处理过程 | 云和恩墨技术通讯精选
- python和c 的区别-Python与C语言有什么区别?
- RDS数据订阅服务使用说明
- 看透网络执法官的本质
- java 中文转gb2312_Java将GB2312编码转化为汉字
- php实现微信第三方登录
- 教你使用SQLite Autoincrement(自动递增)
- 服务器淘汰cpu组装的电脑,从服务器淘汰下来的至强cpu还可以用多久
- 苹果电脑的计算机系统在哪里,苹果电脑切换系统按哪个键【方法介绍】
- Linuxnbsp;下摄像头驱动支持情况(…
- 2019年8月23日 星期五(韩天峰的swoole)
- 区分统一社会信用代码、组织机构代码、注册号
- centOS之php-fpm不可用
- 大三,请问现在自学Java还来得及吗?
- 识图在线识图_三个图片无损放大在线工具分享,把模糊图片变清晰
- Java 获取指定日期
- 美团C++软件开发笔试题
- c语言平台答案,C语言平台答案.docx
- (12)RabbitMQ的TTL(消息有效期)和DLX(死信交换机/队列)
- cordic sinh matlab,利用FPGA进行基本运算及特殊函数定点运算