클래스 개체를 등록하고 클래스의 특정 인스턴스를 스크립트에 전달하는 올바른 방법으로 AngelScript 설명서를 읽는 데 문제가 있습니다. 내가 C++ 클래스 Circle
을 가지고 AngelScript를 인식하고 싶다고 해봅시다.AngelScript에서 C++ 클래스 등록 및 클래스 인스턴스 전달
class Circle
{
public:
int getArea();
int radius;
};
여기에서 I는 AngelScript 엔진에 getArea()
있어서 레지스터 (또는 가능한 경우 자동 클래스의 모든 메소드 등록), 및 전달은 Circle
클래스의 인스턴스를 생성하고자 클래스 인스턴스 자체를 AngelScript 환경에 추가합니다.
Circle circleInstance;
circleInstance.radius = 10;
// Initialize AngelScript engine
asIScriptEngine *engine = asCreateScriptEngine(ANGELSCRIPT_VERSION);
engine->RegisterObjectMethod("Circle", "int getArea()",
asMETHOD(Circle, getArea), asCALL_THISCALL);
AngelScript에서 인스턴스 변수에서 메서드를 호출하고 C++ 함수의 결과를 반환하고 싶습니다.
circleInstance.getArea();
그러나, 위의 코드에서 나는 스크립팅 환경은 그 존재의 아무 생각이 없다, 그래서 명확하게, 어떤 방법으로 AngelScript 엔진 인스턴스 circleInstance
을 통과하지 않다. 내가 뭔가를 간과하고 대답은 C++의 한두 줄 정도라고 가정합니다. Circle
클래스를 RegisterObjectType
또는 RegisterInterface
과 같은 메서드를 통해 등록해야합니까?이 작업을 수행하려면 Circle
에서 asIScriptObject
을 상속해야합니까? 모든 통찰력은 높이 평가됩니다!
이 [매뉴얼에] 적용되지 않은 경우 (http://www.angelcode.com/angelscript/sdk/docs/manual/doc_register_type.html) 상세? –
그곳이 보일 곳 이겠지만 "객체 유형 등록하기"어디에도 클래스의 인스턴스를 전달하는 방법은 설명되어 있지 않습니다. 단, 일부 텍스트를 간과하지 않는 한 말이지요.'Circle'과 같은 클래스 이름을 클래스 타입으로 전달하는 법을 설명하고 있지만 환경에 클래스 인스턴스 (예 :'circleInstance')를 인식시키는 방법을 궁금합니다. – Vortico
하지만 지금 나는 무언가를하고 있습니다. 스크립팅 환경에서'circleInstance'를 전역 변수로 등록하고자한다면'Engine-> RegisterGlobalProperty ("Circle @circleInstance", & circleInstance);를 호출 할 수 없습니까? 그렇다면 내 문제의 절반을 해결할 수 있습니다. AngelScript에 클래스에 대한 정보를 제공하려면'RegisterObjectType' 또는'RegisterInterface'를 사용해야합니까? 그런 다음 클래스의 각 메소드를 등록해야합니까, 아니면 자동으로이 메소드를 등록합니까? (그렇지 않다면 나는이 인상을 어디서 얻었는지 전혀 모른다.) – Vortico