Torque X 官方文档中文译稿(5)——对象类型


对象类型

TorqueObjectType是一个有效且方便的为特定目的创建对象的方法。例如,在一些策略游戏中,你可能会给一方的所有单位标记一个对象类型,给另一方的所有单位标记一个不同的对象类型,这样单位的人工智能(AI)就能够容易地区分出敌友。对象类型在碰撞中是非常非常重要的,因为它们允许你控制哪些对象之间可以互相发生碰撞(比如,你可能会想禁用相同类型之间的碰撞,这样就可以避免友军之间的伤害)。

 

使用对象类型

对象类型可以通过TorqueObjectDatabase以名字的方式获取。就像这样:

TorqueObjectType Rebel = TorqueObjectDatabase.Instance.GetObjectType("RebelAlliance");

TorqueObjectType Imperial = TorqueObjectDatabase.Instance.GetObjectType("GalacticEmpire");

TorqueObjectType Elite = TorqueObjectDatabase.Instance.GetObjectType("Elite"); 
 

对象数据库确保每一个类型都是独一无二的。当GetObjectType方法第一次“看见”一个特殊的名字时,它会创建一个新的TorqueObjectType对象,然后下次遇到同样的名字时,返回同样的类型。对象类型之上定义了一些简单的操作。假设我们拥有一些叫做SnubFighter, Commando, Trooper, ImperialGuardTorqueObject。我们可能会这样做:

 

SnubFighter.ObjectType += Rebel;

Commando.ObjectType += Rebel;

Commando.ObjectType += Elite;

Trooper.ObjectType += Imperial;

ImperialGuard += (Imperial + Elite); 
 

设置对象类型是正确的,但是其中包含的信息只在它被使用时才有用。那么如果使用对象类型?有几种方法,让我们来看看这个例子:假设SnubFighter有一系列的人工智能组件,其中一个人工智能组件看起来可能像这个样子:

 

public List GetNearbyImperials()
{
	TorqueObjectType Imperial = TorqueObjectDatabase.Instance.GetObjectType("GalacticeEmpire");

	List ImperialUnits = new List();

	T2DSceneGraph.Instance.FindObjects(_sceneObject.Position, 30.0, Imperial, (uint)0xFFFFFFFF, ImperialUnits);

	return ImperialUnits;
} 
 

FindObject方法让你能够通过匹配一些确定的参数比如位置来在场景图中查找对象。正如你看到的那样,其中一个搜索参数是对象类型(Imperial),这会使搜索范围大大缩小,如果这正是你期望的做法。

 

对象类型和碰撞

T2DcollisionComponent暴露了一个名叫CollidesWithTorqueObjectType 属性。通过设定这个属性,不出意外,你将可以控制哪些对象类型之间可以发生碰撞:

 

TorqueObjectType ValidTarget = TorqueObjectDatabase.Instance.GetObjectType("ValidTarget"); 

ExhaustPort.ObjectType += ValidTarget;

Torpedo.Collision.CollidesWith = ValidTarget; 
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值