264元限时低价卖开发2年以上的moba源码了,已经上架到商城了,带前端+后端源码和部署文档等

安卓包下载试玩链接:https://pan.baidu.com/s/1ZHmp2Nd_nQxqY2YfyTBTHQ?pwd=tjeo
,需自行注册一个账号,匹配可以加我微信一起,至少两个人才能匹配。

感觉突然加上了急钱字样

带服务器嘛?

带的。。。。。。。。。。。

哈哈,感觉这样更好看些

蛮不错的样子,这个项目成本花了多少

2年半的业余时间,和几千根头发

美术你都自己做啊,看来 能者多劳 说的没错

是的呢,美术资源都是自己用ps做的

264限时低价,抓紧抢购啦。。。。。。。

我在想,卖出50份应该已经是很好了吧?

才卖几份,这个钱也太难挣了。。。

大家好,今天给大家分享下,此moba项目中的事件用法。相信大家都遇到过,无论是网络事件,还是实现游戏业务的时候用的事件,在写法上都会有些痛处,今天给大家带来的是一个公共的事件管理器,一个管理器便能解决游戏中所有的事件需求。废话不多说,上代码:

import { EventHandler, Node } from "cc";
export class EventManager{

    private dict: any={};

    public static Instance:EventManager=new EventManager();

    /**

     * 添加消息监听

     * @param type 消息唯一标识

     * @param listener 侦听函数

     * @param listenerObj 侦听函数所属对象

     *

     */

    public addListener(type: string, listener: Function, listenerObj: any): void {

        var arr: Array<any> = this.dict[type];

        if (arr == null) {

            arr = new Array<any>();

            this.dict[type] = arr;

        }

        //检测是否已经存在

        var i: number = 0;

        var len: number = arr.length;

        for (i; i < len; i++) {

            if (arr[i][0] == listener && arr[i][1] == listenerObj) {

                return;

            }

        }

        arr.push([listener, listenerObj]);

    }

    /**

     * 移除消息监听

     * @param type 消息唯一标识

     * @param listener 侦听函数

     * @param listenerObj 侦听函数所属对象

     */

    public removeListener(type: string, listener: Function, listenerObj: any): void {

        var arr: Array<any> = this.dict[type];

        if (arr == null) {

            return;

        }

        var i: number = 0;

        var len: number = arr.length;

        for (i; i < len; i++) {

            if (arr[i][0] == listener && arr[i][1] == listenerObj) {

                arr.splice(i, 1);

                break;

            }

        }

        if (arr.length == 0) {

            this.dict[type] = null;

            delete this.dict[type];

        }

    }

    /**

     * 移除某一对象的所有监听

     * @param listenerObj 侦听函数所属对象

     */

    public removeAll(listenerObj: any): void {

        var keys = Object.keys(this.dict);

        for (var i: number = 0, len = keys.length; i < len; i++) {

            var type = keys[i];

            var arr: Array<any> = this.dict[type];

            for (var j = 0; j < arr.length; j++) {

                if (arr[j][1] == listenerObj) {

                    arr.splice(j, 1);

                    j--;

                }

            }

            if (arr.length == 0) {

                this.dict[type] = null;

                delete this.dict[type];

            }

        }

    }

    /**

     * 触发消息

     * @param type 消息唯一标识

     * @param param 消息参数

     *

     */

    public dispatch(type: string, ...param: any): void {

        if (this.dict[type] == null) {

            return;

        }

        this.dealMsg(type,undefined,param);

    }

       /**

     * 触发指定对象的消息

     * @param type 消息唯一标识

     * @param param 消息参数

     *

     */

    public dispatchObj(type: string,listenerObj: any, ...param: any): any {

        if (this.dict[type] == null) {

            return;

        }

       return this.dealMsg(type,listenerObj,param);

    }

     /**

     * 处理一条消息

     */

    private dealMsg(type: string,listenerObj: any, ...param: any): any {

        var listeners: Array<any> = this.dict[type];

        var i: number = 0;

        var len: number = listeners.length;

        var listener: Array<any> = null as unknown as Array<any>;

        let res;

        while (i < len) {

            listener = listeners[i];

            // console.log('listenerObj='+listenerObj+',listener[1]='+listener[1])

            if(!listenerObj || (listenerObj && listenerObj == listener[1])){  //派发

                res=listener[0].apply(listener[1], param);

            }

            if (listeners.length != len) {

                len = listeners.length;

                i--;

            } 

            i++;

        }

        return res;

    }

}

使用方法如下:
注册事件:
EventManager.Instance.addListener(EventType.OnChat,this.OnChat,this.listenerObj)
private OnChat(param: any): void { }

抛出事件到所有的侦听函数对象(带可选参数):
EventManager.Instance.dispatch(EventType.OnChat, 123);

抛出事件到指定的侦听函数对象(带可选参数):
EventManager.Instance.dispatchObj(EventType.OnChat, this.listenerObj, 123);

更多moba项目中经典写法,敬请关注此贴。

主要是你这个是java,你要是go或者rust估计多几个人购买

也可以买来自己翻译成go或其它语言,java是比较通用的语言会的也比较多的。

有这个翻译的时间为什么不自己写一个?java,php过去的10年里各大大学都教学,所以多人会很正常,但是他们已经是过去式了,新项目只要稍微有点头脑的人都不会愿意用他们来做,新项目注意了

自己写更耗时间,并且前端完全从0开始,如果买这个,至少可以对着协议实现自己的后台。还可以参照已经开发的后台。你要知道时间就是金钱。

冲压。。。。。

做程序员做成你这个样子确实有点悲伤~

那老总你年入几千万呀