【发布时间】:2012-07-27 06:11:54
【问题描述】:
我正在为 XNA 中的游戏编程,并尝试创建一个通用数学对象,并在构建期间提供存储的输出位置。
我的计划是在构造函数中使用 ref,但我不确定如何在初始调用之后将该引用保存/存储在对象中...
public MathObject(ref float OutParam)
{
Out = OutParam; // This obviously won't do what I want... But it's where I'd like to do it.
}
在更新中,我想说明输入并让产品修改存储的输出位置:
foreach (MathObject MatOb in MathList)
{
MatOb.Update(time);
}
我们的想法是创建一个模块化数学工具,以在整个代码中使用,并在创建时将其定向到其他地方的预先存在的对象参数(“输出”),它将在更新中修改(无需重新引用)。希望这将允许一个循环来指导工具的每个实例来修改它的给定输出。
据我了解,在 c++ 中,这可以通过将要修改的参数的地址存储在数学对象中,然后在更新中使用它来指向和修改该位置的内存。
在不使用不安全代码的情况下,在 c# 中是否可能发生类似的事情?
是否应该始终避免使用不安全的代码?
编辑:
-- 预期用途--
我希望能够创建具有可调节“设置并忘记”输出位置的对象。
例如,我构建了一个在游戏界面中工作的简单贝塞尔曲线编辑器。我可以在代码中设置输出位置,以便给定曲线始终调整特定参数(例如字符位置),但也可以在界面内修改输出连接的内容。
特定应用程序主要用于游戏内编辑。我知道编辑器在独立时是最实用的,但这将是有限的,游戏控制台友好的编辑功能(不太强大,但原则上类似于 Little Big Planet 的编辑功能)。
我的背景是 3D 设计和动画,因此我习惯于使用许多基于节点的编辑系统 - 创建各种实用节点并调整输入和输出以驱动着色、装配模型等参数。我当然会没有尝试在游戏中重新创建它,但我很好奇将某些原则延续并应用于有限的游戏内编辑功能。只是排除故障最好去做。
感谢您的回复!
【问题讨论】:
-
一旦有人在同一个句子中说出 "universal" 和 "object" 这两个词,我很确定您提出的设计是在处理并发的情况下不安全(这在游戏中很常见,如果这就是您使用 XNA 的原因)。我不清楚你在用这个数学对象做什么以及为什么它需要是通用的。您能否进一步解释一下“为什么”?
-
我在问题中添加了一部分关于我的思路是什么。