我正在尝试将Box2DFlashAS3物理引擎移植到另一种语言(Xojo)。我对Actionscript不是特别流利(但是我比使用最初编写Box2D的C ++更加流畅)。
据我了解,参数传递给Actionscript中的函数的参数。考虑这两个类(为了简单起见,大大减少了,这是我感兴趣的两个GetInverse()
函数):
public class b2Mat22 {
public function GetInverse(out:b2Mat22) : b2Mat22 {
var a:Number = col1.x;
var b:Number = col2.x;
var c:Number = col1.y;
var d:Number = col2.y;
var det:Number = a * d - b * c;
if (det != 0.0)
{
det = 1.0 / det;
}
out.col1.x = det * d; out.col2.x = -det * b;
out.col1.y = -det * c; out.col2.y = det * a;
return out;
}
public var col1:b2Vec2 = new b2Vec2();
public var col2:b2Vec2 = new b2Vec2();
}
和
public class b2Transform {
public function GetInverse(out:b2Transform = null) : b2Transform {
if (!out)
out = new b2Transform();
R.GetInverse(out.R);
out.position.SetV(b2Math.MulMV(out.R, position));
out.position.NegativeSelf();
return out;
}
public var position:b2Vec2 = new b2Vec2();
public var R:b2Mat22 = new b2Mat22();
}
我不理解R.GetInverse(out.R);
课程中的b2Transform
。 GetInverse()
类的b2Mat22
函数不返回值吗?如果是这样,为什么不使用?
答案 0 :(得分:0)
函数返回值并不意味着需要使用此值。
这是一个例子: 数组 - 反向()
返回:Array - 新数组。 反转阵列。
var letters:Array = new Array("a", "b", "c");
trace(letters); // a,b,c
letters.reverse();
trace(letters); // c,b,a
您可以看到它修改了数组,但 STILL 会返回新数组。这可以用于某些技术,如方法链:
myArray.reverse().concat(...) //you couldn't do this if it didn't return the new array, in that case you would have to do this:
// --->
myArray.reverse();
myArray.concat(...);
另请注意,在AS中(就像在JS,Java等中一样),如果参数是对象,则参数通过引用传递,但原始值不通过引用传递。
现在说完整的事实我不知道Box2D的那些方法是做什么的,但我相信情况可能就是这样。