【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) {
        
    }
}
目录
相关文章
|
6月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
6月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
7月前
|
小程序 JavaScript API
uni-halo + 微信小程序开发实录:我的第一个作品诞生记
这篇文章介绍了使用uni-halo框架进行微信小程序开发的过程,包括选择该框架的原因、开发目标以及项目配置和部署的步骤。
369 0
uni-halo + 微信小程序开发实录:我的第一个作品诞生记
|
10月前
|
小程序 前端开发 Android开发
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
1969 29
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
|
10月前
|
JSON 机器人 API
gewe微信机器人搭建教程
GeWe开放平台是基于 微信开放平台的二次封装API服务,开发者可以使用本服务来处理微信中的各种事件,并可以通过后台调用对应的 API 来驱动微信自动执行任务,如自动收发消息、自动化应答、自动群邀请、群管理等,封装了 RPA技术流程,简化开发者二次开发难度,提供了开发者与微信对接的能力,使用简单,操作快捷,支持多种语言接入。
587 17
|
9月前
|
监控 数据可视化 数据处理
微信养号脚本,全自动插件,AUTOJS开发版
这是一套自动化微信养号工具,包含主脚本`wechat_auto.js`与配置文件`config.json`。主脚本实现自动浏览朋友圈、随机阅读订阅号文章及搜索指定公众号三大功能,支持自定义滚动次数、阅读时长等参数。代码通过随机化操作间隔模拟真实用户行为,具备完善的错误处理和日志记录功能。配套UI模块提供可视化操作界面,可实时监控任务状态与运行日志,便于调整参数设置。控制器部分扩展了批量数据处理能力,如学生信息的增删改查操作,适用于多场景应用。下载地址:https://www.pan38.com/share.php?code=n6cPZ 提取码:8888(仅供学习参考)。
|
11月前
|
小程序 Java 关系型数据库
weixin163基于微信小程序的校园二手交易平台系统设计与开发ssm(文档+源码)_kaic
本文介绍了一款基于微信小程序的校园二手物品交易平台的开发与实现。该平台采用Java语言开发服务端,使用MySQL数据库进行数据存储,前端以微信小程序为载体,支持管理员和学生两种角色操作。管理员可管理用户、商品分类及信息、交易记录等,而学生则能注册登录、发布购买商品、参与交流论坛等。系统设计注重交互性和安全性,通过SSM框架优化开发流程,确保高效稳定运行,满足用户便捷交易的需求,推动校园资源共享与循环利用。
|
11月前
|
小程序 关系型数据库 Java
weixin168“返家乡”高校暑期社会实践微信小程序设计与开发ssm(文档+源码)_kaic
本文探讨高校暑期社会实践微信小程序的开发与应用,旨在通过信息化手段提升活动管理效率。借助微信小程序技术、SSM框架及MySQL数据库,实现信息共享、流程规范和操作便捷。系统涵盖需求分析、可行性研究、设计实现等环节,确保技术可行、操作简便且经济合理。最终,该小程序可优化活动发布、学生信息管理和心得交流等功能,降低管理成本并提高工作效率。
|
自然语言处理 搜索推荐 小程序
微信公众号接口:解锁公众号开发的无限可能
微信公众号接口是微信官方提供的API,支持开发者通过编程与公众号交互,实现自动回复、消息管理、用户管理和数据分析等功能。本文深入探讨接口的定义、类型、优势及应用场景,如智能客服、内容分发、电商闭环等,并介绍开发流程和工具,帮助运营者提升用户体验和效率。未来,随着微信生态的发展,公众号接口将带来更多机遇,如小程序融合、AI应用等。
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
3680 7

热门文章

最新文章