gpt4 book ai didi

inheritance - 受歧视的工会和继承

转载 作者:行者123 更新时间:2023-12-03 13:43:30 25 4
gpt4 key购买 nike

我希望为我的 F# 项目创建一个场景图,例如:

root
->player_bob
-->torch
->enemy_1
-->extravagant_hat
-->enemies_cat_jess
--->fleas
--->fur_ball
->loot

等等等等。

每个项目都需要持有一组游戏对象来代表它的 child 。

例如,敌人 1 的列表包含一只猫和一顶帽子,而猫列表包含跳蚤和毛皮球

所以我计划让它们都继承自一个包含描述该对象子对象的集合的类。

现在我的问题:
我是否应该将子对象向下转换为 GameObject 并将它们存储在“GameObject”基类的列表中
或者创建一个有区别的联合,例如
type SceneObject = 
|Character of Character //e.g player, enemy, cat
|Item of Item //e.g hat, torch, furball

并将对象存储为“SceneObjects”列表,以避免向上转换它们的任何问题/开销等。以及允许我描述对象未呈现和/或未用于碰撞检测的特殊情况,例如:声音发射器、陷阱触发器等。

区分联合+继承组合是我最初的想法;不过,由于我是 FP 的新手,我认为向专业人士询问最好的、实用的方法来解决这个问题是明智的。

谢谢,

京东

最佳答案

您可以递归地使用有区别的联合。

type SceneObject = 
| Character of <characterData> * (SceneObject list)
| Item of <itemData> * (SceneObject list)

并像这样使用它
let root = [Character("Bob", [Item("Torch", []); ...]); ...]

关于inheritance - 受歧视的工会和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3594458/

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