首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在unrealscript中打印Vector2D

如何在unrealscript中打印Vector2D
EN

Stack Overflow用户
提问于 2013-05-26 02:40:25
回答 1查看 297关注 0票数 0

我有这个函数:

代码语言:javascript
复制
function AddImpulse(Vector2D impulse)
{
    `log("ADD IMPULSE: " $ impulse);
}

问题是我得到了这样的错误:“正确的类型与'$‘不兼容。似乎,尽管内置的向量类会自动转换为字符串,但Vector2D类只是一个内置的结构,没有任何操作符重载或自动转换。

代码语言:javascript
复制
static final operator(40) string $ (string A, Vector2D B)
{
    return A $ string(B.x) $ ", " $ string(B.y);
}

有没有一种方法可以做到这一点,这样我就不需要每次都这样做:

代码语言:javascript
复制
`log("ADD IMPULSE: " $ impulse.x $ "," $ impulse.Y);

虽然这在Vector2D的情况下还不错,但对于较大的结构或类,这将变得很麻烦。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-27 03:35:21

不幸的是,在UnrealScript中进行泛型编程的选择是有限的。一种选择可能是将运算符重载放在一个包含文件中,并使用`include宏将其包含在需要它的每个类中。

如果这不起作用,另一种选择可能是使用宏调用特殊类中的静态函数来处理结构到字符串的转换。

首先,在代码包的根文件夹中创建一个Globals.uci文件。Globals.uci是一个特殊文件,编译器会自动将其包含在与其关联的包中的所有UncrealScript文件中。如果您的包名为MyPackage,Globals.uci将位于开发/Src/MyPackage/Globals.uci中。它应该紧挨着你的包的Classes文件夹。

将宏放入Globals.uci:

代码语言:javascript
复制
`define toString(type,name) class'MyStructConversions'.static.`{type}ToString(`{name},"`{name}")

将您的转换函数放在MyStructConversions.uc中:

代码语言:javascript
复制
class MyStructConversions;

static function string Vector2DToString (const out Vector2D A, string varname)
{
    return varname $ ": (" $ A.X $ ", " $ A.Y $ ")";
}

现在,当您从包中的任何位置调用`toString(Vector2D, impulse)时,宏将在编译时被替换为对Vector2DToString函数的调用。然后,您可以通过向MyStructConversions.uc添加适当的定义来支持更多的结构类型,并且toString宏将与它们无缝协作。

有关UnrealScript preprocessor的文档包含有关`include和其他宏的更多信息。查看开发/源/核心中的Globals.uci,也可以获得一些有用的示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16752788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档