y3-editor / y3-lualib

MIT License
146 stars 42 forks source link

行为树不同步bug #388

Open sumneko opened 5 months ago

sumneko commented 5 months ago

@xuhuanzy

image

clock里遍历timer的顺序可能是不一致的 虽然_timers是有序表 但是_removeTimers和_addTimers不是 遍历他们两个的顺序是不确定 导致加到_timers里也变得不确定了

xuhuanzy commented 5 months ago

顺序是确定的,remove确定存在于timer,add是根据id来加入的,而id是确定的,在GetTimerFromPool分配

sumneko commented 5 months ago

_removeTimers 的 key 是 timer.Action ,看起来是个函数

xuhuanzy commented 5 months ago

无所谓啊,最终都是转成id来对_timer做操作。

sumneko commented 5 months ago

确实,我这边再查查,有人反馈会导致不同步

xuhuanzy commented 5 months ago

发代码看看

sumneko commented 5 months ago

我明天让他自己先查一下

Hetuohua commented 5 months ago

发代码看看

function mt:createRootNode() local blackboard = New 'NPBehave.Blackboard' (NPBehave.Context.Clock) self.blackboard = blackboard local root = New 'NPBehave.Root'(self:createMainNode(), blackboard, NPBehave.Context.Clock) self.root = root end

function mt:createMainNode() local function updateActive() self.blackboard:Set('active', not self.blackboard:Get('active')) end local service = New 'NPBehave.Decorator.Service'(0.5, updateActive, New 'NPBehave.Composite.Selector' ( New 'NPBehave.Decorator.BlackboardCondition' ('active', NPBehave.Enum.Operator.IsEqual, true, NPBehave.Enum.Stops.ImmediateRestart, New 'NPBehave.Composite.Selector'( New 'NPBehave.Task.Action' ({singleFrameFunc = function () return false end}), New 'NPBehave.Task.Action' ({singleFrameFunc = function () return true end}) ) ), New 'NPBehave.Task.WaitUntilStopped'() )) return service end

xuhuanzy commented 5 months ago

发代码看看

function mt:createRootNode() local blackboard = New 'NPBehave.Blackboard' (NPBehave.Context.Clock) self.blackboard = blackboard local root = New 'NPBehave.Root'(self:createMainNode(), blackboard, NPBehave.Context.Clock) self.root = root end

function mt:createMainNode() local function updateActive() self.blackboard:Set('active', not self.blackboard:Get('active')) end local service = New 'NPBehave.Decorator.Service'(0.5, updateActive, New 'NPBehave.Composite.Selector' ( New 'NPBehave.Decorator.BlackboardCondition' ('active', NPBehave.Enum.Operator.IsEqual, true, NPBehave.Enum.Stops.ImmediateRestart, New 'NPBehave.Composite.Selector'( New 'NPBehave.Task.Action' ({singleFrameFunc = function () return false end}), New 'NPBehave.Task.Action' ({singleFrameFunc = function () return true end}) ) ), New 'NPBehave.Task.WaitUntilStopped'() )) return service end

代码不完整。新建一个项目,项目里有完整的可稳定复现的代码,打包项目发我。

Hetuohua commented 5 months ago

不同步bug.zip @xuhuanzy

xuhuanzy commented 5 months ago

你这哪里不同步了? 时间戳都一致的 image image

Hetuohua commented 5 months ago

我加你qq聊 @xuhuanzy

Hetuohua commented 5 months ago

image 先开启同步检测 image 再本地多开运行 就会报不同步 @xuhuanzy

xuhuanzy commented 5 months ago

随机数不同步, 奇怪的情况, 没道理不同步的

xuhuanzy commented 5 months ago

知道原因了, 明天修复吧

xuhuanzy commented 5 months ago

修bug忘买618的东西了……没啥心情了。你看着拉我的库自己合并更新吧

xuhuanzy commented 5 months ago

@sumneko 可以关了

xuhuanzy commented 5 months ago

@sumneko 有点想给行为树的New添加类名注释, 有啥办法不污染你的New? 感觉只能New==新的全局变量来写注释. 要不y3助手把语言分析器集成进来, 实时给New加注释?

sumneko commented 5 months ago

@sumneko 有点想给行为树的New添加类名注释, 有啥办法不污染你的New? 感觉只能New==新的全局变量来写注释. 要不y3助手把语言分析器集成进来, 实时给New加注释?

没懂...不过一般给外部用的话会封装一个 create 函数

xuhuanzy commented 5 months ago

没懂...不过一般给外部用的话会封装一个 create 函数

New的第一个参数弹字符串提示

sumneko commented 5 months ago

哦,那个早有规划,只是没时间做

xuhuanzy commented 5 months ago

@sumneko 有压缩率高点的库吗?拿来压缩存档。 试了下存档似乎不允许二进制保存

sumneko commented 5 months ago

压缩成二进制以后再 base64 一次

xuhuanzy commented 5 months ago

压缩成二进制以后再 base64 一次

用base64也太抽象了吧

birnfly commented 4 months ago

压缩成二进制以后再 base64 一次

用base64也太抽象了吧

不抽象呀,以前网页里面嵌附件都是直接二进制转base64的