torque脚本编程
1)打開控制臺(console)
?運(yùn)行torquedemo.exe進(jìn)入主界面或游戲后,按 ~ 鍵(不用按shift,其實(shí)是`鍵)激活
?控制臺是一個調(diào)試程序的好地方
2)試一下最簡單命令 echo()
?在控制臺鍵入echo("hello!");? (注意必須加; 就象c++一樣)
?可以看到console窗口就立即顯示 hello!
?另小看echo(),有時為了調(diào)試腳本程序,在適當(dāng)?shù)牡胤郊尤雃cho(),顯示有關(guān)變量的值,
?可以監(jiān)測程序是否正確。
?使用echo()時,如要輸入多行語句,只須連續(xù)輸入即可,torque會根據(jù) ;來分行執(zhí)行
?如:
?
?$a=1;echo($a);
?輸出:
? 1
3)torque的腳本script的特點(diǎn):
?
?a)? 無須預(yù)定義,即開即用。
?b) 變量類型靈活性,如 "12" 與12 是一樣的
?c) 變理大小寫不敏感, %a 與%A 是一樣的
?d) 與c++類似,每個語名均須以 ; 作為結(jié)束標(biāo)記
4)變量
?? torque腳本中,$表示全局變量,%表示局部變量
?? 表示法: $a 為全局變量a (在網(wǎng)絡(luò)中,全局變量只表示在本客戶端的全局變量,并不是整個網(wǎng)絡(luò))
??????????? %b 為局部變量b (一般用于function中)
?
? 變量類型:
?
?? a)數(shù)字型
????? 1234? (整數(shù)interger)
????? 1.234? (浮點(diǎn)數(shù)floation point)
????? 1234e-3 (科學(xué)記數(shù)scientific notation)
????? 0xc001? (十六進(jìn)制 hexadecimal)
?? b)字符型
????? "abcd"? (字符串string)
????? 'abcd'? (標(biāo)記字符串 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)? 回到默認(rèn)色
??????????? \cp???????? (push current color on color stack)把當(dāng)前色設(shè)進(jìn)顏色堆棧? 未知使用方法
??????????? \co???????? (pop color from color stack)? 從顏色堆棧中取色? 未知使用方法
??????????? \xhh??????? (two digit hex value ASCII code)? 這個我還不懂。。
??????????? \\????????? (backslash)?? 注解
???????????????
較常用的是字符的顏色處理:
原則上是對后面的字符產(chǎn)生影響,直到一個新的字體色操作符出現(xiàn),但只對當(dāng)前行字符產(chǎn)生影響,并不會影響默認(rè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的腳本是具有相當(dāng)?shù)撵`活性
?d)矢量(vectors)
? 格式如:"1.0 1.0 1.0 1.0"
?? 矢量是引擎中一個應(yīng)用很廣的變量類型,在3D坐標(biāo),動力,粒子,聲效等等都有相應(yīng)的應(yīng)用。
?5)操作符
?? 這方面與C++很相似,所以不花篇幅陳述??梢詤⒁妔cript的編程指南
? 如 a++? a-- 的用法都是與c++語言的用法一樣的。
? 字符串對比操作:
?? $= 等于
?? !$= 不等于
?如:echo("abc" $="abc");
? 輸出1
??? echo("abc" !$="cde");
? 輸出1
6)控制語句
? 與c++的基本相同
?a) if -then -else 判斷語句
???????????? if(表達(dá)式)
??????????? {
??????????????? 語句1;
??????????? } else
??????????? {
??????????????? 語句2;
??????????? }
???????????????????
?b)switch?
????????????? switch(表達(dá)式)
??????????? {
??????????? case 值1:
??????????????? 語句1;
??????????????? break;
??????????? case 值2:
??????????????? 語句2;
??????????????? break;
??????????? ...
??????????? case 值N:
??????????????? 語句N;
??????????????? break;
??????????? default:?
??????????????? 默認(rèn)執(zhí)行語句;
??????????? };
??
注意 break; 必不可少
?c)while 循環(huán)語句
??????????? while(表達(dá)式)
??????????? {
???????????????? 語句;
??????????? }
?7)功能模塊 function?????????????
?? 與c++也基本相同,定義方法
?
????????????? function 功能模塊名([參數(shù)0],...,[參數(shù)n])
??????????? {
??????????????? 語句;
??????????????? [return 返回值;]?? 可選
??????????? }
??
?
8)物體定義 objects
?介紹了一些基本的知識,這里開始進(jìn)入torque特有的語法了。
?在torque中,所有項(xiàng)目都是“物體”,并且所有游戲中的物體都可以訪問,如人物,汽車,場景中的物體。
?且都可以用腳本進(jìn)行訪問,而物體的屬性是在引擎中定義的。
我們看一個腳本中的代碼(節(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的作用是定義物體的有關(guān)屬性。
這里就是定義了游戲人的人物的有關(guān)屬性,包括視角定義,3D文件(dts),等等,
再在server\scripts\game.cs 中載入:
? ...
?? exec("./crossbow.cs");
?? exec("./player.cs");? //載入player.cs中定義的物體
?? exec("./chimneyfire.cs");
?? exec("./aiPlayer.cs");?
??
?? ...
載入只是預(yù)載入內(nèi)存,并未真正創(chuàng)建,現(xiàn)在看一下在哪里創(chuàng)建了人物player
在game.cs中,可找到有關(guān)功能模塊:
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);?? //設(shè)定隨機(jī)出現(xiàn)的地點(diǎn),地點(diǎn)在場景編輯器中定義,并在function pickSpawnPoint()功能中產(chǎn)生隨機(jī)點(diǎn)
?? %player.setShapeName(%this.name);
??
?? // Starting equipment
?? %player.setInventory(Crossbow,1);?? //初始時的武器設(shè)置
?? %player.setInventory(CrossbowAmmo,10);? //初始時的彈藥設(shè)置
?? %player.mountImage(CrossbowImage,0);? //設(shè)置武器在人物的裝配點(diǎn) 0表示mount0,1表示裝在mount1,由此類推。
?? // Update the camera to start with the player
?? %this.camera.setTransform(%player.getEyeTransform());? //設(shè)置視角方式
?? // Give the client control of the player?? //把控制交給player這個物體
?? %this.player = %player;
?? %this.setControlObject(%player);
}
總結(jié)一下,創(chuàng)建物體objcect的方法是:
%ver=new 物體類型(名稱) %ver 是返回的句柄,是一個整數(shù),是游戲中的客戶端唯一值,相當(dāng)于物體ID。
{
?datablock=datablock定義; \\這是必須的,datablock可以是自定義的,或是torque已含有的,可參看torque的datablock附表。
?內(nèi)置屬性1=初始化值1; \\可選,不選則取默認(rèn)值
?內(nèi)置屬性2=初始化值2;
?...
?自定義屬性1=初始化值1; \\可選,自定義屬性只能在script中應(yīng)用,并不影響引擎的內(nèi)置屬性
?自定義屬性2=初始化值2;
?...
};? \\這個 ;不可少.
注:返回的句柄在客戶端是唯一值,但網(wǎng)絡(luò)下的ID又不同,所以一個物體存在2個ID,一個是本地ID,一個是網(wǎng)絡(luò)ID,網(wǎng)絡(luò)ID是
??? 整個游戲網(wǎng)絡(luò)中唯一的ID號,進(jìn)行網(wǎng)絡(luò)游戲編程時應(yīng)注意,關(guān)于網(wǎng)絡(luò)ID的獲得方法,以后再作說明。
轉(zhuǎn)載于:https://www.cnblogs.com/Hey-oh/archive/2008/08/26/1276644.html
總結(jié)
以上是生活随笔為你收集整理的torque脚本编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Centos7单机安装torque6.1
- 下一篇: 银行贷款等额本息,等额本金计算