CocosCreator零基础制作游戏《极限跳跃》四、添加游戏主场景控制脚本
前面简单的实现了主界面的UI设置,现在我们开始制作游戏的控制脚本。
在资源管理器的Script文件夹中,点击右键新建javascript文件,命名为GAME。
双击打开GAME脚本,在properties: 中添加属性代码。
01 |
//GAME.js |
02 |
03 |
cc.Class({ |
04 |
extends: cc.Component,
|
05 |
properties: {
|
06 |
|
07 |
// player 节点,用于获取主角弹跳的高度,和控制主角行动开关
|
08 |
player: {
|
09 |
default: null,
|
10 |
type: cc.Node
|
11 |
},
|
12 |
// bgsprite1 节点,用于背景移动
|
13 |
bgsprite1: {
|
14 |
default: null,
|
15 |
type: cc.Node
|
16 |
},
|
17 |
// bgsprite2 节点,用于背景移动
|
18 |
bgsprite2: {
|
19 |
default: null,
|
20 |
type: cc.Node
|
21 |
},
|
22 |
// score label 的引用
|
23 |
scoreDisplay: {
|
24 |
default: null,
|
25 |
type: cc.Label
|
26 |
},
|
27 |
},
|
保存好后,我们双击MainScene打开场景,点击Canvas,在右侧的属性检查器最底部,点击[添加组件]=》[添加用户脚本组件]然后选择我们刚刚创建的脚本GAME.js。
添加好后就可以在属性检查器看到我们的属性组件来,然后我们把场景里的节点拖进对应的属性框即可实现节点绑定。不懂得可以多看看官方文档。
这样我门就可以在GAME脚本里来操作节点了。
二、创建HeroPlayer脚本用来操作玩家主角
01 |
//HeroPlayer.js |
02 |
03 |
cc.Class({ |
04 |
extends: cc.Component,
|
05 |
properties: {
|
06 |
//主角跳跃高度
|
07 |
jumpHeight: 0,
|
08 |
//主角跳跃持续时间
|
09 |
jumpTimes: 0,
|
10 |
//掉落速度
|
11 |
maxMoveSpeed: 0,
|
12 |
},
|
13 |
//跳跃
|
14 |
setJumpUpAction: function(){
|
15 |
// 跳跃上升
|
16 |
var jumpUp = cc.moveBy(this.jumpTimes, cc.p(0, this.jumpHeight));
|
17 |
//jumpUp.reverse();
|
18 |
return jumpUp;
|
19 |
},
|
20 |
//掉落
|
21 |
setJumpDownAction: function(){
|
22 |
//下落
|
23 |
var jumpDown = cc.moveBy(this.jumpTimes, cc.p(0, - this.maxMoveSpeed));
|
24 |
return jumpDown;
|
25 |
},
|
26 |
setJumpRunAction: function(){
|
27 |
// 初始化跳跃动作
|
28 |
this.jumpAction = this.setJumpUpAction();
|
29 |
//掉落动作
|
30 |
this.maxMoveSpeed = this.setJumpDownAction();
|
31 |
//包装动作
|
32 |
var seq = cc.sequence(this.jumpAction,this.maxMoveSpeed);
|
33 |
this.node.runAction(seq);
|
34 |
},
|
35 |
//玩家不操作时,角色进行下坠
|
36 |
heroDownMove: function(){
|
37 |
//下落
|
38 |
var heroDown = cc.moveBy(0.8, cc.p(0, - 5));
|
39 |
return heroDown;
|
40 |
},
|
41 |
// use this for initialization
|
42 |
onLoad: function () {
|
43 |
|
44 |
this.setJumpRunAction();
|
45 |
|
46 |
},
|
47 |
48 |
// called every frame, uncomment this function to activate update callback
|
49 |
update: function (dt) {
|
50 |
this.node.runAction(this.heroDownMove());//精灵移动
|
51 |
}
|
52 |
|
53 |
|
54 |
}); |
角色有2种状态,一种是玩家点击屏幕会实现角色的跳跃,第二种就是角色会受到引力会自动下落。我们在update来实现自动下落。添加好方法后,我门在层级管理器中点击hero节点。然后在右侧属性检查器中绑定脚本。
我门可以在里面初始化值。跳跃高度值,跳跃持续时间,掉落速度等。
脚本里主要实现了跳跃动作,掉落动作等。
然后回到我们的游戏主脚本也就是GAME脚本。添加触摸事件监听,实现监听触摸来调用主角的跳跃动作。
首先在顶部添加脚本引用,然后创建事件监听的方法。
01 |
//GAME.js |
02 |
var HeroPlayer = require("HeroPlayer");
|
03 |
//----- |
04 |
//事件监听 |
05 |
setEventControl: function(){
|
06 |
var self = this;
|
07 |
var hero = self.player.getComponent(HeroPlayer);//角色绑定控件
|
08 |
|
09 |
cc.eventManager.addListener({
|
10 |
event: cc.EventListener.TOUCH_ONE_BY_ONE,
|
11 |
swallowTouches: true,
|
12 |
// 设置是否吞没事件,在 onTouchBegan 方法返回 true 时吞没
|
13 |
onTouchBegan: function (touch, event) {
|
14 |
//实现 onTouchBegan 事件回调函数
|
15 |
var target = event.getCurrentTarget();
|
16 |
// 获取事件所绑定的 target
|
17 |
|
18 |
var locationInNode = target.convertToNodeSpace(touch.getLocation());
|
19 |
cc.log("当前点击坐标"+locationInNode);
|
20 |
|
21 |
hero.node.runAction(hero.setJumpUpAction());//精灵移动
|
22 |
//cc.log("跳跃:--------");
|
23 |
|
24 |
|
25 |
|
26 |
return true;
|
27 |
},
|
28 |
onTouchMoved: function (touch, event) { // 触摸移动时触发
|
29 |
|
30 |
},
|
31 |
onTouchEnded: function (touch, event) { // 点击事件结束处理
|
32 |
|
33 |
// cc.log("跳跃后角色坐标:" + self.player.getPosition() );
|
34 |
}
|
35 |
|
36 |
}, self.node)
|
37 |
},
|
然后在onload方法实现初始化调用。
1 |
onLoad: function () {
|
2 |
//触摸监听
|
3 |
this.setEventControl();
|
4 |
// 初始化计分
|
5 |
this.score = 0;
|
6 |
|
7 |
},
|
我们可以来运行下,看下效果。
原文地址:https://www.byjth.com/jixiantiaoyue/69.html