第一部分:脚本入门************************1)打开控制台(console)运行torquedemo.exe进入主界面或游戏后,按~键(不用按shift,其实是`键)激活控制台是一个调试程序的好地方。2)试一下最简单命令echo()在控制台键入echo(hello!);(注意必须加;就象c++一样)可以看到console窗口就立即显示hello!别小看echo(),有时为了调试脚本程序,在适当的地方加入echo(),显示有关变量的值,可以监测程序是否正确。使用echo()时,如要输入多行语句,只须连续输入即可,torque会根据;来分行执行如:$a=1;echo($a);输出:13)torque的脚本script的特点:a)无须预定义,即开即用。b)变量类型灵活性,如12与12是一样的c)变理大小写不敏感,%a与%A是一样的d)与c++类似,每个语名均须以;作为结束标记4)变量,torque脚本中,$表示全局变量,%表示局部变量表示法:$a为全局变量a(在网络中,全局变量只表示在本客户端的全局变量,并不是整个网络)%b为局部变量b(一般用于function中)变量类型:a)数字型1234(整数interger)1.234(浮点数floationpoint)1234e-3(科学记数scientificnotationb)字符型abcd(字符串string)'abcd'(标记字符串taggedstring)再试一下一个有意思的语句:echo(1+2);会输出:3而不是把2个字符串连接,连接是用@来操作,如:echo(1@2);输出:12这就是torque的script脚本的灵活之处,更多的字符连接符:@连接两个字符串TAB两个字符串间加入tabSPC两个字符串间加入一个空格NL两个字符串间加入一个加车(换行)注意:这些操作符的英文必须是大写。如:echo(abcdNLCDEF);会输出:abcdCDEF较常用的是字符的颜色处理:原则上是对后面的字符产生影响,直到一个新的字体色操作符出现,但只对当前行字符产生影响,并不会影响默认字体色。echo(\c2hello!\c0hello!);前一个hello!会显示红色,后一个hello!会显示正常的黑色。C)逻辑型:与其它语言一样,torque也只有两个值true(1)false(0)d)数组(arrays)表示法:$AA[n]一维数组$AA[M,N]多维数组$AA[M_N]多维数组的另一种表示法,变量与数组的名字可以相同,但值并不会产和影响:$a=2;$a[0]=3;更有趣的是,torque脚本中,数组可以用如下方法指向:接着上例,你试试:echo($a0);输出的是$a[0]的值,同理,如果要输出$a[0,0],可以用如下方法:echo($a0_0);再次可见,torque的脚本是具有相当的灵活性。d)矢量(vectors):格式如:1.01.01.01.0矢量是引擎中一个应用很广的变量类型,在3D坐标,动力,粒子,声效等等都有相应的应用。5)操作符,这方面与C++很相似6)控制语句,与c++的基本相同7)功能模块functionfunction功能模块名([参数0],...,[参数n]){语句;[return返回值;]可选}8)物体定义,介绍了一些基本的知识,这里开始进入torque特有的语法了。在torque中,所有项目都是“物体”,并且所有游戏中的物体都可以访问,如人物,汽车,场景中的物体。且都可以用脚本进行访问,而物体的属性是在引擎中定义的。我们看一个脚本中的代码(节选自server\scripts\player.cs)datablockPlayerData(PlayerBody){renderFirstPerson=false;emap=true;className=Armor;shapeFile=~/data/shapes/player/player.dts;cameraMaxDist=3;computeCRC=true;canObserve=true;cmdCategory=Clients;cameraDefaultFov=90.0;cameraMinFov=5.0;cameraMaxFov=120.0;debrisShapeName=~/data/shapes/player/debris_player.dts;debris=playerDebris;...};datablock的作用是定义物体的有关属性。这里就是定义了游戏人的人物的有关属性,包括视角定义,3D文件(dts),等等,再在server\scripts\game.cs中载入:...exec(./crossbow.cs);exec(./player.cs);//载入player.cs中定义的物体exec(./chimneyfire.cs);exec(./aiPlayer.cs);...载入只是预载入内存,并未真正创建,现在看一下在哪里创建了人物player在game.cs中,可找到有关功能模块:functionGameConnection::createPlayer(%this,%spawnPoint){if(%this.player0){//Theclientshouldnothaveaplayercurrently//assigned.Assigninganewonecouldresultin//aplayerghost.error(Attemptingtocreateanangusghost!);}//Createtheplayerobject就是这里创建了player这个物体,并返回名柄给%player%player=newPlayer(){dataBlock=PlayerBody;client=%this;};MissionCleanup.add(%player);//在场景中加入//Playersetup...%player.setTransform(%spawnPoint);//设定随机出现的地点,地点在场景编辑器中定义,并在functionpickSpawnPoint()功能中产生随机点%player.setShapeName(%this.name);//Startingequipment%player.setInventory(Crossbow,1);//初始时的武器设置%player.setInventory(CrossbowAmmo,10);//初始时的弹药设置%player.mountImage(CrossbowImage,0);//设置武器在人物的装配点0表示mount0,1表示装在mount1,由此类推。//Updatethecameratostartwiththeplayer%this.camera.setTransform(%player.getEyeTransform());//设置视角方式//Givetheclientcontroloftheplayer//把控制交给player这个物体%this.player=%player;%this.setControlObject(%player);}总结一下,创建物体objcect的方法是:%ver=new物体类型(名称)%ver是返回的句柄,是一个整数,是游戏中的客户端唯一值,相当于物体ID。{datablock=datablock定义;\\这是必须的,datablock可以是自定义的,或是torque已含有的,可参看torque的datablock附表。内置属性1=初始化值1;\\可选,不选则取默认值内置属性2=初始化值2;...自定义属性1=初始化值1;\\可选,自定义属性只能在script中应用,并不影响引擎的内置属性自定义属性2=初始化值2;...};\\这个;不可少.注:返回的句柄在客户端是唯一值,但网络下的ID又不同,所以一个物体存在2个ID,一个是本地ID,一个是网络ID,网络ID是整个游戏网络中唯一的ID号,进行网络游戏编程时应注意,关于网络ID的获得方法,以后再作说明。Torque引擎系列之Gui编辑器type=text/javascript一、Gui编辑器概述:1、进入游戏后按F10快捷键即进入Gui编辑器。其界面如下图所示:2、GUIEditor由4个部分组成:ContentEditor(内容编辑器)、ControlTree(控件树)、ControlInsepctor(控件检验器)和ToolBar(工具栏)组成。ContentEditor(内容编辑器)为上图中左上方较大的矩形区域,这是放置、移动、和变换控件的地方。ControlTree(控件树)位于上图中的右上方,它显示了当前内容控件的层次结构。Insepctor(控件检验器)是显示所选控件属性的地方,位于GuiEditor的右下角。ToolBar(工具栏)用于创建、对齐和保存所编辑的控件及Gui。3、控件属性:TorqueGui中所有控件的属性都包括下面几类:SimBase、Parent、ToolTip、l18N、DynamicFields。除了上述几类共有的属性类外,还有控件本身自带的属性类。例如GuiWindowsCtrl控件的Generl属性类、GuibuttonCtrl控件的misc属性类。Parent属性其实就是GuiControl控件的属性,GuiControl类是所有控件的基类,SimBase是GuiControl类的基类,所以每种控件都会继承上述两种基类的属性。SimBasl一栏中的属性一般都使用默认值。Parent属性类的属性说明如下:Profile=GuiDefaultProfile;//外形HorizSizing=right;//水平对齐方式VertSizing=bottom;//垂直对齐方式position=00;//控件左上角顶点坐标Extent=800600;//控件大小Visible=1;//是否可见Bitmap=;//位图autoSize=true;//自动大小maxLength=255;//最大长度resizeWidth=false;//是否可以调整宽度resizeHeight=false;//是否可以调整高度Command=quit();;//点击执行命令Accelerator=escape;//快捷键ToolTip类属性说明如下:(用于当用户鼠标悬停在控件上时,显示当前选项的提示条)Tooltipprofile=GuiToolTipProfile;//外形,用于设置字体大小、颜色等外观tooltip=Adjustbasicvideo,soundandotheroptions;//提示语字符串hoverTime=1000;//这个属性一般使用默认值(1000)。4、Profile参数说明:Profile的主要功能是为GUI提供规则模版,其中定义了界面的字体、字色、是否透明、填充颜色、位图信息、对齐方式、声音(按钮控件)等。tab=false;//是否可以使用tab键canKeyFocus=false;//能成为键焦点hasBitmapArray=false;//是否是位图数组mouseOverSelected=false;//是否可以是鼠标结束选择opaque=false;//是否透明fillColor=240240240;//填充颜色fillColorHL=150180200;//高亮填充色fillColorNA=150210210;//notactive填充色border=false;//是否有边界borderColor=000;//边界颜色borderColorHL=17913494;//高亮填充色borderColorNA=1267937;//notactive填充色bevelColorHL=255255255;//斜面高亮时颜色bevelColorLL=000;//斜面低亮时颜色fontType=宋体;//字体类型fontSize=12;//字体大小fontCha