找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 531|回复: 0

[经验分享探讨] 关于事件处理的一些看法

[复制链接]
发表于 2025-1-19 22:34:36 | 显示全部楼层 |阅读模式
本帖最后由 笨030504 于 2025-1-19 23:05 编辑

今天观望大佬们讨论的时候想到的一个概括事件处理逻辑的理论模型
实际的处理模型的大部分逻辑(除了一些特殊的)可以由这套理论模型描述。
这套描述模型目前与具体的平台没什么具体关系,也没有挂钩具体的实现。
这套东西也算不上原创,只是单纯把前人的设计理念套到了红警上而已。

预警:可能包含一些理想化的因素。
也希望大家可以补充一下现有的平台扩展的一些超出这套模型的逻辑(

大致是这样的:
结构:
Type.Slot=Closure
Closure={Action;Range|View|Dispatch(Parameter){Action}}
Type是所有游戏对象的类型
Slot是会触发执行的地方
Closure是一个带有属性和行为的闭包
Action是对游戏状态的影响
Range是一系列存在的游戏对象的集合
View是对这个集合的观测方式
Dispatch是派发任务的方式
Parameter是传过去的属性
Range|View|Dispatch(Parameter){Action}合起来就是派发出去处理
参数示例:
Type:各种Techno Object House的Type
Slot:各种时机,如创建,销毁,开火,升级,进驻载员,附着AE/Buff等时机
Closure:具体描述了某个机制。
Action:访问与修改前目标单位和全局单例的属性。
当前目标单位可以修改血量,火力,当前武器,所属作战方,局部变量,某个Slot上的Closure等属性,或进行移动,开火,部署,升级,自毁等操作;
全局单例包括CSF、EVA、音效、素材、全局变量等内容
Range:某个“范围”,如全部的Techno/Building/Cell/House,和单位的所有载员/心控对象等。多个Range之间可以通过类型的和与积构成更加复杂的Range。
View:从“范围”当中看到单位的方式,包括Filter,Transform,Join,Take,Drop等。
Dispatch:向选出的单位派发行为的方式,如ForEach,Accumulate等方式。
Parameter:需要派发出去的参数,如一条逻辑链上需要传递的来源单位,目标单位,所属作战方等数据。
描述示例:
某个超武(Type)在发射时(Slot)会:(接下来是一个Closure)从所有的Building(一个Range)当中
【Filter自己驻军的建筑->Transform里面的驻军->各个建筑的驻军Join成一个集合】(这是View)
然后ForEach到每个目标(这是Dispatch)传递自己的某个xxx变量(这是Parameter)让它们各自加xxx经验(这里是派发出去的Action)
结构化一点的说:
SomeSuperWeaponType.OnFire={
    Buildings | Filter(Selected.House==Self.House && IsOccupied==true) | Transform(Selected.Occupier) | Join() | Foreach(_Exp = Self._ExpAmount){
        Self.AddExp(_Exp);
    }
}

一个单位A创建时吸引敌方的所有当时在场的B步兵向A移动,存在15÷"A创建时,B步兵的数量"秒后自毁,并让向它移动的B停止
A.OnCreate={
    _BRange = Infantries|Filter(Selected.Type==B && Selected.House.IsEnemyOf(Self.House) );
    _BRange | Foreach(_T=Self){
        Self.MoveTo(_T)
    }
    _BRange|Accumulate(&_V=_Temp){ _V++; }
    Self.DelayedAction( Seconds(15 / _Temp), (_R = _BRange){
        _R | Foreach(){ Self.Stop(); }
        Self.Destroy();
    })
}




您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|Archiver|手机版|管理员邮箱|红警DIY论坛

GMT+8, 2025-5-23 07:14 , Processed in 0.045499 second(s), 8 queries , APCu On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表