本案例主要是通过图形化界面+代码来实现
面向设计
和开发
的两种工作流Web
、iOS
、Android
、各类"小游戏
"、PC 客户端
等平台JavaScript
语言可以选择 window
或者 mac
版本进行下载
登录开发工具的时候需要账号
背景图片
从资源管理器
拖到层级管理器中
注意放在
Canvas
层级下
地板图片
从资源管理器
拖到层级管理器中
主人
也拖入主人
添加脚本
只有添加了脚本,才个给主人赋予了生命
script
Play
,不要加后缀名。自动添加的
我习惯使用了vs code了
Play
中添加 跳跃相关的属性Cocos Creator 规定一个节点具有的属性都需要写在
properties
代码块中
cc.Class({
extends: cc.Component,
properties: {
// 主角跳跃高度
jumpHeight: 0,
// 主角跳跃持续时间
jumpDuration: 0,
// 最大移动速度
maxMoveSpeed: 0,
// 加速度
accel: 0,
}
});
层级管理器
中的 主人
添加 脚本
主人
属性检查器
最底部 点击 添加组件
用户脚本组件
属性值
跳跃代码
让主人跳起来修改 Play
脚本
cc.Class({
extends: cc.Component,
properties: {
// 主角跳跃高度
jumpHeight: 0,
// 主角跳跃持续时间
jumpDuration: 0,
// 最大移动速度
maxMoveSpeed: 0,
// 加速度
accel: 0,
},
// 设置跳跃的动作
setJumpAction: function () {
// 跳跃上升 cc.moveBy接收 参数1:跳跃的持续时间 参数2:向量 返回 时间间隔动作的类
const jumpUp = cc.moveBy(this.jumpDuration, cc.v2(0, this.jumpHeight)).easing(cc.easeCubicActionOut());
// 下落
const jumpDown = cc.moveBy(this.jumpDuration, cc.v2(0, -this.jumpHeight)).easing(cc.easeCubicActionIn());
// 不断重复
return cc.repeatForever(cc.sequence(jumpUp, jumpDown));
},
// 场景加载完毕触发
onLoad: function () {
// 初始化跳跃动作
this.jumpAction = this.setJumpAction();
// 执行动作
this.node.runAction(this.jumpAction);
}
});
这个时候,点击 运行
按钮,可以看到 主人
已经跳跃起来了
通过键盘输入 A
D
来控制 人物的移动
Play
新增以下 事件,onKeyDown
和 onKeyUp
onLoad
中注册事件update
方法,来控制移动给 Play
新增以下 事件,onKeyDown
和 onKeyUp
setJumpAction: function () {
//...
},
onKeyDown (event) {
// set a flag when key pressed
switch(event.keyCode) {
case cc.macro.KEY.a:
this.accLeft = true;
break;
case cc.macro.KEY.d:
this.accRight = true;
break;
}
},
onKeyUp (event) {
// unset a flag when key released
switch(event.keyCode) {
case cc.macro.KEY.a:
this.accLeft = false;
break;
case cc.macro.KEY.d:
this.accRight = false;
break;
}
},
在 onLoad
中注册事件
onLoad: function () {
// 初始化跳跃动作
this.jumpAction = this.setJumpAction();
this.node.runAction(this.jumpAction);
// 加速度方向开关
this.accLeft = false;
this.accRight = false;
// 主角当前水平方向速度
this.xSpeed = 0;
// 初始化键盘输入监听
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this);
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP, this.onKeyUp, this);
},
onDestroy () {
// 取消键盘输入监听
cc.systemEvent.off(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this);
cc.systemEvent.off(cc.SystemEvent.EventType.KEY_UP, this.onKeyUp, this);
},
新增 update
方法,来控制移动
update
在场景加载后就会每帧调用一次
update: function (dt) {
// 根据当前加速度方向每帧更新速度
if (this.accLeft) {
this.xSpeed -= this.accel * dt;
} else if (this.accRight) {
this.xSpeed += this.accel * dt;
}
// 限制主角的速度不能超过最大值
if ( Math.abs(this.xSpeed) > this.maxMoveSpeed ) {
// if speed reach limit, use max speed with current direction
this.xSpeed = this.maxMoveSpeed * this.xSpeed / Math.abs(this.xSpeed);
}
// 根据当前速度更新主角的位置
this.node.x += this.xSpeed * dt;
},