查看文章 |
下图更清晰的表现了Torque引擎与控制台之间的关联:
addFiled() 该函数用于将引擎C++类中的成员变量映射到控制台对象的Field中,需要注意的是:1、不能将成员变量中的指针暴露出来; 2、不能用于暴露静态成员变量; 3、该函数必须在相应类的initPersistFields()方法中调用。
· in_pFieldname – 控制台中所使用的Field名称。 · in_fieldType – 被暴露的Field类型。 · in_fieldOffset – 被暴露的Field偏移位置,常用Offset() 宏来完成。 · in_elementCount – 被暴露的Field所包含的元素数量,默认值为1。 · in_table – 当需要暴露的成员变量类型是TypeEnum时,可以定义一个EnumTable用于在控制台中一一对应每个元素。 · in_pFieldDocs – 用法说明,默认为NULL。 下面举例说明: //// 暴露一个布尔型成员变量 bool bTorqueRocks; addField( "TorqueRocks", TypeBool, Offset(bTorqueRocks,EGTClass)); //// 暴露一个数组成员变量 S32 arynEGTChapters[28]; addField( "TorqueRocks", TypeS32, Offset(arynEGTChapters,EGTClass),28); //// 暴露一个枚举类型成员变量 StateData::LoadedState stateLoaded[MaxStates]; static EnumTable::Enums enumLoadedStates[] = { { ShapeBaseImageData::StateData::IgnoreLoaded, "Ignore" }, { ShapeBaseImageData::StateData::Loaded, "Loaded" }, { ShapeBaseImageData::StateData::NotLoaded, "Empty" }, }; static EnumTable EnumLoadedState(3, &enumLoadedStates[0]); addField("stateLoadedFlag", TypeEnum, Offset(stateLoaded, ShapeBaseImageData), MaxStates, &EnumLoadedState);
addFieldV() 该函数是提供了一种暴露validated Field的方法,在这种field中放置一个指向派生于TypeValidator类对象的指针,可以用于检查field中值得有效性。
addNamedField() / addNamedFieldV() 这两个宏实际上跟上面两个函数完成的功能一样: #define addNamedField(fieldName,type,className) addField(#fieldName, type, Offset(fieldName,className)) #define addNamedFieldV(fieldName,type,className, validator) addFieldV(#fieldName, type, Offset(fieldName,className), validator)
Offset() 宏 这个宏的作用是方便的计算指定成员变量在相应类实例中的位置值: Offset(VariableName, ClassName) · VariableName – 需要暴露的成员变量名。 · ClassName – 相应的类名。 该宏的定义如下: #define Offset(m,T) ((int)(&((T *)1)->m) - 1) // Default Version #define Offset(x, cls) ((dsize_t)((const char *)\ &(((cls *)0)->x)-(const char *)0))
removeField() 这个函数的作用与addField()完成的功能正好相反: bool ConsoleObject::removeField(const char* in_pFieldname) · in_pFieldname – 要移除的Field名称。
Con::addVariable 该函数的作用是将引擎中的全局变量或者类中的静态成员变量暴露到控制台,用法如下: Con::addVariable(const char *name, S32 t, void *dp); · name – 暴露到控制台中使用的变量名。 · t – 被暴露变量的类型。 · dp – 指向被暴露对象的指针。
Con::removeVariable 该函数用于移除暴露的控制台全局变量,用法如下: bool removeVariable(const char *name) · name – 要移除的控制台全局变量名。
Con::addCommand 该函数用于暴露引擎中一个类的成员函数到控制台,但不推荐直接使用这个函数,可以使用ConsoleMethod宏来完成相应的功能。
ConsoleMethod宏 该宏用来代替Con::addCommand(),用法如下: ConsoleMethod(className,scriptname,returnType,minArgs,maxArgs,usage) ConsoleStaticMethod(className,scriptname,returnType,minArgs,maxArgs,usage) · className – 被暴露的类名。 · scriptname – 暴露到控制台的方法名。 · returntype – 控制台方法的返回值类型。 · minargs – 该控制台方法的最少参数数量。 注意:最少是2,因为该方法的名称被自动解释为第一个参数,调用对象的句柄被自动解释为第二个参数。 · maxargs –该控制台方法的最多参数数量。 注意:如果该值为0则意味着可以接受任意个参数。 · usage – 控制台方法用法提示信息。 例如: ConsoleMethod(SimObject, getId, S32, 2, 2, "obj.getId()") { argc; argv; return object->getId(); }
ConsoleFunction宏 该宏的作用是创建一个新的控制台函数: ConsoleFunction(name,returnType,minArgs,maxArgs,usage) · name – 控制台函数的名称。 · returnType – 控制台函数的返回值类型。 · minArgs – 该控制台函数的最少参数数量。 注意:最少是1,因为该控制台函数的名称被自动解释为第一个参数。 · maxArgs –该控制台函数的最多参数数量。 注意:如果该值为0则意味着可以接受任意个参数。 · usage – 控制台方法用法提示信息。 // From main.cc ConsoleFunction( getSimTime, S32, 1, 1, "getSimTime() – Time since game started.") { return Sim::getCurrentTime(); }
|

