基于TOEQUE游戏开发引擎及其脚本语言的武器系统的实现
2012-05-08左宁
左宁
摘要:如今,电脑游戏已经成为走进人们生活中的并且成为被广为接受的一种娱乐方式。近几年来游戏这个产业发展越来越迅速。而目前比较流行的3D游戏的核心都是游戏引擎,游戏引擎集成了所有的底层技术,给研发人员提供了更高效的开发平台,可以使得研发人员不必花过多的精力去实现诸如内存管理、图像渲染、碰撞检测等等的底层细节,而是直接使用引擎提供的借口来进行游戏开发,从而大大缩短了开发周期。本文使用TORQUE游戏开发引擎及其脚本技术,实现了3D游戏环境下,人物的武器系统。实现了给玩家角色装备武器和更换武器的功能,这些功能在目前比较主流的FPS类型游戏中较为普遍。同时在所需功能的实现过程中分析TOEQUE脚本语言的特点,也进一步的研究学习TORQUE引擎的使用。
关键词:TORQUE游戏开发引擎;脚本语言;武器系统
中图分类号:TP391文献标识码:A文章编号:1009-3044(2012)07-1632-05
Weapon System to Achieve Based on TGE and Script Language
ZUO Ning
(Lanzhou Jiaotong University, Lanzhou 730070, China)
Abstract: Today, computer games have become into peoples lives and become widely accepted as a form of entertainment. In recent years more and more rapid development of the industry game. At present, the more popular 3D games are the core game engine, game engine incorporates all of the underlying technology, to provide a more efficient R & D development platform, developers can make without spending too much energy to achieve, such as memory management, image rendering, collision detection, and so low-level details, but direct use of the engine to provide an excuse for game development, thereby greatly reducing the development cycle. This article uses TORQUE game development engine and scripting techniques to achieve a 3D gaming environment, the characters weapons systems. To the role players to achieve the replacement of weapons, equipment, weapons and features in the current, more mainstream FPS type games are more common. At the same time to achieve the desired functionality of the process of analysis TOEQUE scripting language features, and further research study TORQUE engine use.
Key words: TGE; Script Language; Weapon System
从1992年第一个游戏引擎:3D Realms公司开发的Wolfenstein 3D问世至今,3D游戏开发引擎的开发已经有了将近20年的发展历史,在这20年见,世界上出现了很多优秀的游戏开发引擎同时在这些引擎的基础上也诞生了很多伟大的游戏,比如id Software DOOM引擎下诞生的《毁灭战士》、采用《帝国时代2》(Age of Empires)引擎制作的《星球大战:银河战场》等等。简单地说,游戏开发引擎就是“用于控制所有游戏功能的主程序,从计算碰撞、物理系统和物体的相对位置,到接受玩家的输入,以及按照正确的音量输出声音等等。”
Torque Game Engine简称TGE,是Garage Game公司所开发设计的3D游戏开发引擎,其封闭了很多三维场景实现过程中所需要的底层开发技术,以一个较为友好的交互界面,提供给游戏开发人员一个便捷的操作环境,无论是在三维场景模型添加还是在用户界面编辑方面都做到了简单快捷,使开发人员能够迅速将其掌握并且在此基础上实现所要完成的功能。
TGE,目前多用于第一人称射击类以及基于第一人称的FPS游戏的开发项目,其提供的脚本语言Torque Script使得开发人员能够灵活控制调配所建立场景的各种模型,为他们添加事件处理机制,并且强大的脚本语言与TGE结合后使得我们所需要的三维场景顿时生动起来,通过脚本语言的编写,可以使一个木讷的模型变得活灵活现,甚至赋予其智慧(AI),并且在游戏的设计中,设计者们可以通过此途径实现游戏内各种任务、剧情,并且在此基础上可以任意添加游戏规则。TGE和脚本语言的灵活使用,设计者们就可以实现一个属于他们自己的游戏世界。
武器系统是很多第一人称射击类游戏所必备的一部分,较好的武器系统会带给玩家真实的临场感官感受和便捷的操作性。本文主要介绍如何在TORQUE引擎的开发环境下实现为玩家装备上武器并且更换武器的功能。并且以此为例分析TORQUE SCRIPT脚本语言的特点。
1关于TORQUE SCRIPT脚本语言
TORQUE SCRIPT是专门为TGE设计的配合其场景功能调试的类C脚本语言,其语法简单明确,对于有C/C++语言基础的开发人员来说极易上手,并且其模块化设计方法在游戏的设计制作过程和后期维护方面都显得极其便捷,并且游戏源代码.CS文件通过TORQUE引擎编译机制编译后会生成二进制不可逆编译的.dso文件,这样使得能够在作品发布后,很好的保护原作的知识产权以及源代码。
作为一款成熟的游戏开发引擎的脚本语言,TORQUE SCRIPT包括了快速开发(大幅缩短了开发周期)、部署简便(提供了即时的部署能力,不用花费大量的时间在编译、打包等工作上)、易于上手和使用(不需要很强的编程功底的设计人员即可迅速上手)、动态代码(脚本代码能被即时的生成和执行)等优点。同时作为脚本语言也有一些缺点如运行速度较慢,不具备通用性(只是为单一开发引擎所使用)。
以下是TORQUE的文件组织结构:
图1 TORQUE的文件组织结构
其中Main.cs文件TOQRUE SCRIPT的根文件,所起到的作用是解析引擎中的通用模块并且连接到游戏相关的main.cs文件,将引擎的控制权转交给相应的游戏。文件夹common和creator是整个TORQUE开发工具的基础,其common文件夹下的是一些TORQUE引擎相关的通用模块而creator下则是一些编辑工具,编辑器需要实现很多功能的时候,没有这个模块的话大部分功能是实现不了的。Shaders文件下存放的是系统定义好的和用户自行设计的shaders。最关键的就是client和server这两个文件夹,游戏相关的大部分脚本文件都存放在这里,包括客户端的和服务器端的。Data下存放的是游戏相关的素材,包括模型、声音、纹理和少部分的脚本。
TORQUE脚本语言,主要由对象、数据块(datablock)、包(PACKAGE)组成。这里着重说明一下数据块(datablock),数据块是TORQUE脚本中的一种特殊的对象,在TORQUE游戏引擎中起到非常关键的作用,其作为一个实体描述了一组关于一个对象的属性,而对象的概念如同很多面向对象的程序设计语言一样,是一组方法和属性的集合。一个对象的存在为了描述另一个对象,这在游戏开发过程中是很常见的,比如描述玩家的生命值,弹药数量等等。数据块对象在游戏的过程中不会被其他因素所改变,这样使得创建的对象不仅有灵活的属性变化,而且有其静态数据的保护。包(PACKAGE)是TORQUE中的一种结构,其作用是封装了一系列的方法。这些方法在游戏的运行中会被动态的加载或者卸载。
2在场景中实现武器系统的思路以实现步骤
首先在场景中加入PLAYER的模型,本例中将使用TGE自带的兽人模型,将模型文件拷贝到游戏目录的datashapes文件夹下,然后修改server目录下的player.cs脚本文件(本例中使用Torque Dev来进行脚本的编写),将player.cs文件打开后加入以下几行代码:
exec("~/data/shapes/player/player.cs");//加载模型包的脚本文件
datablock TSShapeConstructor(PlayerDts)//
{ baseShape = "~/data/shapes/player/player.dts";
sequence0 = "~/data/shapes/player/player_root.dsq root";
sequence1 = "~/data/shapes/player/player_forward.dsq run";
sequence2 = "~/data/shapes/player/player_back.dsq back";
sequence3 = "~/data/shapes/player/player_side.dsq side";
sequence4 = "~/data/shapes/player/player_fall.dsq fall";
sequence5 = "~/data/shapes/player/player_land.dsq land";
sequence6 = "~/data/shapes/player/player_jump.dsq jump";
sequence7 = "~/data/shapes/player/player_standjump.dsq standjump";
sequence8 = "~/data/shapes/player/player_lookde.dsq look";
sequence9 = "~/data/shapes/player/player_head.dsq head";
sequence10 = "~/data/shapes/player/player_headside.dsq headside";
sequence11 = "~/data/shapes/player/player_celwave.dsq celwave";
};
datablock PlayerData(PlayerBody)
{
renderFirstPerson = false;
shapeFile = "~/data/shapes/player/player.dts";
maxInv[Crossbow] = 1;//先定义本例所要用到的武器,供之后装备武器时使用}
//以上代码主要作用是加载DTS模型和将人物的行进等动画合并为一个序列这样就在场景出现了一个兽人模样的玩家模型(如图2)
图2实现加入玩家模型
接下来要做的就是将我们准备好的武器(十字火弓)给玩家装备上了,首先将装有武器模型DTS文件的crossbow文件夹拷贝到data/shapes文件夹下,然后有关此武器的脚本文件crossbow.cs拷贝到server文件夹下,打开game.cs文件,在加载玩家脚本文件的语句前添加exec("./crossbow.cs");加载此脚本,紧接着在player.cs文件内找到定义PlayerBody::onAdd方法的语句,在其中添加以下带下划线语句:
function PlayerBody::onAdd(%this,%obj)
{
parent::onAdd(%this,%obj);
%obj.mountImage(CrossbowImage,0);
%obj.setImageAmmo(0,1);
}
此函数将在引擎第一次读取玩家数据块时调用,下划线语句主要作用在于调用mountImage()和setImageAmmo()这两个库函数将武器装备给玩家模型,并且设定其弹药为无限。修改好后重载下引擎,就可以看见之前添加的Player手中拿上了一把十字火弓(如图3)。
实现此功能后,切换到游戏画面,点击鼠标左键就可以看到发射弓箭的动画了。
完成了武器的装配,下面要做的就是实现武器的切换功能,这个功能在很多的FPS游戏中很常见,实现起来的方法也是大同小异的,在TORQUE中,通过导入模型和修改脚本就可以轻松实现此功能。
首先将我们要准备切换的武器(火箭筒)模型文件下拷贝到游戏目录的datashapes文件夹下,并且把有关此武器的脚本文件rocket.cs拷贝到游戏目录的server文件夹下。
圖3装备上武器后的玩家
打开server文件夹下的game.cs文件,使用exec(“./rocket.cs”);语句加载火箭筒的脚本文件,然后打开client文件夹下的config.cs文件,添加以下语句:
moveMap.bindCmd(keyboard,”g”,”commandToServer(use,”Rocket”);”,””);
打开client文件夹下的defaultbind.cs文件,添加以下语句:
moveMap.bindCmd(keyboard,”g”,”commandToServer(use,”Rocket”);”,””);
这两条语句作用为获取键盘事件(设定为g键)并将其传送给服务器端。
还要修改一下server下的player.cs文件,在PlayerData数据块定义中添加以下带下划线语句:
datablock PlayerData(PlayerBody)
{
renderFirstPerson = false;
shapeFile = "~/data/shapes/player/player.dts";
maxInv[Crossbow] = 1;
maxInv[Rocket] = 1;
maxInv[Rocket_LauncherAmmo] = 20;
};
这两行语句保证了,武器可以被捡起来,并且定义了其初始的弹药数量。
做好了以上几步,启动游戏引擎,进入任务编辑器,在3D环境的编辑器内,防止武器和弹药,放置好后,重新载入,看到武器可以被捡起并且装备上,同时按下“g”键,可以得到如图4的效果:
图4将本已装备的十字火弓更换为火箭炮
3结束语
本文介绍了如何使用TORQUE游戏开发引擎及其脚本语言实现3D场景内的武器系统,完成了武器系统所需要的一些基本功能,讲述了所需功能涉及的一些脚本编写的基本思路。可以看到TORQUE引擎的强大功能和其带来的设计多样性。同时Garage Game公司也在不停推出新版本的TGE,所以要使得做出的游戏画面更加细腻,情节更加生动、引人入胜,还需要做很多更深入的研究。
参考文献:
[1] Kenneth C Finney. 3D游戏开发大全[M].齐兰博,肖弈,译.北京:清华大学出版社,2005.
[2] Kenneth C Finney.3D游戏开发大全:高级篇[M].徐明亮,谷培培,译.北京:清华大学出版社,2007.
[3]张文瑞.游戏开发的脚本机制及其应用[J].科技情报开发与经济,2009,19(9):122-124.
[4]北京递归开元教育科技有限公司.网络游戏脚本编程[Z].2006.
[5]王兆其,王阳生,等.游戏开发中的引擎[J].计算机世界报,2004(12):3-5.
[6]王萍.脚本语言编程[J].东北大学学报,2003,3:37-39.
[7]林荻,交互式脚本中的决策系统[D].福州:福州大学,2006.
[8] Andrew Rollings,Dave Morris.游戏架构与设计[M].付煜,庄晓雷,等,译.北京:北京希望电子出版社,2005.
[9] Grages brand.Torque Game Engine[EB/OL].www.plancttribes.com/torque.
[10]陈占锋.Torque游戏引擎及脚本技术的研究[D].重庆:重庆大学,2008.
[11]罗冠,郝重阳.虚拟现实引擎中的入口技术[J].系统仿真学报,2001,1:130-132.