Torquescript学习笔记
作者:miranda meng
一、物体
1、添加物体
首先定义数据块
Datablock classdef(classname)
{
属性赋值
};
在server端添加物体
%obj = new classdef()
{
Datablock = classname;
属性赋值
};
missionClearup.add(%obj);
%obj.setTransform(…); //设置位置和变换
2、物体的变换(移动、旋转、缩放)
function getHeight(%x, %y)
{//得到指定位置的高度
%pos=%xSPC%y;
returngetTerrainHeight(%pos);
}
function MoveShape(%shape, %dist, %flag)
{//移动物体
if(!isObject(%shape))
return;
%xfrm=%shape.getTransform();
%lx=getWord(%xfrm, 0);
%ly=getWord(%xfrm, 1);
%lz=getWord(%xfrm, 2);
if(%flag==1)
{//沿x轴方向移动
%lx+=%dist;
%lz= getHeight(%lx, %ly);
}
elseif(%flag==2)
{//沿y轴方向移动
%ly+=%dist;
%lz= getHeight(%lx, %ly);
}
Else //沿z轴方向移动
%lz+=%dist;
%shape.setTransform(%lxSPC%lySPC%lzSPC"0 0 1 0");
}
function TurnShape(%shape, %angle, %flag)
{//旋转物体
if(!isObject(%shape))
return;
%xfrm=%shape.getTransform();
%lx=getWord(%xfrm, 0);
%ly=getWord(%xfrm, 1);
%lz=getWord(%xfrm, 2);
%rx=getWord(%xfrm, 3);
%ry=getWord(%xfrm, 4);
%rz=getWord(%xfrm, 5);
%rd=getWord(%xfrm, 6);
if(%flag==1)
{//绕x轴
%ry=0;
%rz=0;
%rx=1;
}
elseif(%flag==2)
{//绕y轴
%rx=0;
%rz=0;
%ry=1;
}
else
{//绕z轴
%rx=0;
%ry=0;
%rz=1;
}
%rd=%angle;
%shape.setTransform(%lxSPC%lySPC%lzSPC%rxSPC%rySPC%rzSPC%rd);
}
function ScaleShape(%shape, %scale)
{//缩放物体
if(!isObject(%shape))
return;
%shape.setScale(%scaleSPC%scaleSPC%scale);
}
二、玩家(player)
1、数据块定义
Datablock PlayerData(PlayerName)
{
Classname = PlayerClass;
Shapefile = “…”;
.
.
.
};
2、类的方法
1)PlayerClass::onAdd(%this, %obj) //添加玩家时
2)PlayerClass::onRemove(%this, %obj) //删除玩家时
3)PlayerClass::onCollision(%this, %obj, %col, %speed) //与其他能产生碰撞的对象(ShapeBase)发生碰撞时调用
4)PlayerName::onImpact(%this, %obj, %col, %speed) //能检测到任何冲突,包括与物体或地形间的碰撞
5)PlayerName::onDamage(%this, %obj, %delta) //当对象的伤害值发生变化时调用
6)PlayerName:: onDisabled(%this,%obj,%state) //当玩家的伤害超过最大值时
7)playerName::OnMount(%this,%obj,%vehicle,%node)//装配,当对象调用mountObject方法时的回调函数
8)PlayName::doDismount(%this,%obj,%forced) //拆卸,通过设置跳跃动作完成
9)playerName::onUnmount(%this,%obj, %node) //当调用unmount()时的回调函数
3、创建玩家
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=new Player() {
dataBlock = HumanMaleAvatar;
client =%this;
};
MissionCleanup.add(%player);
// Player setup...
%player.setTransform(%spawnPoint);
%player.setShapeName(%this.name);
// Starting equipment
%player.setInventory(Crossbow,1); %player.setInventory(CrossbowAmmo,10); %player.mountImage(CrossbowImage,0);
%this.player =%player;
%this.setControlObject(%player);
}
4、删除玩家
if (isObject(%this.player))
%this.player.delete();