为C+创建AS3代码+;使用炼金术转换的类(a là;Box2D) P>我有一个C++类的集合,我现在已经用炼金术将它转换成SWC文件,并且可以从我的AS3代码中调用暴露的函数。

为C+创建AS3代码+;使用炼金术转换的类(a là;Box2D) P>我有一个C++类的集合,我现在已经用炼金术将它转换成SWC文件,并且可以从我的AS3代码中调用暴露的函数。,c++,alchemy,C++,Alchemy,我真正想做的是重新创建Box2D的b2Vec.as类 public class b2Vec2 extends b2Base { public function b2Vec2(p:int) { _ptr = p; } public function get v2():V2 { return new V2(x, y); } public function set v2(v:V2):void { x = v.

我真正想做的是重新创建Box2D的b2Vec.as类

public class b2Vec2 extends b2Base {

    public function b2Vec2(p:int) {
        _ptr = p;
    }

    public function get v2():V2 {
        return new V2(x, y);
    }

    public function set v2(v:V2):void {
        x = v.x;
        y = v.y;
    }

    public function get x():Number { return mem._mrf(_ptr + 0); }
    public function set x(v:Number):void { mem._mwf(_ptr + 0, v); }
    public function get y():Number { return mem._mrf(_ptr + 4); }
    public function set y(v:Number):void { mem._mwf(_ptr + 4, v); }

}
这是一个简单的例子,但说明了我想做什么。在C方面,b2Vec2是一个结构

/// A 2D column vector.
struct b2Vec2
{
    /// Default constructor does nothing (for performance).
    b2Vec2() {}

    ....

    float32 x, y;
};
因此,对于这个结构,很容易计算b2Vec2对象的第一个变量是一个浮点,它是x中的值,可以通过Alchemy的MemUser类_mrf(从内存中的一个点读取一个fload)和_mrf(pointerAddress)读取,第二个浮点可以用_mrf(pointerAddress+4)读取

我的问题是,如果你不是C++专家(ME),有什么方法可以得到类的定义,比如在所有变量的地址中,以及它们是什么?所以,对于b2Vec2,我会想象它是这样的, 浮动32 x 0 漂浮物4


<>我之所以问这个问题是因为其中一个类中有很多变量,并且尝试得到每个人的信息,以便我可以直接从AS3代码中访问它,这将是大量的工作,我将假设我会引入大量的人为错误。

< P>非常一般的C++答案是否定的。发现特定结构的成员变量是什么

我不知道炼金术编译的代码是什么样子的。您可以构建一些工具/预处理器来从其他表示生成C++类或结构,然后该工具也可以生成AS3访问器——这将是消除用户错误和一些工作的一种方式。这可能很棘手,因为计算成员变量的地址并不总是那么简单


如果你可以在C++类中调用成员函数,为什么不移动你的get / SET函数并调用这些函数?< /p> < p>我实际上从WCK家伙Jesse Sternberg得到了一个足够好的答案。他得到的大部分AS3类与他们的C++配对,在他自己的“探针”文件夹中的构建过程中自动完成。在那里,有一个Box2D.c类,它在顶部定义了一个模板负载,然后在主函数中,探测成员变量的类,并打印出相关的AS3代码,以便从该端访问它们

习惯它有点时髦,但肯定非常方便,而且比手动操作要好得多