背诵方歌demo

第一阶段

_class
继承
继承
cc.componet
继承者,增加接受消息的功能
ComponentBase
Manager
MessageCenter
message
_message
UI
消息中心
分数
开始背诵
退出
暂停
方歌
正确的方歌内容
显示内容

状态
可交换值
正确
正确的值
显示的值

工作流程

调用
发消息
注册为ZiManager的信息接受者
管理SwapControl的消息
SwapControl
yes
no
yes
yes
调用
no
处理消息
ReceiveMessage(message:Message)
判断全文是否正确
待处理
判断是否为有效消息
判断有效消息是否等于1条
交换值
将有效消息归0
Display
储存该消息
将有效消息置为1
继续接收消息
ziplayer
MessageCenter
ZiManager
Message
Type: number
Command : number
Content : any
constructor(type, command, content)
MessageType
static Type_UI
static Type_FG
MessageCommand
static FG_Display
MessageCenter
static Managers: ComponentBase[] = []
static SendMessage(msg: Message)
static SendCustomMessage(type: number, command: number, content: any)
extend
extend
ZiManager
static Instance: ZiManager
onLoad()
SetMessageType()
ManagerBase
ReceiverList: ComponentBase[] = []
messgeType : number
onLoad()
SetMessageType()
RegisterReceiver(cb: ComponentBase)
ReceiveMessage(message: Message)
ccComponet
extend
ComponentBase
ReceiveMessage(msg: Message)
ccComponent

在这里插入图片描述

ComponentBase

import Message from "../Message/Message";

const {ccclass, property} = cc._decorator;

@ccclass
export default class ComponentBase extends cc.Component {


    // LIFE-CYCLE CALLBACKS:

    // onLoad () {}

    start () {

    }

    // update (dt) {}

    ReceiveMessage(msg: Message){}
}


FangGe

const {ccclass, property} = cc._decorator;

@ccclass
export default class FangGe extends cc.Component {

    displayContent: string[] = [];
    tartgetContent: string[] = [];


    // LIFE-CYCLE CALLBACKS:

    // onLoad () {}

    start () {

    }

    // update (dt) {}


    getDisplayContent(){
        let content = "麻黄汤中臣桂枝杏仁甘草四般施发汗解表宣肺气伤寒表实无汗宜";
        this.tartgetContent = content.split('');
        console.debug(this.tartgetContent);
        let tmp: string[] = content.split('');
        tmp.sort(() => Math.random() - 0.5);
        this.displayContent = tmp;
        console.debug(this.displayContent);
        return this.displayContent;
    }

    getTargetContent(){
        let content = "麻黄汤中臣桂枝杏仁甘草四般施发汗解表宣肺气伤寒表实无汗宜";
        this.tartgetContent = content.split('');
        return this.tartgetContent;
    }


}

SwapController

import ComponentBase from "../Classes/ComponentBase";
import FangGe from "../Classes/FangGe";
import ZiManager from "../Manager/ZiManager";
import Message, { MessageCommand } from "../Message/Message";
import ZiMsg, { ZiState } from "../Message/ZiMsg";

const {ccclass, property} = cc._decorator;

@ccclass
export default class SwapController extends ComponentBase {

    // 收到的有效消息数
    msgCount: number = 0;
    // 有效消息内容
    msgContent: ZiMsg;

    //目标内容
    targetContent: string[] = [];
    //显示内容
    displayContent: string[] = [];
    

    // LIFE-CYCLE CALLBACKS:

    // onLoad () {}

    start () {
        // 注册为ZiManager的消息接受者
        ZiManager.Instance.RegisterReceiver(this);

        let fangGe: FangGe = new FangGe();
        this.displayContent = fangGe.getDisplayContent();

        this.targetContent = fangGe.getTargetContent();

        this.display();

    }

    update (dt) {
        this.cotentCorrect();
        
    }

    //接受消息
    ReceiveMessage(msg: Message): void {
        super.ReceiveMessage(msg);
        //如果全文正确
        if(this.cotentCorrect()){
            console.debug("全文正确");
        } else {
            // 判断是否为有效消息
            if(msg.Command == MessageCommand.FG_Swap){
                let content: ZiMsg = <ZiMsg>msg.Content;
                //如果字状态为可以改变 则为有效消息
                if(content.state == ZiState.EnableChange){
                    // 判断有效消息是否等于一条
                    if(this.msgCount == 1){
                        //等于一条, 交换值
                        this.swap(content);

                        // 将有效信息归0
                        this.msgCount = 0;
                        //调用display,重新显示内容。
                        this.display();

                    } else {
                        //不等于1条
                        // 存储该条消息内容
                        this.msgContent = content;
                        //将有效消息置为1
                        this.msgCount = 1;

                    }

                }
            }

        }

    }


    // 判断全文是否正确
    cotentCorrect(){
        let target = this.targetContent.toString();
        let display = this.displayContent.toString();
        return target == display;
    }

    //交换值
    swap(content: ZiMsg){
        console.debug("content.id" + content.id);
        let index1 = Number(content.id);
        let index2 = Number(this.msgContent.id);

        console.debug(index1 +"|" + index2);
        let value1: string = this.displayContent[index1];
        let value2: string = this.displayContent[index2];
        console.debug(value1 + "|" + value2);
        let tmp = value1;
        value1 = value2;
        value2 = tmp;
        this.displayContent[index1] = value1;
        this.displayContent[index2] = value2;
        console.debug("交换值完成");
        console.debug(this.displayContent);
    }

    //显示内容
    display(){
        
        //清空之前的内容
        this.node.destroyAllChildren();
        
        let displayContent = this.displayContent;
        console.debug(displayContent);

    
        for(let i = 0; i < displayContent.length; i++){
            let node = new cc.Node();
            let label = node.addComponent(cc.Label);
            let ziPlayer = node.addComponent("ZiPlayer");
            



        

            label.node.color = cc.Color.BLACK;
            label.string = displayContent[i];


            node.name = i.toString();
            node.setContentSize(50, 50);
            node.setParent(this.node);

            

        }
        
    }


}

ManagerBase

import ComponentBase from "../Classes/ComponentBase";
import Message, { MessageType } from "../Message/Message";
import MessageCenter from "../Message/MessageCenter";


const {ccclass, property} = cc._decorator;

@ccclass
export default class ManagerBase extends ComponentBase{

    //管理类的消息接受者数组
    ReceiverList: ComponentBase[] = [];
    //当前管理类接收的具体消息类型
    messageType: number;


    // LIFE-CYCLE CALLBACKS:

    onLoad () {
        //设置当前管理类接收的消息类型
        this.messageType = this.SetMessageType();
        //把管理类添加到消息中心列表中
        MessageCenter.Managers.push(this);

    }

   

    // update (dt) {}
    //设置当前管理类接收的消息类型
    SetMessageType(){
        return MessageType.Type_FG;
    }

    //注册消息监听
    RegisterReceiver(cb: ComponentBase){
        this.ReceiverList.push(cb);
    }

    //接收消息
    ReceiveMessage(message: Message): void {
        super.ReceiveMessage(message);
        //判断消息类型
        if(message.Type != this.messageType){
            return;
        }
        //向下层分发消息
        for (let cb of this.ReceiverList) {
            cb.ReceiveMessage(message);
        }
    }


}

ZiManager

// Learn TypeScript:
//  - https://docs.cocos.com/creator/manual/en/scripting/typescript.html
// Learn Attribute:
//  - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
//  - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html

import { MessageType } from "../Message/Message";
import ManagerBase from "./ManagerBase";



const {ccclass, property} = cc._decorator;

@ccclass
export default class ZiManager extends ManagerBase{

    static Instance: ZiManager;
    

    onLoad(): void {
        super.onLoad();
        ZiManager.Instance = this;
    }

    // 接收消息类型
    SetMessageType(): number {
        return MessageType.Type_FG;
    }
}

Message


export default class Message {
    //类型
    Type: number;
    //命令
    Command: number;
    //参数
    Content: any;

    constructor(type: number, command: number, content: any){
        this.Type = type;
        this.Command = command;
        this.Content = content;
    }

}


export class MessageType{
    static Type_UI = 1;
    static Type_FG = 2;
}

export class MessageCommand{
    static FG_Display = 201;
    static FG_Swap = 202;
}

MessageCenter

import ComponentBase from "../Classes/ComponentBase";
import Message from "./Message";

export default class MessageCenter {

    //管理类列表
    static Managers: ComponentBase[] = [];


    //发送消息
    static SendMessage(msg: Message){
        for(let manager of this.Managers){
            manager.ReceiveMessage(msg);
        }
    }

    //发送消息
    static SendCustomMessage(type: number, command: number, content: any){
        let msg = new Message(type, command, content);
        this.SendMessage(msg);
    }

}

ZiMsg

export default class ZiMsg{

    state: number;
    id: string;

    constructor(state: number, id: string){
        this.state = state;
        this.id = id;
    }
   
}

export class ZiState{
    static EnableChange = 1;
    static UnEnableChange = 2;
    static Correcct = 3;
}

ZiPlayer

import { MessageCommand, MessageType } from "../Message/Message";
import MessageCenter from "../Message/MessageCenter";
import ZiMsg, { ZiState } from "../Message/ZiMsg";

const {ccclass, property} = cc._decorator;

@ccclass
export default class NewClass extends cc.Component {

    

    // LIFE-CYCLE CALLBACKS:

    // onLoad () {}

    start () {
        //触摸
        this.node.on(cc.Node.EventType.MOUSE_DOWN, (event) => {
            // 交换值
            MessageCenter.SendCustomMessage(MessageType.Type_FG, MessageCommand.FG_Swap, new ZiMsg(ZiState.EnableChange, this.node.name));
        })

    }

    // update (dt) {}
}


运行效果

在这里插入图片描述

第二阶段

优化

工作流程

调用
发消息
注册为ZiManager的信息接受者
管理SwapControl的消息
SwapControl
yes
no
yes
yes
调用
no
处理消息
ReceiveMessage(message:Message)
判断全文是否正确
待处理
判断是否为有效消息
判断有效消息是否等于1条
交换值
将有效消息归0
刷新字的状态
allZiDisplay
储存该消息
将有效消息置为1
修改字的状态为不可交换
重新显示内容allZiDisplay
继续接收消息
ziplayer
MessageCenter
ZiManager

FangGe

import { ZiState } from "../Message/ZiMsg";
import { Zi } from "./Zi";

const {ccclass, property} = cc._decorator;

@ccclass
export default class FangGe extends cc.Component {

    static displayContent: string[] = [];
    static tartgetContent: string[] = [];
    static title: string;


    // LIFE-CYCLE CALLBACKS:

    // onLoad () {}

    start () {

    }

    // update (dt) {}


    static getDisplayContent(){
        let content = "麻黄汤中臣桂枝杏仁甘草四般施发汗解表宣肺气伤寒表实无汗宜";
        this.tartgetContent = content.split('');
        console.debug(this.tartgetContent);
        let tmp: string[] = content.split('');
        tmp.sort(() => Math.random() - 0.5);
        this.displayContent = tmp;
        console.debug(this.displayContent);
        return this.displayContent;
    }

    static getTargetContent(){
        let content = "麻黄汤中臣桂枝杏仁甘草四般施发汗解表宣肺气伤寒表实无汗宜";
        FangGe.tartgetContent = content.split('');
        return FangGe.tartgetContent;
    }

    static getTitle(){
        FangGe.title = "麻黄汤";
        return FangGe.title;
    }

    static getZiDisplayContent(){
        let ZiDisplayContent: Zi [] = [];
        let content = "麻黄汤中臣桂枝杏仁甘草四般施发汗解表宣肺气伤寒表实无汗宜";
        let targetContent = content.split('');
        
        let tmp: string[] = content.split('');
        tmp.sort(() => Math.random() - 0.5);
        this.displayContent = tmp;
        console.debug(this.displayContent);

        for(let i = 0; i < tmp.length; i++){
            if(targetContent[i] == tmp[i]){
                ZiDisplayContent[i] = new Zi(ZiState.Correcct, tmp[i]);
            } else {
                ZiDisplayContent[i] = new Zi(ZiState.EnableChange, tmp[i]);
            }

        }


        return ZiDisplayContent;



    }


}

Zi

export class Zi {
    state: number;
    value: string;
    constructor(state: number, value: string){
        this.state = state;
        this.value = value;
    }
}

Zi
state: number
value: string
constructor(state: number, value: string)

SwapController

import ComponentBase from "../Classes/ComponentBase";
import FangGe from "../Classes/FangGe";
import { Zi } from "../Classes/Zi";
import ZiManager from "../Manager/ZiManager";
import Message, { MessageCommand, MessageType } from "../Message/Message";
import MessageCenter from "../Message/MessageCenter";
import ZiMsg, { ZiState } from "../Message/ZiMsg";
import ZiUtil from "../Utils/ZiUtil";

const {ccclass, property} = cc._decorator;

@ccclass
export default class SwapController extends ComponentBase {

    // 收到的有效消息数
    msgCount: number = 0;
    // 有效消息内容
    msgContent: ZiMsg;

    //目标内容
    targetContent: string[] = [];
    //显示内容
    displayContent: string [] = [];

    ziDisplayContent: Zi[] = [];
    

    // LIFE-CYCLE CALLBACKS:

    // onLoad () {}

    start () {
        // 注册为ZiManager的消息接受者
        ZiManager.Instance.RegisterReceiver(this);

        
        

        this.displayContent = FangGe.getDisplayContent();
        this.targetContent = FangGe.getTargetContent();
        this.ziDisplayContent = FangGe.getZiDisplayContent();
        // this.displayContent = ZiUtil.targetContentTodisplayContent(this.targetContent);
        // let displayContent: Zi[];
        // let len = this.targetContent.length;
        // let tmp = this.targetContent;
        // tmp.sort(() => Math.random() -0.5);
        // console.debug("tmp: " + tmp);
        // console.debug("targetContent" + this.targetContent);
        // for(let i = 0; i < len; i++){
        //     if(this.targetContent[i] != tmp[i]){
        //         displayContent[i] = new Zi(ZiState.EnableChange, tmp[i]);
        //     } else {
        //         displayContent[i] = new Zi(ZiState.Correcct, tmp[i]);
        //     }
        // }


        // this.display();
        ZiUtil.display(this.node, this.ziDisplayContent);
        

    }

    update (dt) {
        this.cotentCorrect();
        
    }

    //接受消息
    ReceiveMessage(msg: Message): void {
        super.ReceiveMessage(msg);
        //如果全文正确
        if(this.cotentCorrect()){
            console.debug("全文正确");
        } else {
            // 判断是否为有效消息
            if(msg.Command == MessageCommand.FG_Swap){
                let content: ZiMsg = <ZiMsg>msg.Content;
                //如果字状态为可以改变 则为有效消息
                if(content.state == ZiState.EnableChange){
    
                    
                    // 判断有效消息是否等于一条
                    if(this.msgCount == 1){
                        //等于一条, 交换值
                        this.swap(content);

                        // 将有效信息归0
                        this.msgCount = 0;


                        //调用display,重新显示内容。
                        // this.display();
                        // ZiUtil.display(this.node, this.ziDisplayContent);
                        this.refreshState();
                        this.allZiDisplay();


                    } else {
                        //不等于1条
                        // 存储该条消息内容
                        this.msgContent = content;
                        //将有效消息置为1
                        this.msgCount = 1;
                        let index = Number(this.msgContent.id);
                        this.ziDisplayContent[index].state = ZiState.UnEnableChange;
                        
                        this.allZiDisplay();

                    }

                }
            }

        }

    }


    // 判断全文是否正确
    cotentCorrect(){
        let target = this.targetContent.toString();
        let display: string;
        let tmp: string[] = [];
        for(let i = 0; i < this.ziDisplayContent.length; i++){
            tmp[i] = this.ziDisplayContent[i].value;
        }
        display = tmp.toString();
        return target == display;
    }

    //交换值
    swap(content: ZiMsg){
        console.debug("content.id" + content.id);
        let index1 = Number(content.id);
        let index2 = Number(this.msgContent.id);

        console.debug(index1 +"|" + index2);
        // let value1: string = this.displayContent[index1];
        // let value2: string = this.displayContent[index2];
        let value1: string = this.ziDisplayContent[index1].value;
        let value2: string = this.ziDisplayContent[index2].value;
        console.debug(value1 + "|" + value2);
        let tmp = value1;
        value1 = value2;
        value2 = tmp;
        this.ziDisplayContent[index1].value = value1;
        this.ziDisplayContent[index2].value = value2;
        console.debug("交换值完成");
        // console.debug(this.displayContent);
        console.debug(this.ziDisplayContent);
    }

    //显示内容
    display(){
        
        //清空之前的内容
        this.node.destroyAllChildren();
        
        let displayContent = this.displayContent;
        console.debug(displayContent);

    
        for(let i = 0; i < displayContent.length; i++){
            let node = new cc.Node();
            // let label = node.addComponent(cc.Label);
            let ziPlayer = node.addComponent("ZiPlayer");
            
            
            let richText = node.addComponent(cc.RichText);


        

            // label.node.color = cc.Color.BLACK;
            // label.string = displayContent[i];

            richText.node.color = cc.Color.BLACK;
            richText.string =displayContent[i];


            node.name = i.toString();
            node.setContentSize(50, 50);
            node.setParent(this.node);

            

        }
        
    }

    allZiDisplay(){
        //清空之前的内容
        this.node.destroyAllChildren();
        
        let ziDisplayContent = this.ziDisplayContent;
        console.debug(ziDisplayContent);

    
        for(let i = 0; i < ziDisplayContent.length; i++){
            let node = new cc.Node();
            // let label = node.addComponent(cc.Label);
            let ziPlayer = node.addComponent("ZiPlayer");
            
            
            let richText = node.addComponent(cc.RichText);


        

            // label.node.color = cc.Color.BLACK;
            // label.string = displayContent[i];

            richText.node.color = cc.Color.BLACK;
            let ziState = ziDisplayContent[i].state;
            if(ziState == ZiState.Correcct){
                richText.node.color = cc.Color.GREEN;
            }
            if(ziState == ZiState.EnableChange){
                richText.node.color = cc.Color.BLACK;
            }
            if(ziState == ZiState.UnEnableChange){
                richText.node.color = cc.Color.BLUE;
            }


            richText.string =ziDisplayContent[i].value;


            node.name = i.toString();
            node.setContentSize(50, 50);
            node.setParent(this.node);
        }
    }


    //刷新状态
    refreshState(){
        for(let i = 0; i < this.ziDisplayContent.length; i++ ){
            if(this.targetContent[i] == this.ziDisplayContent[i].value){
                this.ziDisplayContent[i].state = ZiState.Correcct;
            } else {
                this.ziDisplayContent[i].state = ZiState.EnableChange;
            }
        }
    }

    

}


titleController

import FangGe from "../Classes/FangGe";

const {ccclass, property} = cc._decorator;

@ccclass
export default class NewClass extends cc.Component {

    

    @property(cc.Label)
    titleLabel: cc.Label = null;
    // LIFE-CYCLE CALLBACKS:

    // onLoad () {}

    start () {
        this.titleLabel.string = FangGe.getTitle();

    }

    // update (dt) {}
}

Message

export default class Message {
    //类型
    Type: number;
    //命令
    Command: number;
    //参数
    Content: any;

    constructor(type: number, command: number, content: any){
        this.Type = type;
        this.Command = command;
        this.Content = content;
    }

}


export class MessageType{
    static Type_UI = 1;
    static Type_FG = 2;
}

export class MessageCommand{
    static FG_Display = 201;
    static FG_Swap = 202;
    static FG_SetZiColor = 203;
    static FG_SetZiState = 204;
    static FG_getZiColor = 205;
    static FG_getZiState = 206;
    static FG_getZiInfo = 207;
}

ZiMsg

export default class ZiMsg{

    state: ZiState;
    id: string;
    color: cc.Color;

    constructor(state: ZiState, id: string, color: cc.Color){
        this.state = state;
        this.id = id;
        this.color = color;

    }
   
}

export class ZiState{
    static EnableChange = 1;
    static UnEnableChange = 2;
    static Correcct = 3;
}

ZiUtil

import { Zi } from "../Classes/Zi";
import { ZiState } from "../Message/ZiMsg";

const {ccclass, property} = cc._decorator;

@ccclass
export default class ZiUtil extends cc.Component {

  
    // LIFE-CYCLE CALLBACKS:

    // onLoad () {}

    start () {

    }

    // update (dt) {}
    static ZiDisplay(richText: cc.RichText, zi: Zi){
        if(zi.state == ZiState.Correcct){
            richText.node.color = cc.Color.GREEN;
        }
        if(zi.state == ZiState.EnableChange){
            richText.node.color = cc.Color.BLACK;
        }
        if(zi.state == ZiState.UnEnableChange){
            richText.node.color = cc.Color.BLUE;
        }

        richText.string = zi.value;

    }


    static display(parentNode: cc.Node,displayContent: Zi[]){
        parentNode.destroyAllChildren();
        for(let i = 0; i < displayContent.length; i++){
            let node = new cc.Node();
            let ziPlayer = node.addComponent("ZiPlayer");
            let richText = node.addComponent(cc.RichText);

            ZiUtil.ZiDisplay(richText, displayContent[i]);

            node.name = i.toString();
            node.setContentSize(50, 50);
            node.setParent(parentNode);
            
        }
    }


    // static targetContentTodisplayContent(tartgetContent: string []){


    //     let displayContent: Zi[];
    //     let len = tartgetContent.length;
    //     let tmp = tartgetContent;
    //     tmp.sort(() => Math.random() -0.5);
    //     console.debug("tmp: " + tmp);
    //     console.debug("targetContent" + tartgetContent);
    //     for(let i = 0; i < len; i++){
    //         if(tartgetContent[i] != tmp[i]){
    //             displayContent[i] = new Zi(ZiState.EnableChange, tmp[i]);
    //         } else {
    //             displayContent[i] = new Zi(ZiState.Correcct, tmp[i]);
    //         }
    //     }

    //     return displayContent;

    // }
}

运行效果

在这里插入图片描述

第三阶段

方歌录入设计

方歌详细内容

方歌详细信息
方名
内容
熟练度
FangGeDetail
title: string
content: string
proficiency: number
constructor(title: string, content: string, proficiency: number)
const {ccclass, property} = cc._decorator;

@ccclass
export default class FangGeDetail {

    title: string;
    content: string;
    proficiencey: number;



    constructor(title: string, content: string, proficencey: number){
        this.title = title;
        this.content = content;
        this.proficiencey = proficencey;
    }



}


方歌录入

录入情况标签
方名
内容
确认录入
录入下一首
重置

CollectFangge

CollectFangge
title: string
content: string
proficiency: number
fangGeLib: FanggeLib
fangGeDetails: FangGeDetail[]
titileEdit: cc.EditBox
contentEdit: cc.EditBox
successLabel: cc.Label
collectFangge()
resetFangGe()
collectNext()
storeFangge()
getFanggeLib()
import FangGeDetail from "../Classes/FangGeDetail";
import FanggeLib from "../Classes/FanggeLib";

const {ccclass, property} = cc._decorator;

@ccclass
export default class collectFangge extends cc.Component {

    title: string;
    content: string;
    proficiency: number = 0;
    fangGeLib: FanggeLib;
    fangGeDetails: FangGeDetail[] = [];
    

    @property(cc.EditBox)
    titleEdit: cc.EditBox = null;
    @property(cc.EditBox)
    contentEdit: cc.EditBox = null;
    @property(cc.Label)
    successLabel: cc.Label = null;

    // LIFE-CYCLE CALLBACKS:

    // onLoad () {}

    start () {
       

    }

    // update (dt) {}

    // 录入方歌
    collectFangge(){
        this.title = this.titleEdit.string;
        this.content = this.contentEdit.string;
        let fangGeDetail = new FangGeDetail(this.title, this.content, this.proficiency);
       
       this.fangGeDetails.push(fangGeDetail);
       this.fangGeLib = new FanggeLib(this.fangGeDetails);
        
        let json = JSON.stringify(fangGeDetail);
        let str = json.toString();
        console.debug(json);
        this.successLabel.string = "录入成功";
        let obj = JSON.parse(json);
        console.debug("obj" + obj.content);

        //将fangGeLib转为json
        let jsonLib = JSON.stringify(this.fangGeLib);

        //存入本地
        // cc.sys.localStorage.setItem("lib", jsonLib);
        this.storeFangge(fangGeDetail);
        
        

        //读取本地文件
        let fanggeLib = this.getFanggeLib();
        //遍历
        for(let i = 0; i < fanggeLib.myfanggeLib.length; i++){
            let content = fanggeLib.myfanggeLib[i].content;
            console.debug("content -> " + content);
        }
        
        

    }

    // 重置
    resetFangGe(){
        this.successLabel.string = "重新录入";
        this.titleEdit.string = "";
        this.contentEdit.string = "";
    }

    //录入下一个
    collectNext(){
        this.resetFangGe();
        this.successLabel.string = "录入中";
    }

    //将方歌存入本地
    storeFangge(fangGeDetail: FangGeDetail){
        //获取FanggeLib
        let fanggeLib = this.getFanggeLib();
        //加入方歌
        fanggeLib.myfanggeLib.push(fangGeDetail);

        // 转为json
        let json = JSON.stringify(fanggeLib);

        //存入本地
        cc.sys.localStorage.setItem("lib", json);



    }

    //读取存储的方歌
    getFanggeLib(){
        let FanggeLib = cc.sys.localStorage.getItem("lib");
        //转为对象
        this.fangGeLib = <FanggeLib>JSON.parse(FanggeLib);

        return this.fangGeLib;
    }
}

FanggeLib

FanggeLib
myfanggeLib: FangGeDetail[]
costructor(fangGeLib: FangGeDetail[])
addFangGeDetail(fangGeDetail: FangGeDetail)
getFanggeCount()
import FangGeDetail from "./FangGeDetail";


export default class FanggeLib {

    myfanggeLib: FangGeDetail[] = [];
    constructor(fangGeLib: FangGeDetail[]){
        
        this.myfanggeLib = fangGeLib;
    }
  

    addFangGeDetail(fangGeDetail: FangGeDetail){
        this.myfanggeLib.push(fangGeDetail);
    }

    //获取方歌个数
   getFanggeCount(){
        return this.myfanggeLib.length;
    }

}

FanggeLibUtil

FanggeLibUtil
static getFangGeDetail()
import FanggeLib from "../Classes/FanggeLib";


export default class FangGeLibUtil {

  
    // 获取方歌
    static getFangGeDeTail(){
        let FanggeLib = cc.sys.localStorage.getItem("lib");
        //转为对象
        let fangGeLib = <FanggeLib>JSON.parse(FanggeLib);
        let index = Math.random() * fangGeLib.myfanggeLib.length;
        index = Math.floor(index);


        return fangGeLib.myfanggeLib[index];
    }
}

更新FangGe

FangGe
static displayContent: string [] = []
static targetContent: string[] = []
static title: string
static content: string
static fangeDetail: FangGeDetail = FangGeLibUtil.getFangGeDetail()
static getDisplayContent()
getTargetContent()
static getTitle()
static getZiDisplayContent()

方歌背诵工作流程

调用
发消息
注册为ZiManager的信息接受者
管理SwapControl的消息
SwapControl
yes
no
yes
yes
调用
no
处理消息
ReceiveMessage(message:Message)
判断全文是否正确
待处理
判断是否为有效消息
判断有效消息是否等于1条
交换值
将有效消息归0
Display
储存该消息
将有效消息置为1
继续接收消息
inite
调用
调用
update判断全文是否正确
获取目标内容
FangGe.getTargetContent
获取显示内容
FangGe.getZiDisplayContent
ziplayer
MessageCenter
ZiManager

方歌录入工作流程

调用
调用
调用
输入title
输入Content
确认录入
录入下一个
重置
storeFangge(fangGeDetail: FangGeDetail)
collectNext()
reset()

方歌录入运行效果

在这里插入图片描述

第四阶段

主页设计

主页
设置
背诵方歌
录入方歌
学习方歌
小bug

用trycatch处理即可
在这里插入图片描述

ReceiveMessage(message: Message): void {
    super.ReceiveMessage(message);
    //判断消息类型
    if (message.Type != this.messageType) {
      return;
    }

    //向下层分发消息
    // for (let cb of this.ReceiverList) {
    //     cb.ReceiveMessage(message);
    //   }

    try {
      //向下层分发消息
      for (let cb of this.ReceiverList) {
        cb.ReceiveMessage(message);
      }
    } catch (error) {
        console.debug("error in ManagerBase: " + error);
    }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值