让蔡徐坤来教你实现游戏中的帧动画(下)

拖了将近一个月,终于把帧动画这部分写完了,新关注的或者已经忘记的小伙伴可以看一下之前写的部分:

让蔡徐坤来教你实现游戏中的帧动画(上)

让蔡徐坤来教你实现游戏中的帧动画(中)

?

今天这个还是在上一篇的基础上进行修改的,主要讲解的如何在帧动画中添加事件,Cocos Creator 提供了两种添加事件的方式:可视化编辑帧事件和动态注册帧事件,下面将对这两种方式分别介绍。

没看过官方文档的小伙伴建议先熟悉一下官方文档哦!

https://docs.cocos.com/creator/manual/zh/animation/scripting-animation.html

一、可视化编辑帧事件

1.由于是在上篇文章的基础上进行修改,所以不再对工程目录进行介绍,先导入这次要用到的音乐资源 jinitaimei.mp3,然后创建一个文字说明和两个按钮:

2.然后再编辑一个
jump 的帧动画,我是只修改了 position 和 scale 属性,这个随意,自己发挥就好,并将动画拖到 player
节点上(本来是想把跳舞的也做出来的,但想到学会技术才是重点,于是只是简单的修改了 position 和 scale
属性,我不会告诉你们我是太懒的~):

3.绑定动画后,编写脚本如下,并将改脚本挂在到 player 节点上(注,如果挂在到非挂载对应动画节点上将不能获取到回调函数):

 1 // animationEvent.js
 2
 3 cc.Class({
 4     extends: cc.Component,
 5
 6     properties: {
 7         player: cc.Node,
 8         playBt: cc.Node,
 9         stopBt: cc.Node,
10         music: {
11             default: null,
12             type: cc.AudioClip
13         }
14     },
15
16     onLoad() {
17         this.playBt.on(‘touchstart‘, this.cbPlay, this);
18         this.stopBt.on(‘touchstart‘, this.cbStop, this);
19
20         this.anim = this.player.getComponent(cc.Animation);
21     },
22
23     // playBt 回调函数
24     cbPlay(event) {
25         this.anim.play(‘jump‘);
26         this.node.parent.getChildByName(‘label_01‘).active = false;
27     },
28
29     // stopBt 回调函数
30     cbStop(event) {
31         this.anim.stop();
32         this.player.position = cc.v2(0, 0);
33         this.player.setScale(1);
34         cc.audioEngine.stopMusic();
35         this.node.parent.getChildByName(‘label_01‘).active = true;
36     },
37
38     // jump 动画 play 回调函数
39     onJumpPlay(type, state) {
40         cc.audioEngine.playMusic(this.music, false);
41     },
42
43     // jump 动画 finished 回调函数
44     onJumpFinished(type, state) {
45         cc.audioEngine.stopMusic();
46         this.anim.play(‘play‘);
47     },
48
49     // play 动画 finished 回调函数
50     onPlayFinished(event) {
51         this.node.parent.getChildByName(‘label_01‘).active = true;
52     }
53 });

4.最后在帧动画中添加帧事件并绑定对应回调函数就可以了,将时间线拖到对应关键帧位置,点添加关键帧按钮,之后编辑关键帧绑定对应回调函数即可(别忘了将对应节点也绑定到属性面板上啊!):

5.之后可以欣赏才艺满满 CXK 的唱、跳、rap 和篮球了:

二、动态注册帧事件

1.动态注册事件的话只需要编辑脚本即可,就不需要在编辑器上绑定回调函数了(我发现官方文档中对单个 cc.AnimationState 注册回调的方法并不正确,添加后不起作用,只有对组件注册事件时才正确,因此自己判断了一下,如果小伙伴知道怎么处理欢迎评论、私聊我哦!),编写脚本如下:

 1 // animationEvent.js
 2
 3 cc.Class({
 4     extends: cc.Component,
 5
 6     properties: {
 7         player: cc.Node,
 8         playBt: cc.Node,
 9         stopBt: cc.Node,
10         music: {
11             default: null,
12             type: cc.AudioClip
13         }
14     },
15
16     onLoad() {
17         this.playBt.on(‘touchstart‘, this.cbPlay, this);
18         this.stopBt.on(‘touchstart‘, this.cbStop, this);
19
20         this.anim = this.player.getComponent(cc.Animation);
21
22         this.anim.on(‘play‘, this.onAniPlay, this);    // 注册 play 监听事件
23         this.anim.on(‘finished‘, this.onAniFinished, this);    // 注册 finished 监听事件
24     },
25
26     // playBt 回调函数
27     cbPlay(event) {
28         this.anim.play(‘jump‘);
29         this.node.parent.getChildByName(‘label_01‘).active = false;
30
31     },
32
33     // stopBt 回调函数
34     cbStop(event) {
35         this.anim.stop();
36         this.player.position = cc.v2(0, 0);
37         this.player.setScale(1);
38         cc.audioEngine.stopMusic();
39         this.node.parent.getChildByName(‘label_01‘).active = true;
40     },
41
42     // 动画 play 回调函数
43     onAniPlay(type, state) {
44         let jump = this.anim.getAnimationState(‘jump‘);
45
46         if (state == jump) {    // 判断是不是 jump 动画
47             cc.audioEngine.playMusic(this.music, false);
48         }
49     },
50
51     // 动画 finished 回调函数
52     onAniFinished(type, state) {
53         let jump = this.anim.getAnimationState(‘jump‘);
54         let play = this.anim.getAnimationState(‘play‘);
55
56         if (state == jump) {    // 判断是不是 jump 动画
57             cc.audioEngine.stopMusic();
58             this.anim.play(‘play‘);
59         } else if (state == play) {    // 判断是不是 play 动画
60             this.node.parent.getChildByName(‘label_01‘).active = true;
61         }
62     }
63 });

2.之后可以欣赏才艺满满 CXK 的唱、跳、rap 和篮球了:



推荐阅读:

让蔡徐坤来教你实现游戏中的帧动画(上)

让蔡徐坤来教你实现游戏中的帧动画(中)

一文教你实现「飞机大战」里战机的控制逻辑

自定义虚拟摇杆组件让你一劳永逸



我是「Super于」,立志做一个每天都有正反馈的人!

原文地址:https://www.cnblogs.com/yu97271486/p/11506461.html

时间: 2024-10-05 04:59:56

让蔡徐坤来教你实现游戏中的帧动画(下)的相关文章

从蔡徐坤工作室连发三个声明直指B站看社会态度

据悉蔡徐坤由于在2019年1月份成为了NBA官方形象代言人之,他的打篮球的视频就开始被B站的UP主们剪辑得乱七八糟的,其视频中包含有侮辱蔡徐坤的语言文字,就为了吸引流量,这些B站的搞怪达人们也是没有底线,闹得蔡徐坤的粉丝团说要退出B站,永不再更新:蔡徐坤工作室也发出了严正的声明要求B站立即删除含有与当事人不符的恶意言论的恶搞视频.B站的回应似乎是并没有被律师函吓到,还晒出了范志毅败诉的文章. 茅叔一直以来,对拿明星的琐事来做文章的人都是看不起的,因为茅叔觉得这会带动病态的消费明星效应的方式,也会

需求分析心得 软件1703蔡徐坤队

郑建国,王锦权 APP需求分析过程: 在第一次与老师的沟通中主要提到了机器训练模型以及一个提供给设计师打标的微信小程序,关于app部分只是暂时定下需要有一个app,这就导致在第一阶段负责app的成员对于app的需求分析没有一个良好的方向.在第三次与老师沟通的过程中提及了app的需求,了解到app并不是本项目的主要工程,在与老师沟通之后发现老师对于app的需求与负责人的个人设定有较大的不符合,这在一定程度上也导致了app的需求花费了很长的时间. 心得: 当客户(这里相当于老师)点出某一需求,就一定

教你在Linux中如何用命令或手动修改文件来添加一个用户

教你在Linux中如何使用命令或手动修改文件添加一个用户 首先我们从一个例子进行引入:添加一个happy用户,基本组为happy(5200),附加组为luzhi. 一.用命令的方法实现: groupadd -g 5200 happy useradd -u 5200 -g happy -G luzhi  happy passwd happy su - happy 这样就这个用户就创建成功了. 下面来演示一下: 验证系统中是否存在happy用户,从输出看是没有存在happy用户的. 2.我们先建一个

手把手教你写Sublime中的Snippet

手把手教你写Sublime中的Snippet Sublime Text号称最性感的编辑器, 并且越来越多人使用, 美观, 高效 关于如何使用Sublime text可以参考我的另一篇文章, 相信你会喜欢上的..Sublime Text 2使用心得 现在介绍一下Snippet, Snippets are smart templates that will insert text for you and adapt it to their context. Snippet 是插入到文本中的智能模板并

?Unity 2D游戏开发教程之2D游戏的运行效果

Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑问,会在本节集中揭晓. (1)单击Unity上方,工具栏里的播放按钮,开始运行当前的游戏,默认精灵当前进入的是Idle动画状态,如图1-34所示. 图1-34  Idle状态 (2)当读者按下键盘上的左.右方向键,或者A.D键的时候,精灵会进入Walking动画状态,并且会向左或者向右移动,如图1-3

教你从进程中判断病毒木马的存在

教你从进程中判断病毒木马的存在 任何病毒和木马存在于系统中,都无法彻底和进程脱离关系,即使采用了隐藏技术,也还是能够从进程中找到蛛丝马迹,因此,查看系统中活动的进程成为我们检测病毒木马最直接的方法.但是系统中同时运行的进程那么多,哪些是正常的系统进程,哪些是木马的进程,而经常被病毒木马假冒的系统进程在系统中又扮演着什么角色呢?请看本文. 病毒进程隐藏三法 当我们确认系统中存在病毒,但是通过“任务管理器”查看系统中的进程时又找不出异样的进程,这说明病毒采用了一些隐藏措施,总结出来有三法: 1.以假

Kail Linux渗透测试教程之在Metasploit中扫描

Kail Linux渗透测试教程之在Metasploit中扫描 在Metasploit中扫描 在Metasploit中,附带了大量的内置扫描器.使用这些扫描器可以搜索并获得来自一台计算机或一个完整网络的服务信息.本节将介绍使用Metasploit中的辅助模块实现扫描. [实例4-4]在Metasploit中,扫描目标主机.具体操作步骤如下所示: (1)启动MSF终端.执行命令如下所示: root@kali :~# msfconsole msf> (2)搜索所有可用的扫描模块.执行命令如下所示:

贵阳SEO 教你建站中让wordpress最新评论列表更美观的代码及添加方法

贵阳SEO请添加链接描述 教你建站中让wordpress最新评论列表更美观的代码及添加方法 在我们的网站建设过程中,使用wordpress默认的最新评论,大家是不是觉得太单调了,也不是很美观,并且也 不能按照我们的需求列表显示最新评论的内容,贵阳SEO今天分享给大家一段修改方便的带有头像的最新评论列 表代码,添加方法如下:1.打开需要显示最新评论列表的文件(一般在网站的侧边栏sidebar.php中):2.在合适的位置添加以下代码:<?php$show_comments = 8; //评论数量$

大佬教你在springMVC中使用dubbo注解配置的问题

问题,在controller中无法通过注解自动注入dubbo服务,但是在service中可以自动注入.package com.sl;br/>@Controllerpublic class P{br/>//期望注入dubbo服务@Reference(version="1.0.0")private I0 o;br/>//注入service@Autowiredprivate S s; @RequestMapping("p")public void p()