【cocos 2d微信小游戏开发教程】基础使用笔记分享(三)

简介: 【cocos 2d微信小游戏开发教程】基础使用笔记分享(三)
  1. 富文本(RichText)

优点:自定义颜色,大小,描边,还能加图片。对于复杂的文本表现力更好。

缺点:cocos的富文本是由Label组件拼装实现的。低版本会打断合批。Label太多导致卡顿。

常用

// 换行符
<br/>
// 加粗
<b> </b>
// 字体颜色
<color=#FFFFFF> </color>
// 描边颜色及宽度
<outline color=#000000 width=2> </outline>
// 图片,Image Atlas需先绑定图集,还可以绑定点击事件
<img src='图片名字' click='点击方法名'/>
// 字体大小
<size=20>字体大小</size>
//斜体
<i>斜体</i>
//下划线
<u>下划线</u>
//点击事件 记得先挂载脚本,test为方法名 
<on click="test">点击</on>
  1. 遮罩
    用例:圆形头像
    在父级节点加渲染组建 Mask
  2. 适配
    加ui组件Widget
  3. 存储和读取用户数据
  • 存储数据
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));
    }
}
  1. 网络请求
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();//发送请求
  1. 用代码自定义一个播放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();
    }
}
  1. 自定义封装一个玩家控制器
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;
    }
}

  1. 摄像头跟随玩家移动
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;
  }
}
  1. 回调

小鸟预设体绑定脚本

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) {
        
    }
}
目录
相关文章
|
2月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
679 7
|
2月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
740 1
|
2月前
|
缓存 小程序 索引
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
239 1
|
2月前
|
小程序 JavaScript API
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
953 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
|
2月前
|
存储 小程序 安全
微信的开发管理都需要配置什么?
【10月更文挑战第17天】微信的开发管理都需要配置什么?
35 0
|
2月前
|
JavaScript 小程序 开发者
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
454 0
|
2月前
|
小程序
uni-app开发微信小程序使用onPullDownRefresh(下拉刷新)总结
uni-app开发微信小程序使用onPullDownRefresh(下拉刷新)总结
649 0
|
2月前
|
小程序 前端开发 测试技术
微信小程序的开发完整流程是什么?
微信小程序的开发完整流程是什么?
145 7
ly~
|
3月前
|
存储 供应链 小程序
除了微信小程序,PHP 还可以用于开发哪些类型的小程序?
除了微信小程序,PHP 还可用于开发多种类型的小程序,包括支付宝小程序、百度智能小程序、抖音小程序、企业内部小程序及行业特定小程序。在电商、生活服务、资讯、工具、娱乐、营销等领域,PHP 能有效管理商品信息、订单处理、支付接口、内容抓取、复杂计算、游戏数据、活动规则等多种业务。同时,在企业内部,PHP 可提升工作效率,实现审批流程、文件共享、生产计划等功能;在医疗和教育等行业,PHP 能管理患者信息、在线问诊、课程资源、成绩查询等重要数据。
ly~
84 6
|
2月前
|
小程序 前端开发 数据安全/隐私保护
微信小程序全栈开发中的身份认证与授权机制
【10月更文挑战第3天】随着移动互联网的发展,微信小程序凭借便捷的用户体验和强大的社交传播能力,成为企业拓展业务的新渠道。本文探讨了小程序全栈开发中的身份认证与授权机制,包括手机号码验证、微信登录、第三方登录及角色权限控制等方法,并强调了安全性、用户体验和合规性的重要性,帮助开发者更好地理解和应用这一关键技术。
85 5

相关实验场景

更多
下一篇
DataWorks