1

1

游戏预览

1

2

开始场景

搭建开始场景

摆放一个背景图,在背景图上添加背景地面、开始按钮、4个角色选择按钮、游戏logo。

创建游戏脚本

1. 实现开始按钮的回调,点击开始按钮,跳转到游戏场景。跳转场景方法如下:

cc.director.preloadScene('playScene', function () {   cc.director.loadScene('playScene');
});

2. 实现选择角色按钮的回调,点击某个角色时,先将其他角色设置为未选中状态,再将当前选择的角色设为选中状态,最后用cc.sys.localStorage.setItem(“key”,value);方法本地保存选择的角色类型。
3. 在onLoad()方法中,调用cc.sys.localStorage.getItem(“key”);方法获取到本地保存的角色类型,并设置角色按钮的选中状态。
4. 游戏中音效必不可少,点击各个按钮时,都需要播放音效,方法如下:
//播放音效
playSound : function(name, isLoop){ cc.loader.loadRes(name, cc.AudioClip, function (err, clip) {    if(err){    return; }   let audioID = cc.audioEngine.playEffect(clip, isLoop); });
},

开始场景和脚本关联

1. 将脚本拖到start场景的属性检查器中,并将脚本中声明的属性和组件关联起来,如下图:

2. 给开始按钮绑定回调事件,选中开始按钮,在属性检查器中,找到Button属性,将ClickEvents值改成1,表示有一个点击事件,再按照如下方式将函数和组件关联起来:

3. 给角色按钮绑定回调,方法和给开始按钮绑定回调完全一样,只是绑定的函数不同。

1

03

游戏场景

游戏玩法是控制我方英雄的发炮角度,如果打中敌方英雄就得分,否则会被敌方英雄的炮弹打中,如果我方英雄血量为0则游戏结束。

搭建游戏场景

1. 游戏主界面:包含背景,地面,我方英雄,分数文本,返回主界面按钮。

2. 结算界面:包含遮罩层,最高得分文本,当前得分文本,重新开始按钮,返回主界面按钮。

创建游戏脚本

gamePlay.js脚本是游戏的核心,主要方法如下:

1. 开启物理系统:

cc.director.getPhysicsManager().enabled = true;

2. 设置重力加速度:

cc.director.getPhysicsManager().gravity = cc.v2(0, -640);

3. 添加触摸监听,事件分为TOUCH_START(开始)、TOUCH_MOVE(移动)、TOUCHCANCEL(取消)、TOUCH_END(结束)四个状态,方法如下:

this.node.on(cc.Node.EventType.TOUCH_START, this.onEventStart, this);
this.node.on(cc.Node.EventType.TOUCH_MOVE, this.onEventMove, this);
this.node.on(cc.Node.EventType.TOUCH_CANCEL, this.onEventCancel, this);
this.node.on(cc.Node.EventType.TOUCH_END, this.onEventEnd, this);

4. 当开始触摸屏幕时,触发开始的回调onEventStart(),回调中开启定时器,每隔0.03秒角度加1,并改变炮台的角度,方法如下:

//更新炮管角度
updateGunAngle : function(){    this.shootLineImg.active = true;   this._curAngle = 0;    this.gunSchedule = function(){ if (this._curAngle < 90){    this._curAngle += 1;  this.myGunImg.angle = this._curAngle;  }   };  this.schedule(this.gunSchedule, 0.03);  },

5. 当结束触摸时,触发结束的回调onEventEnd(),回调中关闭定时器,方法如下:

//停止更新炮管
stopGunAngle(){ this.unschedule(this.gunSchedule);  this.shootLineImg.active = false;
},

6. 敌人开炮,需要先调整角度再发炮,炮的角度通过敌方子弹和我方英雄的坐标可计算出来,方法如下:

//敌方开炮
enemyOpenFire : function(){ //敌方子弹世界坐标  let enemyBulletPos = this._enemyNode.enemyBulletWorldPos();    //我方英雄世界坐标  let myHeroPos = this.myHeroImg.parent.convertToWorldSpaceAR(cc.v2(this.myHeroImg.position.x, this.myHeroImg.position.y + 30));    //计算夹角  let lenX = Math.abs(enemyBulletPos.x - myHeroPos .x);  let lenY = Math.abs(enemyBulletPos.y - myHeroPos .y);  let angle = Math.atan2(lenY, lenX) * 180 / Math.PI;    //设置敌方小火炮的角度    this._enemyNode.setGunAngle(angle);     //计算炮运行的距离  let len = Math.sqrt(Math.pow(lenX, 2) + Math.pow(lenY, 2));   this._enemyNode.gunAni(len);    this.playSound("sound/enemyBullet", false);
},

7. 更换纹理方法:

//更换纹理
setImgTexture : function(str, node){    cc.loader.loadRes(str, cc.SpriteFrame, function (err, spriteFrame) {    if (err) {  cc.error(err.message || err);   return; }   node.getComponent(cc.Sprite).spriteFrame = spriteFrame;    }.bind(this));
},

创建敌人脚本

敌人脚本包含敌人,柱子,敌方炮弹等信息,脚本中的主要方法有:

1. 随机设置柱子的高度:

//调整敌方柱子高度
setColumnHight : function(){    //随机获取高度    let y = Math.floor(Math.random() * -250) - 100;    this.cloumn.position = cc.v2(this._winSize.width / 2 + 100, y);
},

2. 敌人进出场的动作:

//敌人进场动作
comeOnAni : function(){ this.setColumnHight();  let w = Math.floor(Math.random() * (this._winSize.width / 4)); this.cloumn.runAction(cc.sequence(cc.moveTo(1.0, cc.v2(w, this.cloumn.position.y)), cc.callFunc(() =>{  this.enemyHeroImg.active = true;   this.enemyGunImg.active = true;    this.enemyAni();    }, this)));
},

//敌方柱子运动
enemyMove : function(){ this.enemyHeroImg.active = false;  this.enemyGunImg.active = false;   this.cloumn.runAction(cc.sequence(cc.moveTo(1.0, cc.v2(-this._winSize.width / 2 - 100, this.cloumn.position.y)), cc.callFunc(() =>{ if(this.callBack){  this.callBack();    }   })));
},

3. 敌人开炮:

//炮运动
gunAni : function(len){ let bulletPos = this.enemyBulletImg.position;  this.enemyBulletImg.runAction(cc.sequence(cc.moveTo(0.3, cc.v2(len, 0)), cc.callFunc(() =>{ if(this.hitHeroCallBack){   this.hitHeroCallBack(); }   this.enemyBulletImg.position = bulletPos;  })));
},

创建碰撞脚本

碰撞脚本是给需要做碰撞检测的刚体用的,在碰撞脚本中做碰撞监听,当触发监听后,再调用相应的回调。比如我方子弹需要监听与墙壁,敌人,柱子等物体的碰撞,那么我们先给子弹绑定好碰撞组件,如下图:

再在代码中实现碰撞的回调并保存下来,方法如下:

//碰撞监听
contactFunction (selfCollider, otherCollider){  if(this.callBack){  this.callBack(selfCollider, otherCollider); }
},  contactCallBack (callBack){ this.callBack = callBack;
},

最后在碰撞开始的监听中调用回调,方法如下:

onBeginContact ( contact, selfCollider, otherCollider){  if(selfCollider.tag == 0 && otherCollider.tag == 0){    cc.log("onBeginContact...");  //碰撞开始  this.contactFunction(selfCollider, otherCollider);  }
},

创建动画脚本

游戏中有英雄角色的等待和走路动作,敌人等待动作,如果在编辑器做动画,编辑的个数比较多,所以我的做法是通过修改纹理达到动画效果,用法是将这个脚本绑定到需要播放动画的节点上,并设置一张大图,方法如下:

使用方法:

playAni(nameStr, count, dt, isLoop){   this.stopAni(); this.node.getComponent(cc.Sprite).spriteFrame = this.bigImg.getSpriteFrame(nameStr + 0);  let array = [];    for(let i = 0; i < count; i++){   array.push(cc.delayTime(dt));   array.push(cc.callFunc(() =>{   this.node.getComponent(cc.Sprite).spriteFrame = this.bigImg.getSpriteFrame(nameStr + i);  }));    }           if(isLoop){ this.node.runAction(cc.repeatForever(cc.sequence(array)));  }   else{   this.node.runAction(cc.sequence(array));    }
},

参数分别是图片名称,图片张数,间隔时间,是否循环,调用方法:

this.shieldImg.getComponent("spriteFrameAni").playAni("shield", 4, 0.1, true);

1

4

获取代码

关注公众号,发送【大炮英雄】,获取代码。


等了那么久,终于等到新游戏啦!大炮英雄Cocos Creator实现,关注获取代码!相关推荐

  1. 借Blake老师的投篮小游戏公开课入门Cocos Creator 3D开发!

    点击上方蓝字关注我 效果预览 获取代码 关注公众号,发送[3D篮球]获取代码. 游戏介绍 ● 点击屏幕,根据按住屏幕的时间,进行蓄力,时间越短,发出去的力越小,时间越长,发出去的力越大,超过了最大力, ...

  2. 小游戏开发上手体验 - Cocos Creator

    微信群里最大的骚扰源有两种: 一是转发#吱口令#~!@#¥%--&*,长按复制此消息领红包之类的 另一种就是各种小程序和小游戏的分享 前天有同学无意间把一个小游戏分享到了答疑群中,我看了一下, ...

  3. 微信小游戏云开发在cocos creator中的设置

    之前用three.js手撸了一个微信小游戏半成品,但是因为这种手撸的方式,程序和美术很难配合,而且开发难度和时间成本太大,最终决定还是用cocos creator进行微信小游戏的开发. 微信小程序早已 ...

  4. 微信小游戏游戏圈处理(cocos creator处理)

    1. 创建游戏圈,具体可以参考:https://developers.weixin.qq.com/minigame/dev/tutorial/open-ability/game-club.html 2 ...

  5. [字节/头条]小游戏开发错误码Cocos Creator Engine Errors

    github链接:Cocos Creator Engine Errors 0100 %s not yet implemented. 0200 You should specify a valid DO ...

  6. Cocos Creator 3D v1.0.2 正式发布,新增小游戏平台支持

    ​Hi,各位开发者,Cocos Creator 3D 为大家带来翘首以待的新平台和新功能支持,v1.0.2 已正式发布,欢迎大家移步官网下载使用! 升级之前请根据项目情况进行必要的技术评估和版本备份噢 ...

  7. OPPO、vivo 小游戏正式上线,Cocos 率先支持

    OPPO .vivo 小游戏平台正式发布 在近期举办的 Cocos 开发者沙龙上,OPPO 和 vivo 小游戏商务负责人向与会开发者详细介绍了其小游戏的业务规划.用户属性.产品需求.合作方式.变现能 ...

  8. 最齐全的Cocos2D Cocos creator Cocos2Dx游戏源代码素材,速来收藏

    Cocos2D Cocos creator Cocos2Dx游戏源代码类资源应该算是素材类网站中必不可少的资源类型了吧~今天给大家推荐超好用,免费质量高的素材噢,让你坐拥海量资源同时又不撞款! 本人曾 ...

  9. Cocos Creator - 塞尔达的3D渲染风格,能在小游戏跑起来?

    塞尔达的3D渲染风格,能在小游戏跑起来? 渲染系统作为游戏引擎的核心模块,是引擎画面表现力的天花板,直接决定了游戏所能输出给玩家的内容上限.Cocos Creator 3.x 的渲染系统,从架构到设计 ...

最新文章

  1. GitHub如何删除一个repository(仓库)
  2. 视频监控PPP项目投资建设和运营模式分析
  3. (原)torch中微调某层参数
  4. 一步步编写操作系统 23 重写主引导记录mbr
  5. xcode 4.2开发 ——navigation controller 添加按钮
  6. .NET 动态脚本语言Script.NET系列文章汇总 非常精彩的应用举例
  7. SQL函数 left()、charindex()的使用
  8. 强化学习《基于价值 - Double Q-Learning》
  9. 华视读卡器多浏览器插件_翻遍Chrome商店,这9款插件值得安装
  10. 【Java】HashMap 和 Hashtable 的 6 个区别
  11. (转)VmWare下安装CentOS6图文安装教程
  12. 在线课程培训系统源码 在线授课 在线教育源码 网课小程序源码
  13. 北理乐学大学计算机实验报告,北理乐学实验六.doc
  14. js实现爬取QQ群管理页面所有QQ群成员信息
  15. Dubbo Monitor 分析
  16. 2. 文件如何进行md5校验和sha1校验
  17. 如何学习理财知识,零基础怎么学习理财
  18. XXE漏洞介绍及利用
  19. 群硕入列FoodTalks优质供应商地图数字化板块
  20. 看完,如果你不分享,是我的失败!--超好文章!

热门文章

  1. BUUCTF-Web-[极客大挑战 2019]Upload
  2. c语言用二维数组例题,C语言二维数组
  3. vue格式化时间方法
  4. RabbitMQ:订阅模型-消息订阅模式
  5. 接线 科思模块怎么和plc_plc与变频器的接线图_plc和变频器通讯接线图详解 - 全文...
  6. nimble 2 蓝牙开发API
  7. CCF认证考试201809-2买菜-Python实现
  8. 评测:Yahoo! Gmail Live三大邮箱
  9. 用python批量更新es数据根据id_Python Elasticsearch批量操作客户端
  10. 产品必备技能(三):互联网数据分析师、产品经理和运营常用数据网站合集