C# 异步模型(状态机)
[toc]
# C#5.0 async 转换成 C#4.0 原生代码
先去这个网站: https://sharplab.io
然后输入以下代码
using System;
using System.Threading.Tasks;
public class C {
static async Task Main(string[] args)
{
await StartSilo();
Console.WriteLine("开启CardServer!");
Console.ReadLine();
}
private static async...
more...
Skynet下的Actor编程模型
题记:
起初以为 Actor 是互联网之间通讯的一个解决方案
后来发现 Actor 是为了解决 ` 并发编程 ` 困难的一个解决方案
事实上,Skynet 中的 Actor 本质上就是一个又一个_`Lua 虚拟机`_, 借助 Lua 虚拟机的环境隔离来实现 Actor 的环境隔离,同时又能保证运行在同一个线程中。而 Actor 与 Actor 之间的交互则是通过 ** 链表级的消息队列 **,
应用层面上来讲,借助 Actor 编程模型,可以实现类似于前端的状态机一样的效果,
优化方案则是通过 ** 预创建多个 Actor, 或者 Actor 池 ** 来实现高并发
more...
C语言EBNF实现简单四则运算
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
/*
范式如下:
command->expr’\n’
expr->term{’+'term}
term–>factor { ‘*’ factor}
factor–>‘(’ expr ‘)’ number
number–>digit { digit...
more...
C语言实现虚函数表
在 C 系语言中,struct 占用的内存是连续的,我们可以利用这个 struct分配的内存是连续的 这个特性来实现虚函数表
只需要给每个结构体头部加上一个虚函数表指针就可以了,因为指针在 C 系语言中占用的内存固定八字节,所以我们可以将基类的方法放到基类的虚函数表里
子类继承父类时,让子类实现对应的方法,并把方法绑定到对应虚函数表内的函数指针上,然后除去从父类继承的内存而言,其余的派生方法和参数都是放置在虚函数表内存后面排列
而取派生前面的那串连续的内存,结构上和父类是一摸一样的,所以可以强制转换.(多态)
#include<stdio.h>
typedef...
more...
基于指令的连招系统
之前一直用做的那个状态机运行时,但是做到连招这里时发现总是不能很好地衔接起来,后面查看了一些资料,学了下前摇,后摇,以及它们存在的意义,才明白前摇和后摇本身就是为了能够更顺滑的连招.
然后思考怎么样能够把不同的技能连贯起来,之前想的是角色状态机有很多状态,连击普攻状态,技能状态,等等。但是这样的设计就导致了几个状态之前无法很顺利的切换,所以想到了一个设计模式,命令模式.
即把不同的指令放进一个指令流中,这个指令流根据指令进行排序,(比如大根堆), 堆顶的是当前优先级最高的指令,每次 Tick 时判断是否替换当前指令,至于行为交给指令本身去做,角色控制器不管这个
后摇是当前状态到 Idle...
more...
Shader物体消隐(Dissolve)
# 分析
由上图我们可以知道,一个消隐主要分为四个部分
消失边缘
消失内边缘
消失部分
未消失部分
其实很简单,我们只需要一张黑白噪音贴图即可,这张贴图是灰度图,我们用一个参数 **_DisAmount 来代表当前阈值,(取值 0-1), 假设噪音贴图对应 uv 坐标上的数值为 k**, 那么我们就可以判断 (k-_DisAmount) 是否小于 0 如果这个值小于 0, 就认为消失, 否则就根据值的大小来判断是外边元还是内边缘,然后直接着色即可
# 代码
//lit toon dissolve by @minionsart
Shader “Toon/Lit Dissolve”...
more...
在Unity中使用Shader和SDF制作渐变血条
血条效果
Freya Holmér 的《Shaders for GameDev》
[toc]
# 血条渐变
首先我们需要一个参数 (范围限定在 [0-1]),当健康度为 0 时显示红色,健康度为 1 时显示绿色.
然后我们需要血条随着健康度变化 (渐变)
这时候就需要用到渐变贴图.
血条类渐变贴图模板
另外两种渐变图
径向渐变
随角度渐变
通过_Health 得到渐变位置
所有的都基于一个 quad 面片,这个面片的 uv 坐标上有 x 分量,且 x 是 clamp (0,1) 的。所以我们可以通过设置一个 [0,1] 的 float 变量_Health...
more...
TextMesh Pro 创建中文字体流程
两种方式,一个是根据字体的编码范围手动设置,一种是去网络上下载一套字体集 (.txt 的).
图 1. 打开 Font Asset Creator
首先进入 Windows/TextMeshPro/Font Aasset Creator
然后在 Source Font File 上选中自己想转换的字体
以及想要转换的字符有哪些 (Character File)
Render Mode 不要选择 Smooth, 选择 SDF (不然会很模糊)
然后 Genrate 就行了
more...