通常,低级语言支持struct
,这正是我想在AS3中强力定义的内容。我们可以在C#上执行此操作,但是为什么这样做呢?因为3d位置非常普遍,并且为每个3d位置创建一个对象很无聊,只是因为您不能自由地用其他语言获得不可变的结构,除非您不想自己声明一堆本地人。
struct Vec3f {
public double x;
public double y;
public double z;
}
class Test {
static void Main() {
Vec3f cam1 = new Vec3f();
Vec3f cam2 = cam1;
cam1.x = 10;
System.Console.WriteLine(cam1.x == cam2.x); // false
}
}
如您所见,Vec3f
是不可变的值类型。但是在JS,Lua,AS3或其他我们通常不能拥有的这类不可变结构中。是的,我们使用的对象始终是垃圾收集的AFAIK。
在AS3中,我希望能够将一个类元标记为 * immutable * ,但是我不知道该如何在任何地方都不被支持。没有现有的ABC级工具,怎么办?
[Immut] // or [Immutable]
class Vec3f {
var x: Number
var y: Number
var z: Number
}
var a: Location = new Location
var b: Location = a
a.x = 10
a.y === b.x // `true`, but should be *********`false`*********
// for `Vec3f`.
答案 0 :(得分:0)
(1)
通常,底层语言支持结构,这正是我想在 AS3 中随意定义的内容。
上执行此操作
我们可以在 C# ...
关于您的AS3与C#结果...
// C# : System.Console.WriteLine(cam1.x == cam2.x); // gives false.
// AS3 : trace(a.y === b.x); // gives "true", but should be ******** "false".
AS3结果是因为您先前使用了:var b: Location = a
,它实际上使b == a
有效。因此,现在a
发生变化时,b
也会发生变化。
解决方案:
要创建结构的hack-ish版本,您只需使用类。要使每个类都唯一,只需使用 new 关键字。
import Vec3f; //import the class (if external AS file)
//# then use "new" keyword to make variables as unique instance of class
var cam1 :Vec3f = new Vec3f();
var cam2 :Vec3f = new Vec3f();
//# check start values (where... vec3f.x == 5 )
trace(" 01 :: cam1.x == " + (cam1.x) ); //gives 5
trace(" 01 :: cam2.x == " + (cam2.x) ); //gives 5
//# update values
cam1.x = 10;
trace("cam1.x == cam2.x ??? result : " + (cam1.x == cam2.x) ); //gives false
//# value checks v2 (results after update)
trace(" 02 :: cam1.x == " + (cam1.x) ); //gives 10
trace(" 02 :: cam2.x == " + (cam2.x) ); //gives 5
即使Java没有struct
对象,所以typical solution (example)也是“只使用类” 。
在AS3中,其他人已经通过创建自己的 point3D 实现(例如在this example中解决了此问题。
(2)
但是为什么要这样做(使用
struct
)?因为3D位置非常普遍,所以为每个3D位置创建一个对象很无聊。
也许可以研究Vector3D API。设置很容易(w
是一个可选值,例如:角度或速度)。
var some_vec3f = new Vector3D(x:Number = 0., y:Number = 0., z:Number = 0., w:Number = 0.);
又读:
AS3 Matrix3D
API指南。
AS3 PerspectiveProjection
API指南。
希望这可能足以帮助您获得3D点的数据容器。