富文本(RichText)
优点:自定义颜色,大小,描边,还能加图片。对于复杂的文本表现力更好。
缺点:cocos的富文本是由Label组件拼装实现的。低版本会打断合批。Label太多导致卡顿。
常用
// 换行符
<br/>
// 加粗
<b> b>
// 字体颜色
color>
// 描边颜色及宽度
<outline color=#000000 width=2> outline>
// 图片,Image Atlas需先绑定图集,还可以绑定点击事件
<img src='图片名字' click='点击方法名'/>
// 字体大小
字体大小size>
//斜体
<i>斜体i>
//下划线
<u>下划线u>
//点击事件 记得先挂载脚本,test为方法名
<on click="test">点击on>
遮罩
用例:圆形头像
在父级节点加渲染组建 Mask
适配
加ui组件Widget
存储和读取用户数据
存储数据
cc.sys.localStorage.setItem('gold', 100);
对于复杂的对象数据,我们可以通过将对象序列化为 JSON 后保存:
userData = {
name: 'Tracer',
level: 1,
gold: 100
};
cc.sys.localStorage.setItem('userData', JSON.stringify(userData));
读取数据
cc.sys.localStorage.getItem(key)
读取json数据
var userData = JSON.parse(cc.sys.localStorage.getItem('userData'));
清除数据
移除一个数据
cc.sys.localStorage.removeItem('name')
清空数据
cc.sys.localStorage.clear()
对象和json数据存储及处理
const {ccclass, property} = cc._decorator;
class Person{
id: number;
name: string;
wugong: string[];
}
@ccclass
export default class Wuli extends cc.Component {
start(){
let person = new Person();
person.id = 10;
person.name = '小王';
person.wugong = ['降龙十八掌', '独孤九剑'];
//对象转json
let json = JSON.stringify(person);
//存储
cc.sys.localStorage.setItem('info', json);
//json转对象
let person2: Person = Object.assign(new Person(), JSON.parse(json));
}
}
网络请求
let url = 'http://xxx.com/api?name=xxx';
//请求
let request = cc.loader.getXMLHttpRequest();
request.open('GET', url, true);//true开启异步请求
request.onreadystatechange = () => {
//请求结束后,获取数据
if(request.readyState == 4 && request.status == 200){
console.debug('请求完成');
console.debug(request.responseText);//内容
}
}
request.send();//发送请求
用代码自定义一个播放Animation动画播放组件
const {ccclass, property} = cc._decorator;
@ccclass
export default class MyAnimation extends cc.Component {
//每秒播放速度
@property
speed: number = 0.1;
//播放帧数组
@property([cc.SpriteFrame])
sprites: cc.SpriteFrame[] = [];
//是否播放动画
@property
isPlay: boolean = false;
//当前播放帧
index:number = 0;
//计时器
timer:number = 0;
start (){}
update (dt){
if(this.isPlay){
//播放动画
//计时器增加
this.timer += dt;
if(this.timer > this.speed){
this.timer =0;
//切换帧 012 012 012
this.index++;
if(this.index >= this.sprites.length){
this.index = 0;
}
//更换帧图片
this.getComponent(cc.Sprite).spriteFrame = this.sprites[this.index];
}
}
}
//开始
play(){
this.isPlay = true;
}
//停止
stop(){
this.isPlay = false;
}
}
调用
import MyAnimation from "./MyAnimation";
const {ccclass, property} = cc._decorator;
@ccclass
export default class NewClass extends cc.Component {
start () {
this.getComponent(MyAnimation).play();
}
}
自定义封装一个玩家控制器
const {ccclass, property} = cc._decorator;
//写个单例 封装键盘控制玩家移动
export default class Input{
private static instance: Input = null;
//水平轴
horizontal: number = 0;
//垂直轴
vertical: number = 0;
static get Instance(){
if(this.instance = null){
this.instance = new Input();
}
return this.instance;
}
constructor(){
//键盘按下
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN,(event)=>{
if(event.keyCode == cc.macro.KEY.w){
this.vertical = 1;
} else if(event.keyCode == cc.macro.KEY.s){
this.vertical = -1;
}
if(event.keyCode == cc.macro.KEY.a){
this.horizontal = -1;
}else if(event.keyCode == cc.macro.KEY.d){
this.horizontal = 1;
}
});
//键盘抬起 归0
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP,(event)=>{
if(event.keyCode == cc.macro.KEY.w){
this.vertical = 0;
} else if(event.keyCode == cc.macro.KEY.s){
this.vertical = 0;
}
if(event.keyCode == cc.macro.KEY.a){
this.horizontal = 0;
}else if(event.keyCode == cc.macro.KEY.d){
this.horizontal = 0;
}
});
}
}
调用
import Input from "./Input";
const {ccclass, property} = cc._decorator;
@ccclass
export default class Player extends cc.Component {
//速度
speed: number = 20;
start () {
}
update (dt) {
//移动
this.node.x += this.speed * dt * Input.Instance.horizontal;
this.node.y += this.speed * dt * Input.Instance.vertical;
}
}
摄像头跟随玩家移动
update(dt){
//player为玩家 减去的是屏幕一般偏差的距离
if(this.player != null){
cc.Camera.main.node.x = this.player.x-240;
cc.Camera.main.node.y = this.player.y-160;
}
}
回调
小鸟预设体绑定脚本
const {ccclass, property} = cc._decorator;
@ccclass
export default class Bird extends cc.Component {
//游戏结束回调
over: Function;
//加分回调
add: Function;
start () {
//结束
this.over();
//加分
this.add();
}
update (dt) {
}
}
其他地方使用
import Bird from "./Bird";
const {ccclass, property} = cc._decorator;
@ccclass
export default class Test extends cc.Component {
//绑定小鸟预设体
@property(cc.Prefab)
birdPre: cc.Prefab;
score: number = 0;
start () {
//创建小鸟
let bird = cc.instantiate(this.birdPre);
//设置父物体
bird.setParent(this.node);
//加分回调
bird.getComponent(Bird).add = ()=> {
this.score += 100;
}
//游戏结束回调
bird.getComponent(Bird).over = ()=> {
console.debug('游戏结束');
}
}
update (dt) {
}
}