torque脚本编程
1)打開控制臺(console)
?運行torquedemo.exe進入主界面或游戲后,按 ~ 鍵(不用按shift,其實是`鍵)激活
?控制臺是一個調(diào)試程序的好地方
2)試一下最簡單命令 echo()
?在控制臺鍵入echo("hello!");? (注意必須加; 就象c++一樣)
?可以看到console窗口就立即顯示 hello!
?另小看echo(),有時為了調(diào)試腳本程序,在適當?shù)牡胤郊尤雃cho(),顯示有關變量的值,
?可以監(jiān)測程序是否正確。
?使用echo()時,如要輸入多行語句,只須連續(xù)輸入即可,torque會根據(jù) ;來分行執(zhí)行
?如:
?
?$a=1;echo($a);
?輸出:
? 1
3)torque的腳本script的特點:
?
?a)? 無須預定義,即開即用。
?b) 變量類型靈活性,如 "12" 與12 是一樣的
?c) 變理大小寫不敏感, %a 與%A 是一樣的
?d) 與c++類似,每個語名均須以 ; 作為結(jié)束標記
4)變量
?? torque腳本中,$表示全局變量,%表示局部變量
?? 表示法: $a 為全局變量a (在網(wǎng)絡中,全局變量只表示在本客戶端的全局變量,并不是整個網(wǎng)絡)
??????????? %b 為局部變量b (一般用于function中)
?
? 變量類型:
?
?? a)數(shù)字型
????? 1234? (整數(shù)interger)
????? 1.234? (浮點數(shù)floation point)
????? 1234e-3 (科學記數(shù)scientific notation)
????? 0xc001? (十六進制 hexadecimal)
?? b)字符型
????? "abcd"? (字符串string)
????? 'abcd'? (標記字符串 tagged string)
???? 你可以在控制臺試試:
????? echo("abcd");
????? echo('abcd');? 有什區(qū)別
????
???? 再試一下一個有意思的語句:
???? 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)?? 注解
???????????????
較常用的是字符的顏色處理:
原則上是對后面的字符產(chǎn)生影響,直到一個新的字體色操作符出現(xiàn),但只對當前行字符產(chǎn)生影響,并不會影響默認字體色。
echo("\c2hello!\c0hello!");
前一個hello!會顯示紅色,后一個hello!會顯示正常的黑色。
? C)邏輯型
??? 與其它語言一樣,torque也只有兩個值
??? true (1)
??? false (0)
? d)數(shù)組(arrays)表示法:
?? $AA[n]? 一維數(shù)組
?? $AA[M,N] 多維數(shù)組
?? $AA[M_N] 多維數(shù)組的另一種表示法
? 變量與數(shù)組的名字可以相同,但值并不會產(chǎn)和影響:
? $a=2;
? $a[0]=3;
? 你試下
? echo($a);
? echo($a[0]);
? 輸出的是各自代表的值。
?更有趣的是,torque腳本中,數(shù)組可以用如下方法指向:
?接著上例,你試試:
?echo($a0);
?輸出的是$a[0]的值,同理,如果要輸出$a[0,0],可以用如下方法:
?echo($a0_0);
?再次可見,torque的腳本是具有相當?shù)撵`活性
?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:?
??????????????? 默認執(zhí)行語句;
??????????? };
??
注意 break; 必不可少
?c)while 循環(huán)語句
??????????? while(表達式)
??????????? {
???????????????? 語句;
??????????? }
?7)功能模塊 function?????????????
?? 與c++也基本相同,定義方法
?
????????????? function 功能模塊名([參數(shù)0],...,[參數(shù)n])
??????????? {
??????????????? 語句;
??????????????? [return 返回值;]?? 可選
??????????? }
??
?
8)物體定義 objects
?介紹了一些基本的知識,這里開始進入torque特有的語法了。
?在torque中,所有項目都是“物體”,并且所有游戲中的物體都可以訪問,如人物,汽車,場景中的物體。
?且都可以用腳本進行訪問,而物體的屬性是在引擎中定義的。
我們看一個腳本中的代碼(節(jié)選自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");?
??
?? ...
載入只是預載入內(nèi)存,并未真正創(chuàng)建,現(xiàn)在看一下在哪里創(chuàng)建了人物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? 就是這里創(chuàng)建了player這個物體,并返回名柄給%player
?? %player = new Player() {
????? dataBlock = PlayerBody;
????? client = %this;
?? };
?? MissionCleanup.add(%player);? //在場景中加入
?? // Player setup...
?? %player.setTransform(%spawnPoint);?? //設定隨機出現(xiàn)的地點,地點在場景編輯器中定義,并在function pickSpawnPoint()功能中產(chǎn)生隨機點
?? %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);
}
總結(jié)一下,創(chuàng)建物體objcect的方法是:
%ver=new 物體類型(名稱) %ver 是返回的句柄,是一個整數(shù),是游戲中的客戶端唯一值,相當于物體ID。
{
?datablock=datablock定義; \\這是必須的,datablock可以是自定義的,或是torque已含有的,可參看torque的datablock附表。
?內(nèi)置屬性1=初始化值1; \\可選,不選則取默認值
?內(nèi)置屬性2=初始化值2;
?...
?自定義屬性1=初始化值1; \\可選,自定義屬性只能在script中應用,并不影響引擎的內(nèi)置屬性
?自定義屬性2=初始化值2;
?...
};? \\這個 ;不可少.
注:返回的句柄在客戶端是唯一值,但網(wǎng)絡下的ID又不同,所以一個物體存在2個ID,一個是本地ID,一個是網(wǎng)絡ID,網(wǎng)絡ID是
??? 整個游戲網(wǎng)絡中唯一的ID號,進行網(wǎng)絡游戲編程時應注意,關于網(wǎng)絡ID的獲得方法,以后再作說明。
轉(zhuǎn)載于:https://www.cnblogs.com/Hey-oh/archive/2008/08/26/1276644.html
總結(jié)
以上是生活随笔為你收集整理的torque脚本编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Centos7单机安装torque6.1
- 下一篇: 银行贷款等额本息,等额本金计算