- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何减少实体组件系统中的 Duck-typing 现象?
这是一个 coliru demo .
我的 ECS 中有 2 个系统:-
System_Projectile
: 管理所有弹丸和子弹方面。
<强> System_Physic
: 管理物理组件。
有 2 个组件类型: Com_Projectile
, Physics
.
有时,我发现在某些组件中缓存指向另一个实体的指针是很好的:-
class Com_Projectile : public Component{
public:
Entity* physic;
Entity* physicSecondary; //just to show that it is possible to have >1 physic
};
如果我想改变 Com_Projectile
的位置,我会调用manage(Com_Projectile::physic)
.
class System_Projectile{
public: static void manage(Entity* projectile){
Com_Projectile* comP = getComponent<Com_Projectile>(projectile);
//suffer duck-typing at "comP->physic"
System_Physic::setVelocity(comP->physic,Vec3(1,0,0));
}
};
基于上述代码片段的真实程序运行正常。
但是,编码时,Com_Projectile::physic
遭受鸭子类型(duck typing)。
physic
的 C++ 语义线索的类型。因此,我必须对此有意识。
编码人员对类型的误解只能在运行时检测到。
在实践中,这种错误很少发生。
我必须记住可以做我想做的事情的系统名称 ( System_Physic::
),
然后记忆函数的名称(在本例中为 System_Physic::setVelocity()
)。
在我以前,当我使用大量(深度)继承时,它会容易得多,就像这样:-
physic->setVelocity(Vec3(1,0,0));
我真的很怀念列出所有与物理相关的函数的可爱内容帮助。
如何减少ECS系统某部分的duck-typing?
更具体地说,什么是再次启用可爱内容辅助的设计模式?
让Com_Projectile
缓存 Physic* physic
而不是 Entity*
:-
class Com_Projectile{
public: Physics* physic; //edited from "Entity* physic"
};
缺点:-
Physics
里面Com_Projectile.h
. setVelocity()
)从系统(例如 Sys_Physic::
)移动到组件(例如 Physics::
)中。 最佳答案
How to reduce duck-typing in some certain part of ECS system?
More specifically, what is a design pattern to enable the cute content-assist again?
一个想法是将您的组件实现视为您与系统交互的管道。无论如何,这就是他们的意图,成为一种影响行为的数据驱动方式。
class Physics : public Component<Physics> {
public:
Vector3 GetVelocity() const;
void SetVelocity(const Vector3& velocity);
private:
Vector3 velocity_;
}
现在为了设置速度,它是一个简单的调用:
Physics* physics = getComponent<Physics>( projectile->physic );
if ( physics )
physics->SetVelocity( Vector3( 1, 0, 0 ) );
然后物理系统的工作是获取物理组件上的速度,并将其与任何其他数据属性一起应用于内部物理模拟。
换句话说,将系统的输入状态视为当前组件值和先前系统发出的任何其他可变状态的组合。
除了避免您提到的 duck-typing 之外,您最终得到的代码更容易理解,也更容易流动。它还打开了一扇门,很容易被脚本系统和其他外部影响者通过操纵组件上的 getter/setter 来改变。
关于c++ - 减少实体组件系统中的 Duck-typing 劣势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44147862/
如何减少实体组件系统中的 Duck-typing 现象? 例子 这是一个 coliru demo . 我的 ECS 中有 2 个系统:- System_Projectile : 管理所有弹丸和子弹方面
自从 Microsoft 创建 MSTest 以来,我一直在使用它进行单元测试。我从来没有真正使用过 NUnit,我只是不喜欢在我的开发箱上安装另一个工具的需要。到目前为止我只使用了MSTest的基本
我有一个非常复杂的聚合查询,所以我想使用如下 View : db.createView("weNeed","Master", [ {$project: { _id:"$
我们的要求很简单。向订阅主题的用户发送消息。我们需要我们的消息传递系统能够近乎实时地支持数百万个主题,并且可能支持任何给定主题的数百万订阅者。我们的应用程序是用 Java 构建的。 由于社区支持、文档
JWT 优于 cookie 的一个优势似乎是它绕过了对 cookie 的来源限制。 有人可以帮助我了解 JWT 的任何其他优点,重要的是还有其他缺点吗? 最佳答案 优势 JWT是一种无状态身份验证机制
我是一名优秀的程序员,十分优秀!