cocos creator 基础1,小白自学日常。

<!--作为一个初学者,难免有遗漏和不妥之处,还请不吝赐教,不胜感激。错则改之,无则加勉。

接触ccc的第一天。我首先去看了下Cocos Creator 用户手册(http://docs.cocos.com/creator/manual/zh/),然后跟着做了一个摘星星的小游戏。

第一天就是简单的复制粘贴,简单了解了一下操作界面和运行原理。第二天我找了下前辈们的教程,找了一个基础加实战的教程(http://forum.cocos.com/t/topic/40659),这里对作者表示感谢。

作为小白,不希望在选择教程这些环节浪费时间,等以后深入了解之后,再对这些教程进行推荐比较靠谱。下面主要记录学习过程,与同是初学者的共勉,对各位前辈表示膜拜。-->

第一天,大概内容就是看跳动的小球制作教程,然后分析代码。<!--像一些初学者的心路历程会以标注为注释的形式记录。-->

首先贴出代码:<!--是分析代码过程之后的代码,里面会有一些代码是用来测试方法参数,或者一些瞎玩的,但是都会注释,留下关键代码,表示新手了解关键字的过程,如果我认为有用的测试过程会在解释关键字的过程中提到-->

 1 cc.Class({
 2     extends: cc.Component,
 3
 4     properties: {
 5        jumpDuration: 1,
 6        jumpHight: 300
 7     },
 8
 9     balljumpAction: function() {
10         //var jumpRight = cc.moveBy(this.jumpDuration,cc.p(this.jumpHight,0)).easing(cc.easeQuadraticActionIn());
11         //var jumpLeft = cc.moveBy(this.jumpDuration,cc.p(-this.jumpHight,0)).easing(cc.easeQuadraticActionOut());
12         //定义小球跳起来的动作。
13         //var jumpUp = cc.moveBy(this.jumpDuration,cc.p(0,this.jumpHight)).easing(cc.easeQuadraticActionOut());
14         //var jumpUp = cc.moveBy(this.jumpDuration,0,this.jumpHight).easing(cc.easeQuadraticActionOut());
15         var jumpUp = cc.moveBy(this.jumpDuration,cc.p(0,this.jumpHight)).easing(cc.easeQuadraticActionOut());
16         //var jumpUp = cc.moveTo(this.jumpDuration,cc.v2(0,this.jumpHight)).easing(cc.easeQuadraticActionOut());
17         //定义小球落下去的动作。
18         var jumpDown = cc.moveBy(this.jumpDuration,cc.p(0,-this.jumpHight)).easing(cc.easeQuadraticActionIn());
19        //var jumpDown = jumpUp.reverse().easing(cc.easeQuadraticActionIn());
20         //var jumpDown = cc.moveTo(this.jumpDuration,cc.p(0,-this.jumpHight)).easing(cc.easeQuadraticActionIn());
21         //return cc.moveBy(this.jumpDuration,cc.p(0,this.jumpHight)).easing(cc.easeQuadraticActionIn());
22         //return cc.sequence(jumpUp,jumpDown);
23         return cc.repeatForever(cc.sequence(jumpUp,jumpDown));
24         //返回小球重复跳起来落下去的动作。
25         // return cc.repeat(cc.sequence(jumpUp,jumpDown),2);
26     },
27
28     onLoad () {
29         //this.node.runAction(cc.sequence(cc.moveBy(this.jumpDuration,cc.p(0,this.jumpHight)).easing(cc.easeQuadraticActionOut()),cc.moveBy(this.jumpDuration,cc.p(0,-this.jumpHight)).easing(cc.easeQuadraticActionIn())).repeatForever());
30         this.ballAction = this.balljumpAction();
31         //this.node.runAction(this.balljumpAction());
32         //在加载的执行动作。
33         this.node.runAction(this.ballAction);
34         //this.schedule(function(){this.node.stopAllActions();this.node.runAction(this.ballAction);},1);
35     },
36
37     start () {
38
39     },
40
41 });

Code

下面我会大概讲下我对代码的理解,主要是关键字的用法。<!-- 虽然 官方api(http://docs.cocos.com/creator/api)里面都有,但是毕竟把自己的理解写下来,不说麻烦别人指出对不对,就是以后自己回头看自己当初的理解,有个记录作为学习思考反省的依据也是蛮有必要的。-->

首先整体看代码:一个小球对象,它有两个属性,jumpDuraction是小球跳动的时间,jumpHight是小球跳动的高度。然后定义一个balljumpAction的方法,返回小球跳动的行动。最后在onload代码块(Sence加载的时候自动执行)里面调用执行小球balljumpAction方法。在ccc界面操作就是把画布中的ball图片节点添加上以上代码的组件,在属性检测器中可以对小球的两个属性进行调整。<!--可能对一些对象解释说法不准确,毕竟新手,学习过程必须经历的,等什么时候不在自称小白,我再承受语言必须准确的责任-->

依此列出阅读代码中遇到的关键字,参考官方api后,进行理解。

moveBy 移动指定的距离。

function cc.moveBy(duration: number, deltaPos: number | cc.Vec2, deltaY?: number): cc.ActionInterval       <!-- 这个是vbc里面的提示,鼠标移上去就有-->

方法有三个参数,第一个参数 duration: number 是指的持续的时间,类型为数字。第二个参数 deltaPos: number | cc.Vec2 是指 x轴增量 类型为数字,或者一个Vec2对象。(Vec2对象,在api里面可以查到,表示2D的向量和坐标,这里可以理解为拥有x,y两个属性的对象,moveBY能够使用这两个属性值作为自己的移动的距离依据,因为包括x和y,所以moveBy的第三个参数就不需要了,我也测试过在第二个参数是Vec2的同时,也给第三个参数一个值,虽然不会报错,但是对结果不会起任何作用),第三个参数deltaY?: number是指的Y轴的增量,类型为数字。(不是很明白这个?的意思,应该是可以不赋值的意思)

类似的有一个moveTo 移动到指定位置。<!-- (function cc.moveTo(duration: number, position: number | cc.Vec2, y?: number): cc.ActionInterval 方法的参数都一样,但是我直接把moveBy换成moveTo发现跳得更高,落得更低.那么是为什么呢?我在代码16行和19行做了一个测试,开始的确发现只是跳得更高和落得更低其他没区别。然后我去属性检测器看这个ball的节点的坐标到底是多少。然后我发现Position是指的相对应父节点的坐标,我把ball节点移出Canvas的分支,再测试就能看到小球以整个屏幕为基础的左下的两点运动,刚好是符合移动到传入Vec2的坐标值为目标的运动。在MoveTo和MoveBy中Vec2的作用不同,一个作为有方向,长度的向量,一个是有x,y的坐标。所以在api里面解释Vec2是表示2D的向量和坐标。)-->

和Moveby同样的参数,区别在于传入的Vec2对象是作为一个坐标。movetTo将为移动到这个坐标位置。

p 通过该简便函数创建Vec2对象。

function cc.p(x?: any, y?: number): cc.Vec2 传入两个数字参数获得一个Vec2对象。类似的有v2(function cc.v2(x?: any, y?: number): cc.Vec2 )。  <! -- cc.p(1,2)       cc.v2(1,2)  第一个参数可以是数字或者尺寸的对象  -->

easing 缓动运动。

(method) cc.ActionInterval.easing(easeObj: any): cc.ActionInterval

方法,可以实现easeObj(缓动对象)。缓动对象就是 小球跳跃用到的,easeQuadraticActionOut 按照二进制缓慢退出动作。easeQuadraticActionIn 按照二进制缓慢进入动作。<!-- 还有按照是四进制缓退缓入,五进制,弹性曲线,正弦函数,指数函数,圆型曲线缓动入退,按贝塞尔曲线,按弹跳动作缓动退出进入等等-->

ActionInterval 时间间隔动作。

MoveBy,MoveTo返回的对象。表示一段时间的动作。这个动作可以通过调用不同的方法实现不同的操作。easing就是缓动运动,为动作增加不同运动的动态。<!-- 同理,还有返回动作持续了多久的方法,复制自己,重复动作,返回动作完成状态,获取动作不同阶段的节点,当前,现在,原始的节点,reverse是返回一个相反的动作,代码19行,我用这个相反动作方法实现小球落下 -->

repeatForever 永远重复一个动作。

function cc.repeatForever(action: cc.FiniteTimeAction): cc.ActionInterval   <!--ActionInterval 时间间隔动作 继承于FiniteTimeAction 有限时间动作类,ActionInstant 即时动作也继承于FinteTimeAction,暂时看见这俩 -->

类似的有repeat (function cc.repeat(action: cc.FiniteTimeAction, times: number): cc.ActionInterval)给定一个数值(times)让动作重复指定次数。<--代码25行-->

sequence 顺序执行动作,传入的动作会按照顺序依此执行。

function cc.sequence(actionOrActionArray: cc.FiniteTimeAction | cc.FiniteTimeAction[], ...tempArray: cc.FiniteTimeAction[]): cc.ActionInterval

传入一系列的FiniteTimeAction 有限时间动作类,然后返回一个按照顺序执行的 ActionInterval 时间间隔动作。<!--有种拼接字符串的感觉-->

<!--所以用到的关键字顺便看到的类似的或者有关系的都大概罗列了一下,刚开始可能有点慢,如果光看一遍api,感觉也达不到学习的目的。后面肯定会变得快起来。但是api有中文解释看着是贼爽就是了。代码里面还有一些什么schedule,stopAllAction什么的,就是我看到了忍不住想试试。有用的测试我会说在多少行。这就是全部了,谢谢观看。-->

原文地址:https://www.cnblogs.com/dgod/p/9126847.html

时间: 2024-11-08 09:40:48

cocos creator 基础1,小白自学日常。的相关文章

cocos creator基础-(六)cc.Sprite使用

1: 了解cc.Sprite的使用;2: 了解cc.Sprite的大小模式;3: 学会使用九宫格,使用九宫格节省美术资源;4: 学会个性化的时间精度条的使用;5: 代码里面来更换图片; cc.Sprite 1: 游戏中显示一个图片,通常我们把这个叫做”精灵” sprite2: cocos creator如果需要显示一个图片,那么需要在节点上挂一个精灵组件,为这个组件指定要显示的图片(SpriteFrame)3: 显示一个图片的步骤: (1) 创建一个节点; (2) 添加一个组件; (3) 要显示

cocos creator基础-(二十三)android环境搭建、h5/android 打包发布

1: 了解h5打包发布,要注意的事项; 2: 完成android环境配置与creator 项目android打包; 3: 使用 eclips打开项目或android-studio; h5打包发布 1:引擎模块裁剪,减少引擎体积; 2: resources目录的特性,减少setting.js体积; 3: 订制启动的logo,与样式; 4: resources特性 a:creator里面会根据场景的依赖来打包的我们的资源, 资源没有用的,将不会被打包进来; b:有时候我们需要代码加载我们的资源, c

cocos creator基础-cc.Node(三)坐标空间转换

cc.Vec2 1: cc.Vec2 二维向量坐标, 表结构{x: 120, y: 120}; cc.v2(x, y) 创建一个二维向量 cc.p() 创建一个二维向量(这个2.0被废弃了,用cc.v2替代) 2: cc.pSub: 向量相减 cc.pSub(v1, v2) 被废弃,用v1.sub(v2)替代 3: cc.pAdd: 向量相加; cc. cc.pAdd(v1, v2) 被废弃,用v1.add(v2)替代 4: cc.pLength: 向量长度; cc.pLength(dir)被废

cocos creator基础-(十六)自定义的帧动画播放组件(需要优化)

1: 掌握帧动画的原理; 2: 完成帧动画组件的编写; 3: 代码中使用帧动画组件; 通过拖拽图片进行播放,比引擎的制作方式方便,但动画不是很灵活 帧动画播放组件 1: creator播放帧动画需要通过动画编辑器去制作; 2: 为了方便控制和使用加入帧动画代码播放组件; 3: 属性设置: sprite_frames: 帧动画所用到的所有的帧; duration: 每帧的时间间隔; loop: 是否循环播放; play_onload: 是否加载组件的时候播放; 4: 接口设置: play_once

cocos creator基础-(二十四)cc.Director与资源加载策略

1: 了解creator场景切换; 2: 了解director基本的一些接口; 3: 理解资源加载的策略; cc.Director对象 1:游戏里面控制管理整个游戏全局对象,包括了场景切换等,为cc.Director对象; 2:导演对象全局只有一个cc.director,大写的为类, 小写的cc.director为全局的导演对象; 3: cc.director来获取导演对象实例; 4: 游戏中各种管理对象都可以通过cc.director获取,比如物理引擎管理,Action管理, 碰撞检测管理等;

cocos creator基础-(十三)cc.Loader使用

1: 掌握cc.loader加载本地资源; 2: 掌握cc.loader加载远程资源; 3: 掌握资源释放的机制与autorelease; 4: 掌握手动释放资源; cc.Loader 1:有三个默认的Pipeline: (1) assetLoader: 主要用于加载资源, 加载asset类型资源,和释放这些资源; (2) downloader: 主要用于下载文件, 文本,图像,脚本,声音,字体, 自定义的download; (3) loader: 第三个默认的Pipeline,可以加载json

cocos creator基础-(二十)物理引擎碰撞检测

1: 理解物体类型和分类,配置碰撞矩阵;2: 编写碰撞响应函数,监听碰撞事件;3: 学会了解Sensor来做触发器,只触发碰撞不改变运动; 物体类型与碰撞矩阵 1: 添加物体类型: Add Layer, 每个类型对应一个名字group与groupIndex2: 创建物体的时候要选择一个类型;3: 配置碰撞矩阵,决定哪些物体类型碰撞; 碰撞事件监听 1: 刚体组件开启碰撞监听;2: 当有碰撞发生的时候,遍历刚体所在的节点所挂的所有的组件,看组件是否实现了碰撞检测函数,如果是,那么调用;3: 在需要

cocos creator基础-(二十五)FileUtils本地文件读写

1: 掌握jsb.fileUtils的基本使用; FileUtils API   CCFileUtils.h 1:jsb是javascript bind的代表,整个C/C++ 导出的绑定都在这个jsb里面,jsb 支持native,不支持h5(浏览器上无法运行jsb is not defined ); 2: FileUtils是本地文件读写的一个工具类,全局只有一个实例; 3: jsb.fileUtils来获取文件读写工具类的实例; 4: jsb.fileUtils.isDirectoryExi

cocos creator基础-(二十九)动画编辑器编辑地图路径

思路 1.利用动画编辑器,设置一个路径,多个路径就编辑多个动画 2.用特定的代码对动画进行处理,获取到路径坐标,大佬已经写好代码,不用自己重复造轮子了(微元法求曲线长度) 获得动画路径的贝塞尔曲线方程 求得每一段贝塞尔曲线的长度 每隔一小段打一个点 最终生成一个路径 3.编写寻路脚本,挂载到物体上,让沿着路径移动 动画编辑 脚本挂载 // gen_map_path.js 动画路径转换坐标的代码 已经升级到2.x cc.Class({ extends: cc.Component, properti