【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) {
        
    }
}
目录
相关文章
|
29天前
|
小程序 JavaScript Java
微信小程序的后端开发需要使用什么语言?
【8月更文挑战第22天】微信小程序的后端开发需要使用什么语言?
261 65
|
3天前
详细教程:扫码提交表单后,数据直接推送到企业微信、钉钉、飞书群聊
在草料制作的表单中,填表人扫码填写并提交数据后,这些信息可以立即通过企业微信、钉钉或飞书自动推送到相应的群聊中,实现即时共享和沟通,提升团队协作效率。
|
23天前
|
小程序 JavaScript
Taro@3.x+Vue@3.x+TS开发微信小程序,使用轮播图
本文介绍了使用 Taro 和 Vue 创建轮播组件的两种方法:一是通过 `&lt;swiper&gt;` 实现,二是利用 Nut UI 的 `&lt;nut-swiper&gt;` 组件实现。
Taro@3.x+Vue@3.x+TS开发微信小程序,使用轮播图
|
8天前
|
存储 移动开发 监控
微信支付开发避坑指南
【9月更文挑战第11天】在进行微信支付开发时,需遵循官方文档,确保权限和参数配置正确。开发中应注重安全,验证用户输入,合理安排接口调用顺序,并处理异常。上线后需实时监控支付状态,定期检查配置,关注安全更新,确保系统稳定运行。
|
14天前
|
移动开发 小程序 JavaScript
uni-app开发微信小程序
本文详细介绍如何使用 uni-app 开发微信小程序,涵盖需求分析、架构思路及实施方案。主要功能包括用户登录、商品列表展示、商品详情、购物车及订单管理。技术栈采用 uni-app、uView UI 和 RESTful API。文章通过具体示例代码展示了从初始化项目、配置全局样式到实现各页面组件及 API 接口的全过程,并提供了完整的文件结构和配置文件示例。此外,还介绍了微信授权登录及后端接口模拟方法,确保项目的稳定性和安全性。通过本教程,读者可快速掌握使用 uni-app 开发微信小程序的方法。
40 3
|
23天前
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,设置转发分享
本文介绍了Taro中`useShareAppMessage`的使用方法,需在页面配置`enableShareAppMessage: true`并重新编译。
Taro@3.x+Vue@3.x+TS开发微信小程序,设置转发分享
|
23天前
|
小程序 数据安全/隐私保护
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装
在 `src/http` 目录下创建 `request.ts` 文件,并配置 Taro 的网络请求方法 `Taro.request`,支持多种 HTTP 方法并处理数据加密。
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装
|
23天前
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,上传文件
本文介绍如何在Taro项目中使用Nut UI的`&lt;nut-uploader/&gt;`组件实现图片上传功能,并通过示例代码展示了自定义上传逻辑的方法。
Taro@3.x+Vue@3.x+TS开发微信小程序,上传文件
|
23天前
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,根据系统主题展示不同样式(darkMode)
本文介绍如何在Taro项目中配置深色模式。通过在`src/app.config.ts`设置`darkmode`选项和在`theme.json`中定义主题变量,可以实现跟随系统主题的界面风格切换。
Taro@3.x+Vue@3.x+TS开发微信小程序,根据系统主题展示不同样式(darkMode)
|
23天前
|
小程序 开发者
Taro@3.x+Vue@3.x+TS开发微信小程序,使用自定义tabBar
本文介绍了如何在Taro项目中实现自定义tabBar。首先,在`app.config.ts`中设置`custom: true`并配置`tabBar`。
Taro@3.x+Vue@3.x+TS开发微信小程序,使用自定义tabBar