(八)、“仙剑出鞘”---关卡的选择

主要代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import { G } from "../G";

const {ccclass, property} = cc._decorator;

@ccclass
export default class uiController extends cc.Component {

@property(cc.Label)
label: cc.Label = null;

@property
text: string = 'hello';


@property({type:cc.Node,tooltip:"mission1"})
mission1: cc.Node = null;

@property({type:cc.Node,tooltip:"mission2"})
mission2: cc.Node = null;

@property({type:cc.Node,tooltip:"返回到大地图"})
backMap: cc.Node = null;

@property({type:cc.Node,tooltip:"返回Home"})
backHome: cc.Node = null;

@property({type:cc.Node,tooltip:"世界地图"})
allMissionMap: cc.Node = null;

@property({type:cc.Node,tooltip:"当前地图"})
curMissionMap: cc.Node = null;

@property({type:cc.Node,tooltip:"levelContent"})
levelContent: cc.Node = null;

@property({type:cc.Prefab,tooltip:"关卡"})
levelItemPref: cc.Prefab = null;

// LIFE-CYCLE CALLBACKS:

// onLoad () {}
init(){
G.getAllMissionData()
}

start () {
this.mission1.on(cc.Node.EventType.TOUCH_END,this.mission1_touch,this)
this.mission2.on(cc.Node.EventType.TOUCH_END,this.mission2_touch,this)
this.backMap.on(cc.Node.EventType.TOUCH_END,this.backMapTouch,this)
this.backHome.on(cc.Node.EventType.TOUCH_END,this.backHomeTouch,this)

let cur_mission_val = 1;
this.goUserMission(cur_mission_val)

}

goUserMission(cur_mission_val){
// 显示当前地图的节点
this.curMissionMap.active = true
// this.curMissionMap.scale = 1.5; // todo 修改背景图就可以
// 隐藏世界地图
this.allMissionMap.active = false


this.addLevelToList(cur_mission_val)
}
addLevelToList(cur_mission_val){
this.levelContent.removeAllChildren()

let missionData :mission = G.getCurMissionData(cur_mission_val)
this.curMissionMap.getChildByName('mission_name_label').getComponent(cc.Label).string = missionData.mission_name
missionData.data.forEach( (item,index) => {
let newLevel = cc.instantiate(this.levelItemPref);
let level_obj = newLevel.getComponent('mission_level')
level_obj.level = item.level
newLevel.y = -20*(index+1)
newLevel.getComponent(cc.Label).string = "第"+(item.level)+'关'
this.levelContent.addChild(newLevel)
})
}

mission1_touch(){
this.goUserMission(1)
}

mission2_touch(){
this.goUserMission(2)
}

backMapTouch(){
// 隐藏当前地图的节点
this.curMissionMap.active = false
this.curMissionMap.scale = 1; // todo 修改背景图就可以
// 显示世界地图
this.allMissionMap.active = true
}
backHomeTouch(){
G.goHome()
}

// update (dt) {}
}

主要涉及的cocos函数

1、this.node.getChildByName

在子节点中查找相应名称的节点

2、cc.instantiate

克隆指定的任意类型的对象,或者从 Prefab 实例化出新节点。

3、this.node.addChild

添加子节点

4、this.node.removeAllChildren

移除所有子节点