值
VSL能识别以下类型的值:
数字,如123、3.14159、'v'或0xe0d02090
逻辑布尔值:true或false
字符,如"Virtools,The Behavior Company"
特殊关键字null等于
类型
VSL是一种类型化的语言,这意味着如我们所知的在编译时(compilation time)每个变量和每个表达式都带有类型。类型决定了运算的意义;强类型可以帮助在编译时检查错误。
VSL类型划分为3类:
基本类型
VSL结构类型
C++ 类/结构类型
基本类型即布尔型(bool)与数字类型。数字类型为整型(char,int)及浮点型(float)。
类型 |
内容 |
大小 |
取值范围
|
bool |
bool类型是一种整数类型。它用两个可能的值(用true或false来表示)代表逻辑数 |
4 Bytes |
true 或false (0 or 1) |
char |
char类型也是一种整数类型,通常包含了ASCII字符集成员的执行。 |
4 Bytes |
-128 to 127 |
int |
int类型也是一种整数类型。等价于C/C++中的无符号的int类型。 |
4 Bytes |
?147483647? to 2147483647 |
float |
float类型是一种浮点数类型。等价于C/C++中的float类型。 |
4 Bytes |
-3.402823466e+38F to 3.402823466e+38F |
str |
str类型等价于C/C+中的char*类型。 |
4 Bytes |
- |
正如你所见,所有VSL基本类型都是以4个字节实现的,在内存中是字组对齐方式,不受它们是否需要更多空间的情况约束。例如,char类型仅需一个字节来表示ASCII码表中的成员,但在VSL中仍用了4个字节。
VSL结构是在VSL中创建自定义数据类型的一种方式。VSL结构可以有零个或多个成员,这些成员可以是任何VSL中的已知类型。VSL结构和C的结构非常相似。
结构声明实例:
struct Car
{
Entity3D entity;
Vector direction;
float gaz;
};
VSL可以操作C/C++类型。在VSL中使用类(class)之前,你必须绑定它。
VSL来源于很多Virtools SDK中的约束类(bound classes)。大多数情况下,类的名称从Virtools SDK到VSL会发生改变。对于Virtools SDK用户来说,CK3dEntity是熟知的一个类,但到了VSL它的名字就变为"Entity3D"了。
变量
变量是一个存储单元,且带有一个相关联的类型,可能是基本类型、VSL结构或C/C++类。变量总是包含一个和它的类型相兼容的所赋的值。变量值通过赋值或前缀式或后缀式 ++ / --运算符来进行改变。
这里有些在VSL中进行变量声明的实例:
// Declare an integer variable named "i"
int i;
// Declare an array of 123 float named "table"
float table[123];
// Declare a Vector variable named "speed", initialized with values 1.0, 2.0 and 3.0
Vector speed(1.0,2.0,3.0);
// Declare a variable referencing an Entity3D
Entity3D bird;
变量范围
VSL里变量名仅能在程序的特定区域中使用。这个区域叫做变量名的适用范围。适用范围觉得累变量名(指非静态或非共享变量)的生命周期。适用范围也决定了在调用类的构造器或析构器时变量名的可见性,及什么时候进行局部变量的初始化。
void foo(int a) // start of the function foo scope
{
if (a) // start of if scope
{
} // end of if scope
} // end of the function foo scope
让我们通过一个简单的实例来考察一下变量的生命周期:
float angle; // Declaring a global variable
void foo()
{
angle = 0.01; // ok
}
void foo2(int a)
{
angle = a*180/P; // error, P is not yet declared
float P = 3.14159;
if (a) // ok
{
float angle2 = 360-angle; // ok
}
bc.OutputToConsole(angle2); // it doesn't exist outside of the scope of the enclosing braces {...}
}
当你在一个函数外声明了一个变量时,它会以全局变量方式被调用,因为在当前VSL脚本的各个地方都是有用的。
静态与共享全局变量
我们的全局变量可以是共享式的或静态的。
- 静态全局变量具有在某个脚本的两次执行中保持它的值的特性。
- 共享全局变量具有保持它的值静态不变的能力,但所有对该变量进行了声明的脚本间都可以共享该变量。
怎样声明静态或共享全局变量
shared int a; // a is a shared global variable
static float b; // b is a static global variable
void main()
{
shared int i;// i is not a shared variable (shared keyword is ignored)
static float j;// j is not a static variable (static keyword is ignored)
// ...
}
在声明静态或共享全局变量时,你无法初始化或调用那种没有默认构造器环境的变量。
shared int a = 0; // error
static Vector v(1.0,2.0,3.0); // error
void main()
{
static int b = 0; // Not an error because static keyword is ignored
shared Vector w(-1,0,0); // Not an error because shared keyword is ignored
// ...
}
静态全局变量
实例:
// ...
static int a;
void main()
{
if (iIn1) { // iIn1 is a boolean global variable
a = 0;
} else {
++a;
}
}
如果在我们第一次执行脚本的时候,iIn1为true,a等于0。
然后,为了下一次脚本执行时a的值增加,我们将iIn1设为false,所以到时候第二次执行会将a设为1,而第三次则会将a设为2,等等。
共享全局变量
实例:
// First script
shared Vector pos;
void main()
{
pos.Set(0,1,0.5);
}
// Second script
shared Vector pos; // the second script also declares pos as a shared Vector
void main()
{
Vector test(0,1,0.5)
if (pos == test) {
// ...
}
}
如果我们在第二个脚本执行了第一个脚本,pos的值是 {0,1,0.5} ,所以在第二个脚本中条件 pos == test 为true。
变量名
在VSL中,一些特定的名字是不能作为变量名使用的,如类/结构名及以下保留字:
main int short float char while do bool |
if for then else true false TRUE FALSE |
NULL null struct class enum extern shared static
|
switch case default break continue return
|
编译器按以下顺序搜索名字,当找到了名字时就停止:
从当前范围到全局范围搜索
搜索看名字是否为枚举值
搜索看名字是否为定义的常量
void foo(int a)
{
bc.OutputToConsole(pi); // print 3.14159 (pi is a constant in VSL)
float pi = 1.0;
if (a)
{
float pi = 0.5;
bc.OutputToConsole(pi); // print 0.5
}
bc.OutputToConsole(pi); // print 1.0
}
enum Const
{
pi,
epsilon,
maxint,
};
void foo(int a)
{
bc.OutputToConsole(pi); // print 0
float pi = 1.0;
if (a)
{
float pi = 0.5;
bc.OutputToConsole(pi); // print 0.5
}
bc.OutputToConsole(pi); // print 1.0
}
分享到:
相关推荐
在压缩包文件"Virtools-走迷宫"中,可能包含了以下内容: 1. Virtools工程文件:这是Virtools项目的主要文件,包含了场景布局、行为脚本、资源引用等所有信息。用户可以使用Virtools软件打开此文件,查看和修改项目...
增强现实技术通过将虚拟信息与现实世界融合,为用户创造了一个全新的交互体验,而Virtools AR Toolkit BB则简化了这一过程,使得开发者能够更高效地创建此类应用。 首先,让我们深入了解Virtools。Virtools是一款...
Virtools 是一款强大的交互式3D应用开发工具,它的VSL(Virtools Script Language)是内置的脚本语言,而SDK(Software Development Kit)则提供了更底层的编程接口。为了确保代码的质量、可读性和可维护性,遵循...
### Virtools学习资料:VSL脚本语言入门与实践 #### 一、VSL脚本语言简介 Virtools是一款强大的3D应用开发平台,广泛应用于游戏开发、虚拟现实、建筑可视化等多个领域。Virtools提供了丰富的功能和工具集,其中VSL...
- **脚本语言**:Virtools脚本语言(VSL),用于编写自定义行为。 4. **参数** - **概述**:用于控制对象行为的数据值。 - **参数操作**:通过运算符改变参数的值,实现动态调整对象的状态。 5. **属性** - **...
VSL是一种专为Virtools设计的脚本语言,允许程序员深入控制交互逻辑。 4. **渲染引擎** 渲染引擎负责将3D场景转化为可视图像,支持实时预览和最终输出。开发者可以通过SDK定制渲染引擎,以满足特定需求。 5. **...
本教程全面覆盖了Virtools的基础到高级功能,以全中文的形式呈现,旨在帮助用户克服语言障碍,更好地理解和掌握这款软件的使用。 在本教程中,你将学习到以下关键知识点: 1. **Virtools界面与工作流程**:了解...
此外,教程还会涵盖动画系统、脚本语言(LVB)的使用,以及如何与外部程序(如Unity、C++)进行集成。动画系统允许用户制作角色和物体的动态效果,而LVB(Virtools Behavior Language)则为那些希望更深入编程的用户...
通过SDK,你可以访问到Virtools的各种内部函数和对象,包括与播放器界面和渲染引擎交互的部分。 在实际操作中,你可能需要将CKKernelInit.lib链接到你的项目中,然后调用相应的API来初始化和控制播放器的行为。这...
尽管Virtools强调无代码开发,但其内置的LScript语言提供了更高级的功能,对于复杂逻辑或自定义功能的实现必不可少。 六、交互设计 1. 交互对象:设置对象为交互式,定义其响应何种类型的用户交互。 2. 事件触发:...
它提供了多种方式进行交互式体验的创建,包括VSL(Virtools脚本语言)、脚本流程图以及SDK(软件开发工具包)。 VSL,全称为Virtools Script Language,是一种强大的脚本语言,允许开发者深入到Virtools SDK的底层...
Virtools漫游脚本程序是一种基于Virtools软件的高级编程技术,主要用于创建虚拟现实(VR)环境中的交互式漫游体验。Virtools是一款强大的3D创作工具,它为设计师和开发者提供了一个直观的界面,用于构建复杂的3D场景、...
【Virtools入门教程】 Virtools是一款强大的3D交互式虚拟现实编辑软件,它不是传统的3D引擎,而是一个集成了多种资源(如3D模型、2D图形和音效)的整合工具。这款软件的核心特点是其丰富的“互动行为模组”...
【Virtools教程】是针对虚拟现实开发平台Virtools的一份详细教学资料,旨在帮助初学者理解和掌握如何在Virtools中创建3D互动场景。Virtools是一个强大的工具,它允许用户无需编程知识就能构建复杂的交互式应用程序,...
《3DMax与Virtools交互:3DMax导出到Virtools5.0插件的详细解析》 在三维制作领域,3DMax是一款广泛使用的专业3D建模、动画和渲染软件,而Virtools则是一款强大的交互式3D应用程序开发平台。两者结合,能够实现从3D...
### Virtools入门教程详解 #### 一、Virtools概述与特色 Virtools是一款革命性的实时3D环境虚拟现实编辑软件,旨在将常见的档案格式(包括3D模型、2D图像和音频)无缝集成,用于创建各种3D产品,如网络应用、电脑...
3. **脚本接口**:使用Python或C#与Virtools交互,自动化工作流程或实现更复杂的逻辑。 4. **网络通信**:通过SDK实现多用户交互,支持多人在线游戏或协同设计环境。 5. **数据交换**:与外部程序(如数据库、服务器...