今天跟着教程调试某2D界面,发现人物绘图总和给定的position存在偏差,并且移动不按照现有的格子一格一格的移动.
最后通过断点确定了不是TileMap.Tileset.TileSize的问题.而是TileMap.Scale的问题,不知道是误操作还是默认的设置,总之这里的Scale不是(1,1).找到TileMap中Transform->Scale设置改回1,1就行了
一个借用SimpleTex解决在线Tex文档识别的方案
Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.
Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.
Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.
Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.
今天跟着教程调试某2D界面,发现人物绘图总和给定的position存在偏差,并且移动不按照现有的格子一格一格的移动.
最后通过断点确定了不是TileMap.Tileset.TileSize的问题.而是TileMap.Scale的问题,不知道是误操作还是默认的设置,总之这里的Scale不是(1,1).找到TileMap中Transform->Scale设置改回1,1就行了
前言:笔者是第一次使用godot,c#的一些高级特性也不是很精通.今天在跟着b站上视频教程时遇到了奇怪的问题,具体报错如下
xxxxxxxxxx
E 0:00:00:0426 object System.Runtime.CompilerServices.CastHelpers.ChkCastAny(System.Void*, object): System.InvalidCastException: Unable to cast object of type 'Godot.Node' to type 'Fsm'.
<C++ 错误> System.InvalidCastException
<C++ 源文件> :0 @ object System.Runtime.CompilerServices.CastHelpers.ChkCastAny(System.Void*, object)
<栈追踪> :0 @ object System.Runtime.CompilerServices.CastHelpers.ChkCastAny(System.Void*, object)
NodeExtensions.cs:47 @ T Godot.Node.GetNode<T>(Godot.NodePath)
Main.cs:10 @ void Main._Ready()
Node.cs:2137 @ bool Godot.Node.InvokeGodotClassMethod(Godot.NativeInterop.godot_string_name&, Godot.NativeInterop.NativeVariantPtrArgs, Godot.NativeInterop.godot_variant&)
Main_ScriptMethods.generated.cs:48 @ bool Main.InvokeGodotClassMethod(Godot.NativeInterop.godot_string_name&, Godot.NativeInterop.NativeVariantPtrArgs, Godot.NativeInterop.godot_variant&)
CSharpInstanceBridge.cs:24 @ Godot.NativeInterop.godot_bool Godot.Bridge.CSharpInstanceBridge.Call(nint, Godot.NativeInterop.godot_string_name*, Godot.NativeInterop.godot_variant**, int, Godot.NativeInterop.godot_variant_call_error*, Godot.NativeInterop.godot_variant*)
在这里我实现了Fsm类,并在一个Main.cs
文件中导入这个节点GetNode<Fsm>("%Fsm")
x
using Godot;
public partial class Main : Node
{
private Fsm _fsm;
// Called when the node enters the scene tree for the first time.
public override void _Ready()
{
_fsm = GetNode<Fsm>("%Fsm");
GD.Print(_fsm.GetType().Name);
_fsm.Initialize();
}
// Called every frame. 'delta' is the elapsed time since the previous frame.
public override void _Process(double delta)
{
_fsm.Update();
}
}
将此行_fsm = GetNode<Fsm>("%Fsm");
注释并使用GetNode("%Fsm")
,发现返回值为Node,并且该Node实例没有任何属性.
windows的godot4.2没有对场景的自动保存,因此在为场景添加c#脚本后需要手动保存,否则即使创建了c#脚本文件,但是没有和场景进行绑定.
由此,在前面的代码中实际上节点Fsm是不在节点Main下的.
手动指定Script后恢复正常.
Next()
方法,后续中间件及handlers
也会执行;Next()
方法当前中间件剩余代码会被暂停执行,会先去执行后续中间件及handlers
,等这些handlers
全部执行完以后程序控制权会回到当前中间件继续执行剩余代码;return
退出而不是Next()
方法;Abort
方法,但需要注意当前中间件的剩余代码会继续执行。
Key: DFA、NDFA, NDFA到DFA的转换, 正规文法与FA, 正规表达式与FA
编译原理 3rd 章笔记
DFA=(Q,
Q—有穷非空的状态集。
F——
t — 单值映射
“确定”: 当前状态和下一个输入字符惟一地确定了后继状态。
FA的表示:
状态转换表
列key为字母(路径),行Key为状态
状态转换图
类似数电里学的状态转移图,只不过终态用双圆圈
如此,有穷自动机就可以识别符号串了
如果两个有穷自动机A_1和A_2满足
则称自动机
非确定的有穷自动机NDFA
Q一有穷非空的状态集。
F—
t— 多值映射
为避免不可达状态,从初始状态出发,计算t′,依次构造其后继状态,进行确定化
完整过程参考示例请见NFA的确定化珞辰的技术博客51CTO博客
完整过程参考示例请见DFA 的化简_dfa化简-CSDN博客
寻找一个状态数比M更少的DFA Mˊ,使得M和Mˊ所识别的字符串相同,即L(M)=L(Mˊ)。(Mˊ唯一的)
条件:接受的语言相同(等价的DFA)
主要思想:
合并等价状态
等价状态 :如果从DFA 的某个状态q1出发能识别某一字符串x而停止于终态,那么从q2出发也能识别字符串x而停止于终态;反之亦然。则称状态q1 和q2 是等价的。如果q1 和q2 不等价,则说q1 和q2 是可区分的。
Note
两个终态不一定相等,假设有两个终止态F1,F2,但是这两个终止态又是等价的
最小化算法(划分法):DFA最小化的关键在于把它的状态集分成一些两两互不相交的子集,使得任何两个不同的子集中的状态都是可区分的,而同一子集中的任何两个状态都是等价的
删除无关状态
步骤一 构造状态集的划分
步骤二 取每一组中的一个状态作代表 ,合并等价状态
步骤三 删去无关状态
RG: 生成规则,FA:识别(接受)
FA
自动机A中的每一个状态均作为G的非终结符号,其中A的开始状态作为G的开始符号,A的输入字母表中的所有符号作为G的终结符号;
对A中
FA
不在赘述,重点是使用汉语简介地描述正则表达式的含义
注意用词
(8) Ф
设e1,e2均为∑上的正规表达式,若 L(e1 )=L(e2 ),则称e1与e2等价,记为:e1 =e2。
end ppt 62nd page