1.选中任务,选择配置/构建触发器,选择定时构建     2.填写定时器参数,格式说明如下,共五个参数,参数之间空格隔开,不需要填的直接号即可。  此处d定时任务的格式遵循cron的语法(可以与cron的语法有轻微的差异)。具体格式,每行包含5个字段,依次为分钟、小时、日、月、星期几,并通过Tab或空格分隔。        3.示例:工作日早上11点执行任务,配置如下 H111-5   4.定时任务到点开始执行 5.其他示例 每天下午18点定时构建一次:H18 每天上午1...

  qoEB0jNju44b   2024年04月03日   54   0   0 敏捷开发

此系列文章逐个内容讲解ET8.1的新特性。 ET8.1发布,带来以下新特性: 1.多线程多进程架构,架构更加灵活强大,多线程设计详细内容请看多线程设计课程  2.抽象出纤程(Fiber)的概念,类似erlang的进程,非常轻松的创建多个纤程,利用多核,仍然是单线程开发的体验  3.纤程调度:主线程,线程池,每个纤程一个线程,3种调度方式  4.Fiber间通信的Actor消息机制  5.Entity方面,domain改成IScene,只要实现IScene接口,Entity就是domain,这样定义domain更加自由 ...

  qoEB0jNju44b   2024年04月01日   103   0   0 .NET

UDP 以及TCP是什么。我们知道传输层中有TCP和UDP两种网络协议,这节就讲UDP是什么。 Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,UserDatagramProtocol)。UDP为应用程序提供了一种无需建立连接就可以发送封装的IP数据包的方法。RFC768描述了UDP。 UDPAPI 图片来自网络 TCP与UDP的不同 UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它...

  qoEB0jNju44b   2024年01月12日   41   0   0 网络安全

VS2022之后,其实还挺好用的,但个人还是习惯VS+Resharper的强强组合,尤其是Ctrl+N快捷键的全局搜,比VS自带的Ctrl+T好用太多了,Ctrl+B还能直接查看反编译之后的dll的方法。下面是常用VS快捷键,收藏记录下。 1、项目快捷键CTRL+SHIFT+B生成解决方案CTRL+F7生成编译CTRL+O打开文件CTRL+SHIFT+O打开项目CTRL+SHIFT+C显示类视图窗口F4显示属性窗口SHIFT+F4显示项目属性窗口CTRL+SHIFT+E显示资源视图F12转到定义CTRL+F12转到声明CTRL+ALT+J对象浏览CTRL+ALT+F1帮助目录CTRL+F1动态...

  qoEB0jNju44b   2023年12月31日   92   0   0 .NET

VS2022之后,其实还挺好用的,但个人还是习惯VS+Resharper的强强组合,尤其是Ctrl+N快捷键的全局搜,比VS自带的Ctrl+T好用太多了,Ctrl+B还能直接查看反编译之后的dll的方法。下面是常用VS快捷键,收藏记录下。 1、项目快捷键CTRL+SHIFT+B生成解决方案CTRL+F7生成编译CTRL+O打开文件CTRL+SHIFT+O打开项目CTRL+SHIFT+C显示类视图窗口F4显示属性窗口SHIFT+F4显示项目属性窗口CTRL+SHIFT+E显示资源视图F12转到定义CTRL+F12转到声明CTRL+ALT+J对象浏览CTRL+ALT+F1帮助目录CTRL+F1动态...

  qoEB0jNju44b   2023年12月12日   31   0   0 .NET

最近用ET8搞微信小游戏测试,部署到云服务器,手机上运行,必须要用https备案过得域名,客户端使用websocket创建必须要wss开头,服务端部分通过Nginx进行https通信之后转发到云服务器的内网ET服,表格配置部分如下,当前我使用端口4xxx系列,对应服务端映射之后的3xxx端口。  代码部分,C2R_LoginHandler返回给客户端连接gate的端口需要改为用RewritePort,(实际上开发模式用ws+Port,发布模式用wws+RewritePort,这部分逻辑自己写即可)  去下载Nginx nginx:download,解压到云服务...

  qoEB0jNju44b   2023年11月02日   73   0   0 游戏开发

Legends-Of-Heroes FlameskyDexive/Legends-Of-Heroes:Abattleofballsgame,lolstyle.基于ET7.2的双端C(.net7+Unity3d)多人在线英雄联盟风格的球球大作战。(github.com) 一个LOL风格的球球大作战游戏,基于ET7.2,使用状态同步  Main 基于C双端框架[ET7.2],同步到ET主干详情请看日志。(https://github.com/egametang/ET)注意:已经升级.Net7,请安装.Net7SDK. 此游戏为ET7.2的一个实践项目demo,玩法主要是球球大作...

  qoEB0jNju44b   2023年11月02日   75   0   0 .NET

什么是协程 说到协程,我们先了解什么是异步,异步简单说来就是,我要发起一个调用,但是这个被调用方(可能是其它线程,也可能是IO)出结果需要一段时间,我不想让这个调用阻塞住调用方的整个线程,因此传给被调用方一个回调函数,被调用方运行完成后回调这个回调函数就能通知调用方继续往下执行。举个例子:下面的代码,主线程一直循环,每循环一次sleep1毫秒,计数加一,每10000次打印一次。 privatestaticvoidMain() { intloopCount=0; while(true) { inttemp=watcherValue; Thread.Sleep(1); loopCount; ...

  qoEB0jNju44b   2023年11月02日   54   0   0 .NET

更好的协程 上文讲了一串回调就是协程,显然这样写代码,增加逻辑,插入逻辑非常容易出错。我们需要利用异步语法把这个异步回调的形式改成同步的形式,幸好C已经帮我们设计好了,看代码 //example2_2 classProgram { privatestaticintloopCount=0; staticvoidMain(string[]args) { OneThreadSynchronizationContext_=OneThreadSynchronizationContext.Instance; Console.WriteLine($"主线程:{Thread.CurrentThread...

  qoEB0jNju44b   2023年11月02日   95   0   0 .NET

单线程异步 前面几个例子都是多线程实现的异步,但是异步显然不仅仅是多线程的。我们在之前的例子中使用了Sleep来实现时间的等待,每一个计时器都需要使用一个线程,会导致线程切换频繁,这个实现效率很低,平常是不会这样做的。一般游戏逻辑中会设计一个单线程的计时器,我们这里做一个简单的实现,用来讲解单线程异步。 //example2_3 classProgram { privatestaticintloopCount=0; privatestaticlongtime; privatestaticActionaction; staticvoidMain(string[]args) { Consol...

  qoEB0jNju44b   2023年11月02日   95   0   0 .NET

一切皆实体 目前十分流行ECS设计,主要是守望先锋的成功,引爆了这种技术。守望先锋采用了状态帧这种网络技术,客户端会进行预测,预测不准需要进行回滚,由于组件式的设计,回滚可以只回滚某些组件即可。ECS最重要的设计是逻辑跟数据的完全分离。即EC是纯数据,System实际上就是逻辑,由数据驱动逻辑。数据驱动逻辑是什么意思呢?很简单通过Update检测数据变化,通过事件机制来订阅数据变化,这就是所谓的数据驱动了。其它的特点例如缓存命中,在编写逻辑上来说并不太重要,现代游戏都用脚本,连脚本的性能都能容忍怎么会在乎缓存命中那点性能提升?ET在设计的时候吸收了这些想法,但是并不完全照搬,目前的设计是我经过...

  qoEB0jNju44b   2023年11月02日   78   0   0 .NET

事件机制EventSystem ECS最重要的特性一是数据跟逻辑分离,二是数据驱动逻辑。什么是数据驱动逻辑呢?不太好理解,我们举个例子一个moba游戏,英雄都有血条,血条会在人物头上显示,也会在左上方头像UI上显示。这时候服务端发来一个扣血消息。我们怎么处理这个消息?第一种方法,在消息处理函数中修改英雄的血数值,修改头像上血条显示,同时修改头像UI的血条。这种方式很明显造成了模块间的耦合。第二种方法,扣血消息处理函数中只是改变血值,血值的改变抛出一个hpchange的事件,人物头像模块跟UI模块都订阅血值改变事件,在订阅的方法中分别处理自己的逻辑,这样各个模块负责自己的逻辑,没有耦合。ET提供...

  qoEB0jNju44b   2023年11月02日   64   0   0 .NET

Actor模型 Actor介绍 在讨论Actor模型之前先要讨论下ET的架构,游戏服务器为了利用多核一般有两种架构,单线程多进程跟单进程多线程架构。两种架构本质上其实区别不大,因为游戏逻辑开发都需要用单线程,即使是单进程多线程架构,也要用一定的方法保证单线程开发逻辑。ET采用的是单线程多进程的架构,而传统Actor模型一般是单进程多线程的架构,这点是比较大的区别,不能说谁更好,只能说各有优势。优劣如下: 逻辑需要单线程这点都是一样的,erlang进程逻辑是单线程的,skynetlua虚拟机也是单线程的。ET中一个进程其实相当于一个erlang进程,一个skynetlua虚拟机。 采用单线程多...

  qoEB0jNju44b   2023年11月02日   121   0   0 .NET

ActorLocation Actor模型只需要知道对方的InstanceId就能发送消息,十分方便,但是有时候我们可能无法知道对方的InstanceId,或者是一个Actor的InstanceId会发生变化。这种场景很常见,比如:很多游戏是分线的,一个玩家可能从1线换到2线,还有的游戏是分场景的,一个场景一个进程,玩家从场景1进入到场景2。因为做了进程迁移,玩家对象的InstanceId也就变化了。ET提供了给这类对象发送消息的机制,叫做ActorLocation机制。其原理比较简单: 因为InstanceId是变化的,对象的Entity.Id是不变的,所以我们首先可以想到使用Entity...

  qoEB0jNju44b   2023年11月02日   86   0   0 .NET

类似魔兽世界,moba这种技能极其复杂,灵活性要求极高的技能系统,必须需要一套及其灵活的数值结构来搭配。数值结构设计好了,实现技能系统就会非常简单,否则就是一场灾难。比如魔兽世界,一个人物的数值属性非常之多,移动速度,力量,怒气,能量,集中值,魔法值,血量,最大血量,物理攻击,物理防御,法术攻击,法术防御,等等多达几十种之多。属性跟属性之间又相互影响,buff又会给属性增加绝对值,增加百分比,或者某种buff又会在算完所有的增加值之后再来给你翻个倍。 普通的做法: 一般就是写个数值类: classNumeric { publicintHp; publicintMaxHp; publicint...

  qoEB0jNju44b   2023年11月02日   91   0   0 .NET

AI框架 1.几种AI的设计 AI在游戏中很多,但是为什么大家总是感觉ai编写起来十分困难,我后来思考了一番,主要原因是使用的方法不当。之前大家编写ai主要有几种方案: a.状态机 我是不知道谁想出来这个做法的,真是无力吐槽。本来对象身上任何数据都是状态,这种方法又要把一些状态定义成一种新的节点,对象身上状态变化会引起节点之间的转换,执行对应的方法,比如OnEnterOnExit等等。这里以怪物来举例,怪物可以分为多种状态,巡逻,攻击,追逐,返回。怪物的状态变化有: 巡逻->追逐巡逻状态发现远处有敌人变追逐状态巡逻->攻击巡逻发现可以攻击敌人变攻击状态攻击->追逐攻击状态发现...

  qoEB0jNju44b   2023年11月02日   66   0   0 .NET

什么是行为机 顾名思义,类比状态机每个节点是一个状态,行为机每个节点是描述一种行为。行为机每个节点之间是互斥的,并且节点相互之间完全不用关心是怎么切换的。这里就不讲状态机跟行为树是怎么做ai的了,这里只讲用行为机怎么做一个ai。举个例子mmo中的小怪策划案,大致会这么写: 小怪在出生点周围巡逻。发现周围有玩家则选择一个玩家做目标,追击该目标玩家,追到目标玩家则攻击目标玩家,发现距离出生点太远则返回,返回到出生点则继续巡逻 1.定义ai的各种行为 我们首先定义好怪物有哪些行为。很简单,我们直接根据策划案中的字面意思,怪物大致有这么几种行为:a.巡逻b.选择一个玩家追击并且攻击e.返回出生点。 注...

  qoEB0jNju44b   2023年11月02日   132   0   0 .NET

最近ET做热更重载dll的时候,返回登陆会重新检测新的dll,首次登录之前已经Assembly.Load()过一次dll,第二次返回登陆再次loaddll到内存中,Invoke执行方法的时候,异常了,有些方法执行了,有些未执行,于是查资料,看到些老资料说Assembly.Load重复加载同名dll不会有问题,而却现在有异常了。断点看到重复加载的dll重复的堆在了AppDomain.CurrentDomain.GetAssemblies()里面,多分dll引发了方法调用异常,Assembly不会自动在重复加载同一份dll的时候先清理旧的再加载新的,二十堆叠加载到内存中去,Assembly也没提供...

  qoEB0jNju44b   2023年11月02日   57   0   0 .NET

强大的MongoBson库 后端开发,统计了一下大概有这些场景需要用到序列化: 对象通过序列化反序列化clone 服务端数据库存储数据,二进制 分布式服务端,多进程间的消息,二进制 后端日志,文本格式 服务端的各种配置文件,文本格式 C序列化库有非常非常多了,protobuf,json等等。但是这些序列化库都无法应当所有场景,既要可读又要小。protobuf不支持复杂的对象结构(无法使用继承),做消息合适,做数据库存储和日志格式并不好用。json做日志格式合适,但是做网络消息和数据存储就太大。我们当然希望一个库能满足上面所有场景,理由如下: 你想想某天你的配置文件需要放到数据库中保存,你...

  qoEB0jNju44b   2023年11月01日   71   0   0 架构设计
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~