【Cocos Creator 实战】05 - 如何判断拼图完成(胜利)
文章目录
- 概览
- 主要内容
- 项目资源
- 开搞
- 胜利规则
- 核心代码
- 总结
- 知识点
- 下一步
继续继续。
上一篇地址:【Cocos Creator 实战】04 - 如何给拼图加上吸附效果
概览
主要内容
来看看今天要做的内容:
- 如何判断拼图游戏已经结束(胜利)
来看看将要实现的效果:
项目资源
- 项目地址:https://github.com/BottleMan/Bottle-s-Jigsaw/tree/05_checkwin
- 演示地址:点击前往
推荐大家先把项目 clone 到本地,然后参考着代码来看本篇文章。
我的每篇文章会对应一个分支,大家直接看对应的分支就可以,master 对应的是最新的内容,会整合各个分支。
演示地址也是对应每篇文章独立部署的。
开搞
胜利规则
1、我们还是先标记出每块拼图的位置,同时给每块拼图编号
2、无论拼图的位置怎么变化,如果想要最终结果是完整的话,那么每块拼图的相对位置一定是固定的,即如图中显示
3、所以我们可以总结出来下面的规律
let conditions = [{x: 270, y: 0}, // 2-1{x: 270, y: 0}, // 3-2{x: 270 * (-2), y: -180}, // 4-3{x: 270, y: 0}, // 5-4{x: 270, y: 0}, // 6-5{x: 270 * (-2), y: -180}, // 7-6{x: 270, y: 0}, // 8-7{x: 270, y: 0}, // 9-8];
上面的每一个元素表示两个拼图的相对位置,比如第一个 {x: 270, y: 0}
表示编号2的拼图在编号1的拼图的 (x+270, y+0)
位置,下面的其他元素同样的道理。
至于编号问题,我们当时在初始化的时候就是按照 1-9 的顺序初始化的,所以,itemManager.items
中的元素就是按照 1-9 的顺序的拼图节点,直接拿来用就可以。
和上一篇文章说的吸附一样哈,胜利的规则不是只有一个,大家可以开动自己聪明的小脑瓜壳子,一定可以想到比我这个更科学的方法。
核心代码
1、修改 item-manager.js
,增加检查结束方法 checkWin
checkWin() {let conditions = [{x: 270, y: 0}, // 2-1{x: 270, y: 0}, // 3-2{x: 270 * (-2), y: -180}, // 4-3{x: 270, y: 0}, // 5-4{x: 270, y: 0}, // 6-5{x: 270 * (-2), y: -180}, // 7-6{x: 270, y: 0}, // 8-7{x: 270, y: 0}, // 9-8];let j = 0;for (let i = 0; i < this.items.length - 1; i++) {let thisPos = this.items[i].node.position;let nextPos = this.items[i + 1].node.position;if (Math.abs(nextPos.x - thisPos.x - conditions[j].x) > 5) return;if (Math.abs(nextPos.y - thisPos.y - conditions[j].y) > 5) return;j++;}alert('YOU WIN!!!');}
其实核心代码就这一块,但是由于代码有点乱,我们再简单整理一下之前的代码。
2、吸附动画完成时,回调 checkWin
方法
还记得我们上一篇文章的移动动作吧:
let action = cc.moveTo(0.1, targetVec);
node.runAction(action);
我们将他简单修改一下,这次使用 cc.sequence
来执行动作
let finished = cc.callFunc(this.checkWin, this);
let action = cc.moveTo(0.1, targetVec);
let seq = cc.sequence(action, finished);
node.runAction(seq);
3、简单讲解一下 cc.sequence
(顺序动作)
cc.sequence
顺序动作可以让一系列子动作按顺序一个个执行,例如:
// 让节点左右来回移动var seq = cc.sequence(cc.moveBy(0.5, 200, 0), cc.moveBy(0.5, -200, 0));node.runAction(seq);
好了,我们再回过头看第二条,cc.sequence(action, finished)
就表示先执行一个 moveTo
的动作,再执行 finished
回调。
简单吧。
总结
知识点
1、设计一套判断拼图结束的规则
2、cc.sequence
顺序动作的简单实用
下一步
这篇的内容比较少哈,本来想就 cc.sequence
多讲点示例的,但是发现目前还用不上,等后面用上的时候再说吧。
到目前为止,关于 Cocos Creator 基本的内容其实都讲的差不多了,真的,你别不信,就会这些东西,你上手绝对没问题了,等遇到想要解决的问题的时候,直接网上冲浪找一下解决方案就可以了。
后面文章可能节奏也会更快一点,基础的东西直接越过不讲了,不然我这文章得写一辈子。
下面的内容就是丰富丰富界面元素吧,毕竟现在进来就是拼图也太简陋了,对不住我们世界上最好的拼图游戏的名头。
下一篇地址:【Cocos Creator 实战】06 - 如何给拼图游戏添加计时器
【Cocos Creator 实战】05 - 如何判断拼图完成(胜利)相关推荐
- 【Cocos Creator 实战】02 - 给拼图游戏加上音乐和音效
文章目录 概览 主要内容 项目资源 开搞 使用 AudioSource 播放(静态) 使用 AudioEngine 播放(静态 + 动态) 静态播放 动态播放 AudioSource 和 AudioE ...
- 【Cocos Creator 实战】03 - 如何「拿起」拼图游戏的每块图片
文章目录 概览 主要内容 项目资源 开搞 什么是 zIndex 关于 zIndex 的注意事项 需求分析 核心代码 效果 总结 知识点 下一步 好了,书接上回,继续给我们的拼图游戏添枝加叶. 上一篇地 ...
- 【Cocos Creator 实战】06 - 如何给拼图游戏添加计时器
文章目录 概览 主要内容 项目资源 开搞 项目结构 字体 如何控制节点的显示&隐藏 如何设置节点的相对位置 & 自动大小 & 对齐策略 如何防止节点的点击穿透 如何倒计时 总结 ...
- 【Cocos Creator 实战教程(2)】——天天酷跑(动画、动作相关)
转载请保留原文链接,个人公众号:xinshouit(新手程序员),欢迎关注 准备工作 把背景图拉长,很长很长的那种....一会我们要让它滑动起来 背景动画 为背景节点添加滚动动画 现在背景就循环滚动起 ...
- slider节点透明背景_【Cocos Creator 实战教程(1)】——人机对战五子棋(节点事件相关)...
一.涉及知识点 场景切换 按钮事件监听 节点事件监听 节点数组 循环中闭包的应用 动态更换sprite图片 定时器 预制资源 二.步骤 2.1 准备工作 首先,我们要新建一个空白工程,并在资源管理器中 ...
- 【Cocos Creator 实战教程(1)】——人机对战五子棋(节点事件相关)
整体思路 在15*15的棋盘上每一个可下棋子的地方都放置一个"隐形的棋子",当要在某个位置下子时就将该位置的棋子显示出来,在判断输赢逻辑里,我们根据这225个"隐形棋子& ...
- 【Cocos Creator实战教程(7)】——猴子摘月亮(平台动作,碰撞检测详解)
最后一个寒假说没就没... 话说我等Creator 的物理引擎等了好久好久,终于......还是没等到...... 我们今天就用碰撞检测系统和一些算法简单的模拟一下2D平台动作的物理特性吧 先来看一下 ...
- Cocos Creator实战教程(5)】——打砖块(物理引擎,碰撞检测)
1. 知识点 物理引擎 碰撞检测 2. 步骤 2.1 准备工作 搭一个游戏背景 2.2 小球运动 再建一个物理层,用来装游戏里的带有物理属性的东西,设置锚点为左下角 wall:墙//小球碰到就会反弹的 ...
- 【Cocos Creator实战教程(3)】——TiledMap(瓦片地图)组件
1. 前言 瓦片地图是由一张一张的正方形小图片拼接成的地图,例如炸弹人,QQ堂都是非常典型的瓦片游戏.瓦片地图(Tile Map) 不但生成简单,并且可以灵活的用于Cocos2d-x引擎.不论你的游戏 ...
最新文章
- 使用SQLite删除Mac OS X 中launchpad里的快捷方式
- 在用数据绑定的时候我为什么不能把焦点移出(Tab out)我的控件?(译)
- Linux入门基础教程之Linux下软件安装
- node-inspect命令行工具的调试使用方法
- dp打开思路4:POJ1189 UVA12511 HDU2845 HBCPC K
- unix到底有啥用_汽车后挡风玻璃上的“横线”到底有啥用?不懂就别说自己会开车了...
- Hibernate中hbm.xml文件的inverse、cascade、fetch、outer-join、lazy
- 使用SVN+apache搭建一个版本控制服务器
- AOP日志组件 多次获取post参数
- 针对dhtmlX当中的treegrid在java类当中的封装实现的步骤(后台代码)
- 分布式系统有哪些衡量指标?
- java 计算中位数方法
- 国家统计局长称今年经济增速可能超去年
- uhuntu五笔输入法fcitx安装
- 电赛专题 | E题-互联网的信号传输
- python实现docx的批注(comments)插入
- Windows7无法自动安装FT232RL驱动解决方法
- python 捕捉 ctrl+c 异常方法, os._exit() 和 sys.exit() 的用法和区别
- Linux进程调用execve,关于linux:在C语言中使用execve loader时子进程如何终止
- MySQL-基础-数据库和数据表
热门文章
- 计算机二级考试python考试大纲_2019年计算机二级Python语言程序设计考试大纲
- 装备属性相关:时装-时装购买消费时效代码
- OpenCV单目视觉定位(测量)系统【转载】
- jas CAS单点登录学习之一 单点流程
- pta龟兔赛跑Java_PTA|龟兔赛跑
- 获取用户当前周期(1=》月经期,2=》排卵期,3=》安全期)
- easyuefi只能在基于uefi启动的_如何以简单正确的姿势理解“UEFI”和“BIOS”?
- 柳工挖掘机智慧工厂开工;福建自研三款医疗手术机器人;华为oppo“牵手”签订协议|每日大事件...
- 安装openfiler、系统配置iscsi
- php 修改第二次出现的字符,php 替换字符串中第N次出现的字符代码