gpt4 book ai didi

ios - GameplayKit - 关于在组件之间发送消息的困惑

转载 作者:搜寻专家 更新时间:2023-10-30 22:34:41 25 4
gpt4 key购买 nike

我正在使用 Spritekit 深入研究 GameplayKit,根据我收集的信息,您将 GKEntity 子类化,然后开始向该实体添加 GKComponents。实体将或多或少只是一袋填充某些功能的组件。

我感到困惑的部分是组件之间的通信。你如何让他们分离。例如,假设我有一个 HealthComponent 类,我将该组件添加到一个 PlayerEntity 和一个 EnemyEntity。我还有一个 HealthBarComponent 但我只想在玩家上方显示一个健康栏。当玩家受到伤害时,需要在 HealthBarComponent 中更新该信息。

那么应该如何发送这些信息呢?我看到文档中有一个名为 GKComponentSystem 的类。我不是 100% 知道应该如何使用它。

另一个问题是……当玩家的生命值降为零时,他应该重生,而敌人应该保持死亡状态。当玩家的生命耗尽时,游戏结束。

敌人和玩家的健康系统大致相同,但死亡事件对每个人来说都是完全不同的。我没有遵循如何在保持每个实体的独特行为的同时使用组件系统。

一些伪代码会很棒

最佳答案

看起来这个框架的工作方式与我见过的其他框架有点不同,因为该系统仅适用于单一类型的组件,而不适用于具有 组件类型的实体。

在 GamePlay-Kit 框架中,您可以循环遍历并手动更新您的实体(这反过来会更新每个实体组件)或创建一个继承自 GKComponentSystem 的类。然后,当您更新系统时,它会更新所有组件 you have added to it只要他们的类(class)类型与您的类型匹配 initialized the system with

为了处理您的健康栏问题,我会说制作一个 HealthBarComponent,它在更新期间从其所有者实体中检索 HealthComponent,读取健康值并呈现自身每一帧。但你只有add一个 HealthBarComponent 到你的玩家实体。

您可以从组件中检索所有者实体,反之亦然(请参阅 GKComponent.entityGKEntity.components),因此您可以像这样更新您的健康栏:

/*Note: I'm not an ios developer, this is pseudocode*/

HealthBarComponent.update(){
int healthValue = self.entity.components.get(HealthComponent).value;
//Now render your health bar accordingly or hold onto this for later
}

为了处理玩家死亡问题,我认为您最好的选择是拥有两种不同类型的健康组件(PlayerHealth 和 EnemyHealth)以及两个不同的对应系统。那或有一个健康成分但有 2 个独立的“死亡”成分。是的,这似乎是多余的,但我很难在这个框架内想出更好的方法。根据我的经验,您要么花时间担心如何让一切完全解耦和可重用,要么您构建一个游戏 :)

关于ios - GameplayKit - 关于在组件之间发送消息的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32446478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com