Torquescript学习笔记:物体和玩家的基本应用

 
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)      //拆卸,通过设置跳跃动作完成
9playerName::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();
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值