2014-10-15 2 views
0

Box2DFlashAS3 물리 엔진을 다른 언어 (Xojo)로 이식하려고합니다. 나는 Actionscript에 능통하지 않다 (그러나 Box2D가 원래 작성된 C++보다 더 많이 그렇다).이 함수는 Actionscript에서 무시되는 값을 어떻게 반환합니까?

필자가 이해 하듯이 매개 변수는 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(); 
} 

내가 b2Transform 클래스 R.GetInverse(out.R);을 이해하지 않습니다. b2Mat22 클래스의 GetInverse() 함수가 값을 반환하지 않습니까? 그렇다면 왜 사용되지 않는 것입니까?

답변

0

함수가 값을 반환한다고해서이 값을 사용해야 함을 의미하지는 않습니다. 어레이 - 새로운 배열 - 역방향()

반환 어레이 : 여기

는 일례이다. 배열을 반전시킵니다.

var letters:Array = new Array("a", "b", "c"); 
trace(letters); // a,b,c 
letters.reverse(); 
trace(letters); // c,b,a 

당신은 그것을 볼 수는 배열을 수정하지만 여전히는 새로운 배열을 반환 . 이는 메소드 체인과 같은 몇몇 기술이 사용될 수있다 : 객체이지만 프리미티브 값 경우

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(...); 

은 또한 매개 변수를 참조로 전달된다 (다만 JS, 자바 등의 등)로 그 양해 참조로 전달되지 않았습니다.

지금 Box2D의 메소드가 무엇인지 전혀 모르겠다.하지만 이것이 사실일지도 모른다.

+0

감사합니다. 함수가 값을 반환한다고 선언 된 경우 Xojo 코드를 (해당 언어로) 조정할 필요가 있다는 것을 의미합니다. 사용해야 할 필요가 있습니다. – Garry