基于Cocos Creator 2.3.0,使用TypeScript(ts)实现微信跳一跳

在看我这篇文章之前,首先您应该掌握一些基本知识,一是了解和使用cocos creator的常用控件,如Button,Label,Sprite等,脚本事件绑定等;Vscode的基本操作;TypeScript的基本语法;还有你需要安装java环境,安装Android Studio,下载NDK,Android SDK,搭建原生开发环境,为后续的打安卓包做准备;还有安装phython环境,下载node.js,使用npm install -g typescript来安装ts,你就可以操作如何把ts文件转化为js,当然Cocos Creator是把我们自动编译,但作为学习,我们应该去了解细节.还有get-ExecutionPolicy和set-ExecutionPolicy RemoteSigned设置脚本执行策略等等.
      当然还有最重要的一点,有不懂的东西,要学会主动去百度,去B站,去论坛找答案,你必须相信,你如今工作和学习遇到的绝大多数问题,网上都有非常优秀的解决方法,而且不止一种,你要做的应该是,减少摸索的时间,站在前人的肩膀上,集百家之长,混成一家.
      当我们准备好了上面的一切以后,我们开始开发小游戏跳一跳,先在此声明,我游戏使用的素材,都百度找的,我只用于自我开发游戏学习,不会商用.
      先上思维导图

1.首先介绍一下什么是预制体(Prefab)
   关于预制体的介绍Cocos官网有相关阐述:
   http://docs.cocos.com/creator/manual/zh/asset-workflow/prefab.html

   我个人理解,用简单的话来说,就是利用编译器的现有组件来组装一个全新的你自己目前需要的组件,说白了,就是new一个对象,由开发者来赋予这个对象具有那些属性.

 

上面是我做的一个方块预制体,这个预制体有一个icon是用来存方块图片的,还有mid,up等这些点,是用来确定棋子跳到方块上面的有效着陆点.这里有两个技巧,首先我们创建一个空节点,在空节点下面,创建一个方块图片Sprite(精灵)和一个Sprite(单色).单色的会和空节点的坐标一致,把精灵图片移动,图片最下方对准单色.至于mid,up这些单色点怎么来的,首先你要创建一个棋子的节点,把棋子往方块上面放来确定这些点,这个需要实际去操作,我自己弄了几遍就很熟练了.

2.创建棋子
        棋子要实现三个表现,移动,旋转,压缩,所以采用三个节点去分别控制,如图

移动我们用cc.jumpTo(0.5, target_pos, 200, 1),表示0.5s,移动到target_pos位置,高度200,跳跃一次

旋转我们用cc.rotateBy(0.5, 360 * this.direction)表示0.5秒,顺时针旋转360度或者逆时针旋转360度

压缩我们用cc.scaleTo(2, 1, 0.5)表示2s内压缩一半

creator编辑器默认锚点是(0.5,0.5),考虑到压缩的表象,我们把压缩用的图片锚点y轴方向的改为0

为了造成拖曳的效果,我们可以使用Motion Streak组件

还需要了解注册事件

cc.Node.EventType.TOUCH_START是当手指触摸到屏幕时

cc.Node.EventType.TOUCH_END是当手指在目标节点区域内离开屏幕

cc.Node.EventType.TOUCH_CANCEL是当手指在目标节点区域外离开屏幕时

3.convertToWorldSpaceAR()和convertToNodeSpaceAR()

  convertToWorldSpaceAR()表示把节点坐标系下的一个点转换到空间世界坐标系

  如:var mid_pos:any = this.mid_pos.convertToWorldSpaceAR(cc.v2(0, 0));

  就是把以this.mid_pos这个节点为参考系下的原点,转换为世界坐标,一般来讲原点在左下角,但是上面提到creator编辑器默认锚点是(0.5,0.5),所以此时原点的方向就是这个节点的中心点,也就是把中心点转换为世界坐标了

converToNodeSpaceAR()表示将一个点转换为节点坐标系

如:var w_pos: cc.Vec2 = this.cur_block.getChildByName("mid").convertToWorldSpaceAR(cc.v2(0, 0));

    this.game_player.setPosition(this.map_root.convertToNodeSpaceAR(w_pos))

setPosition是设置节点在父节点坐标系中的位置

上面是代码是为了实现游戏开始时,棋子在方块中间位置着落.那是怎么实现的呢

就是先把方块中心点变为世界坐标,然后把w_pos转换为this.map_root这个节点坐标系下的局部坐标,而this.game_players是属于

this.map_root节点的子节点,setPosition就是把棋子现在的位置设置到w_pos转换的局部坐标上去

为啥我要讲世界和局部坐标转换呢,因为这是完成游戏的一个关键点

4.方块的生成

 我们刚开始谈到了预制体,我们可以做很多个图片不一样的方块预制体,并把它们放入预制体数组中

@property([cc.Prefab])

block_prefab: Array<cc.Prefab> = [];

然后通过Math.random()来随机取数

this.cur_block = cc.instantiate(this.block_prefab[Math.floor(Math.random() * 3)]);

Math.random()是左闭右开区间,随机取0到1的数,取不到1,如果乘以3,则就是随机取0到3之间的数,

利用Math.floor()向下取整,只会取到了0,1,2这三个数中的一个,而ts的数组下标是从0开始的

5.屏幕的移动

 棋子是向右跳或者向左跳,x坐标可能是增加,也可能是减少,但是y坐标肯定是增加的

 所以我们要随机取方向,this.direction = (Math.random() < 0.5) ? -1 : 1;

移动屏幕使用cc.moveBy(0.5, offect_x, offect_y)

var seq:any = cc.sequence(m1, endfunc);

this.map_root.runAction(seq);

cc.sequence()顺序执行动作,先执行m1动作,再执行endfunc动作

6.棋子是否落在方块有效范围

  

 

就是计算棋子着落的点,方块可着落范围的边界点做比较,计算两点之间的距离,如果小于100像素,则落在有效范围

7.游戏流程控制

 

是否开始游戏可以设置一个boolean值,is_can_game:boolean = false;默认为false,点击开始游戏以后,变为true;

当棋子没有落在有效位置,弹出再来一次,点击再来一次,可以重新加载场景,来重置游戏cc.director.loadScene('main_scene');

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Cocos Creator是一个基于JavaScript和TypeScript开发的游戏开发引擎,它提供了丰富的功能和工具来帮助开发者创建游戏。要实现一个简单的搓牌动画,可以按照以下步骤进行: 1. 创建一个新的Cocos Creator项目,并导入所需的资源。 2. 在场景编辑器中创建一个节点,作为牌的容器。 3. 创建两个精灵节点,分别用作牌的背面和正面,并将它们添加到牌的容器中。 4. 使用属性检查器设置背面精灵节点的初始位置和角度,使其完全覆盖住正面精灵节点。 5. 在脚本文件中,通过获取背面和正面精灵节点的引用,可以开始实现搓牌动画。 6. 在脚本文件中,可以使用缓动动画来实现搓牌效果。可以使用Cocos Creator提供的"cc.tween" API来创建一个缓动动画序列。 7. 在缓动动画序列中,可以先设置背面精灵节点的位置和角度,使其慢慢移动和旋转,暴露出正面精灵节点。 8. 在动画序列的最后,可以设置正面精灵节点的位置和角度,使其慢慢恢复到初始状态。 9. 将动画序列应用到牌的容器节点上,并运行动画。 通过以上步骤,就可以在Cocos Creator实现一个简单的搓牌动画。根据具体情况,可以调整动画的效果和时间等参数,以满足需求。 ### 回答2: 搓牌动画是一种常见的游戏特效,下面我将使用Cocos Creator中的TypeScript语言为您实现一个简单的搓牌动画。 首先,在Cocos Creator中创建一个新的场景,并添加一个精灵节点作为显示牌的容器。确保您已经加载了纹理资源,并将其分别设置为牌背和牌面。 接下来,创建一个脚本组件`CardAnimation`,并将其挂载到显示牌的容器节点上。在脚本中,我们需要定义牌背和牌面两个精灵节点的引用,以及搓牌动画的开始和结束状态。 ```typescript const { ccclass, property } = cc._decorator; @ccclass export default class CardAnimation extends cc.Component { @property(cc.Sprite) cardBack: cc.Sprite = null; @property(cc.Sprite) cardFront: cc.Sprite = null; private isRevealing: boolean = false; start() { // 将牌面隐藏起来 this.cardFront.node.active = false; } revealCard() { if (this.isRevealing) return; this.isRevealing = true; // 开始搓牌动画 cc.tween(this.cardBack.node) .to(0.5, { scaleX: 0 }) .call(() => { // 动画完成时,显示牌面 this.cardBack.node.active = false; this.cardFront.node.active = true; }) .to(0.5, { scaleX: 1 }) .call(() => { this.isRevealing = false; }) .start(); } } ``` 最后,在场景加载时,调用`revealCard`方法启动搓牌动画。可以通过按钮点击或其他触发机制来调用这个方法。 ```typescript const { ccclass, property } = cc._decorator; import CardAnimation from "CardAnimation"; @ccclass export default class Game extends cc.Component { @property(cc.Button) btnRevealCard: cc.Button = null; @property(CardAnimation) cardAnimation: CardAnimation = null; onLoad() { this.btnRevealCard.node.on('click', () => { this.cardAnimation.revealCard(); }); } } ``` 这样,当点击按钮时,牌背会向左平滑搓动,并在动画完成后显示牌面。通过调整动画的时间和缓动函数,您可以进一步改进搓牌动画的效果。 ### 回答3: 在Cocos Creator使用TypeScriptTS实现一个简单的搓牌动画可以按照以下步骤进行: 1. 首先,创建一个新的Cocos Creator项目,并且确保项目中已经安装了TypeScript插件。 2. 在编辑器中创建一张背面朝上的牌的精灵,并将其命名为cardBack。 3. 创建一个TS脚本文件,例如CurlCardAnimation.ts,并将其附加到cardBack的节点上。 4. 在脚本中,首先导入必要的模块: ```typescript import { _decorator, Component, Animation, Node } from 'cc'; ``` 5. 然后,在脚本的onLoad方法中,获取cardBack节点的Animation组件,并定义两个动画剪辑对象: ```typescript private animation: Animation | null = null; private curlClip: AnimationClip | null = null; private uncurlClip: AnimationClip | null = null; onLoad() { this.animation = this.node.getComponent(Animation); this.curlClip = this.animation.getClips()[0]; this.uncurlClip = this.animation.getClips()[1]; } ``` 6. 接下来,创建一个公共方法,用于触发搓牌动画: ```typescript public playCurlAnimation() { this.animation?.stop(); this.animation?.play(this.curlClip); this.animation?.on('finished', this.playUncurlAnimation, this); } public playUncurlAnimation() { this.animation?.stop(); this.animation?.play(this.uncurlClip); } ``` 7. 最后,在编辑器的场景中创建一个按钮,并将按钮的点击事件绑定到playCurlAnimation方法。 8. 运行项目后,点击按钮时,搓牌动画将会触发。 这样,你就可以在Cocos Creator使用TypeScript实现一个简单的搓牌动画了。根据需求,你可以自定义动画剪辑和动画效果,使其更加丰富和炫酷。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoduangg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值