您的位置:首页 > 产品设计 > UI/UE

torque脚本编程

2020-02-17 00:26 429 查看

1)打开控制台(console)

 运行torquedemo.exe进入主界面或游戏后,按 ~ 键(不用按shift,其实是`键)激活

 控制台是一个调试程序的好地方

2)试一下最简单命令 echo()

 在控制台键入echo("hello!");  (注意必须加; 就象c++一样)
 可以看到console窗口就立即显示 hello!

 另小看echo(),有时为了调试脚本程序,在适当的地方加入echo(),显示有关变量的值,
 可以监测程序是否正确。

 使用echo()时,如要输入多行语句,只须连续输入即可,torque会根据 ;来分行执行
 如:
 
 $a=1;echo($a);
 输出:
  1


3)torque的脚本script的特点:
 
 a)  无须预定义,即开即用。

 b) 变量类型灵活性,如 "12" 与12 是一样的

 c) 变理大小写不敏感, %a 与%A 是一样的

 d) 与c++类似,每个语名均须以 ; 作为结束标记


4)变量
   torque脚本中,$表示全局变量,%表示局部变量
   表示法: $a 为全局变量a (在网络中,全局变量只表示在本客户端的全局变量,并不是整个网络)
            %b 为局部变量b (一般用于function中)

 

  变量类型:
 
   a)数字型
      1234  (整数interger)
      1.234  (浮点数floation point)
      1234e-3 (科学记数scientific notation)
      0xc001  (十六进制 hexadecimal)

   b)字符型
      "abcd"  (字符串string)
      'abcd'  (标记字符串 tagged string)

     你可以在控制台试试:

      echo("abcd");
      echo('abcd');  有什区别
    
     再试一下一个有意思的语句:
     echo("1"+"2");
     会输出:3  而不是把2个字符串连接,连接是用 @ 来操作,如:
     echo("1" @ "2");
     输出:12    
     这就是torque的script脚本的灵活之处,

    更多的字符连接符:
     @   连接两个字符串
     TAB  两个字符串间加入tab
     SPC  两个字符串间加入一个空格
     NL   两个字符串间加入一个加车(换行)

    注意:这些操作符的英文必须是大写。

   如:echo("abcd" NL "CDEF");
  会输出:
   abcd
   CDEF

  格式化字符操作:

            \n          (newline)  新行
            \r          (carriage return) 回车
            \t          (tab) 
            \c0...\c9   (colorize subsequent text)  字体色
            \cr         (reset to default color)  回到默认色
            \cp         (push current color on color stack)把当前色设进颜色堆栈  未知使用方法
            \co         (pop color from color stack)  从颜色堆栈中取色  未知使用方法
            \xhh        (two digit hex value ASCII code)  这个我还不懂。。
            \\          (backslash)   注解
               
较常用的是字符的颜色处理:
原则上是对后面的字符产生影响,直到一个新的字体色操作符出现,但只对当前行字符产生影响,并不会影响默认字体色。
echo("\c2hello!\c0hello!");
前一个hello!会显示红色,后一个hello!会显示正常的黑色。

  C)逻辑型
    与其它语言一样,torque也只有两个值
    true (1)
    false (0)

  d)数组(arrays)表示法:

   $AA
  一维数组
   $AA[M,N] 多维数组
   $AA[M_N] 多维数组的另一种表示法

  变量与数组的名字可以相同,但值并不会产和影响:

  $a=2;
  $a[0]=3;
  你试下
  echo($a);
  echo($a[0]);
  输出的是各自代表的值。
 更有趣的是,torque脚本中,数组可以用如下方法指向:
 接着上例,你试试:
 echo($a0);
 输出的是$a[0]的值,同理,如果要输出$a[0,0],可以用如下方法:
 echo($a0_0);

 再次可见,torque的脚本是具有相当的灵活性


 d)矢量(vectors)

  格式如:"1.0 1.0 1.0 1.0"
   矢量是引擎中一个应用很广的变量类型,在3D坐标,动力,粒子,声效等等都有相应的应用。


 5)操作符
   这方面与C++很相似,所以不花篇幅陈述。可以参见script的编程指南
  如 a++  a-- 的用法都是与c++语言的用法一样的。

  字符串对比操作:
   $= 等于
   !$= 不等于

 如:echo("abc" $="abc");
  输出1
    echo("abc" !$="cde");
  输出1

6)控制语句
  与c++的基本相同

 a) if -then -else 判断语句

             if(表达式)
            {
                语句1;
            } else
            {
                语句2;
            }
                   
 b)switch 

              switch(表达式)
            {
            case 值1:
                语句1;
                break;
            case 值2:
                语句2;
                break;
            ...
            case 值N:
                语句N;
                break;
            default: 
                默认执行语句;
            };
  
注意 break; 必不可少


 c)while 循环语句

            while(表达式)
            {
                 语句;
            }

 7)功能模块 function             
   与c++也基本相同,定义方法
 
              function 功能模块名([参数0],...,[参数n])
            {
                语句;
                [return 返回值;]   可选
            }
  
 
8)物体定义 objects

 介绍了一些基本的知识,这里开始进入torque特有的语法了。

 在torque中,所有项目都是“物体”,并且所有游戏中的物体都可以访问,如人物,汽车,场景中的物体。
 且都可以用脚本进行访问,而物体的属性是在引擎中定义的。

我们看一个脚本中的代码(节选自server\scripts\player.cs )

datablock PlayerData(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中,可找到有关功能模块:

function GameConnection::createPlayer(%this, %spawnPoint)
{
   if (%this.player > 0)  {
      // The client should not have a player currently
      // assigned.  Assigning a new one could result in
      // a player ghost.
      error( "Attempting to create an angus ghost!" );
   }

   // Create the player object  就是这里创建了player这个物体,并返回名柄给%player
   %player = new Player() {
      dataBlock = PlayerBody;
      client = %this;
   };
   MissionCleanup.add(%player);  //在场景中加入

   // Player setup...
   %player.setTransform(%spawnPoint);   //设定随机出现的地点,地点在场景编辑器中定义,并在function pickSpawnPoint()功能中产生随机点
   %player.setShapeName(%this.name);
  
   // Starting equipment
   %player.setInventory(Crossbow,1);   //初始时的武器设置
   %player.setInventory(CrossbowAmmo,10);  //初始时的弹药设置
   %player.mountImage(CrossbowImage,0);  //设置武器在人物的装配点 0表示mount0,1表示装在mount1,由此类推。

   // Update the camera to start with the player
   %this.camera.setTransform(%player.getEyeTransform());  //设置视角方式

   // Give the client control of the player   //把控制交给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的获得方法,以后再作说明。

转载于:https://www.cnblogs.com/Hey-oh/archive/2008/08/26/1276644.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
站内首发文章 dianzhuopeng6833 发布了0 篇原创文章 · 获赞 0 · 访问量 82 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: