Java 游戏开发规则

楼主
Java 游戏开发规则
对于游戏开发单单了解Java基础,还是不够的。毕竟游戏开发不同于一般的应用软件,游戏开发是集策划、美工、程序员于一体的设计工作。本章我们就来讲一讲游戏开发的这些规则、并一起来学习Java游戏开发中的技术要点。如果你对Java不是很了解,您应该先看看我们本系列一的”Java游戏开发基础”。

目录导引:
一、游戏开发规则
游戏类型
游戏剧本
交互模式    
游戏智能

二、Java游戏开发技术
图形技术
动画技术
声音技术
用户交互技术
网络技术
游戏引擎

一、游戏开发规则“成功的游戏设计者们应该能够而且必须超越直觉判断和草率行事,他们必然在设计中或有意或无意地遵循着某些准则,正是对这些准则的正确理解和灵活运用保证了一部游戏作品在商业上和艺术上的成功”。从此可见游戏规则的重要性。而这些规则又细分为下面几点。

游戏类型
在开发任何游戏之前,我们必须知道准备开发的游戏类型。不同类型的游戏其运用的设计手法是有所出入的。下面我们就来看看常用的几种游戏类型。

RTS(Realtime Strategy Game) 即时战略类游戏:
即时战略分为实时发生的和回合制两种,这种游戏都是用战斗为主线,要求玩者在游戏过程中运用自己的知识和策略来完成某一任务。实时发生的战略游戏会在短时间内积累大量的敌人和危险,战斗过程是快速反应性质的,敌我双方都在同一时间处理战斗事物。要求玩者具备较好的敏捷与宏观指挥能力。而回合制的战略游戏则会在战斗过程中敌我来回攻击,要求玩者要有好的策略计划能力。”帝国时代”就是一款经典的即时战略游戏,而”英雄无敌”则是经典的回合制战略游戏。
 


DOOM 游戏射击类游戏:
即第一人称射击类游戏。游戏画面即为玩者的视野范围。
 


RPG游戏RPG(Role Playing Game)角色扮演类游戏:
这些游戏具有一定的情节。游戏中为玩者提供一个可供探索的虚拟世界。在这世界包含了各种角色、城市、迷宫及险峻的地形。玩者通过在这广阔的虚拟空间旅行、战斗和生活一步步成长并揭开一系列的故事情节线索,最终达到某一目的。该类的大多游戏很贴切的表达了人类的情感。潜在的满足了游戏者的对拥有多姿多彩的不凡生活的渴望。”仙剑奇侠传”就是国内这类游戏的经典之作。
 



AVG(Adventure Game)冒险类游戏:
这类游戏在固定的剧情或故事下,提供玩者一个可解谜的环境及场景,玩者必须随着故事的安排进行解谜。游戏的目的是借游戏主角在故事中所冒险积累的经验来解开制作者所设定的谜题或疑点。通常这类游戏常被用来设计成侦探类型的解谜游戏。






体育类
体育类最大的特点就是利用体育带来的竞争性满足广大体育爱好者的娱乐兴趣。体育类游戏利用3D技术加强了运动场外观众的情绪,加深了运动场内环境的逼真体现。现今的体育类都有一个很相似的特点,都把相应类型的体育明星的个人完整资料加入到游戏中去。体育类游戏的代表作品就是《FIFA 9X》系列。




ACT(Action Game)格斗类游戏:
这类游戏提供玩者一个训练手眼协调及反应力的环境及功能,一般要求玩者所控制的主角(人或物)根据周遭情况变化做出一定的动作,如移动、跳跃、攻击、躲避、防守等,来达到游戏所要求的目标。此类游戏讲究逼真的形体动作、火爆的打斗效果、良好的操作手感及复杂的攻击组合等等



混合类型:融合若干游戏类型的游戏,是现今最有前景的游戏类型。
除了上面提来的几种外还有策略类,桌面类,运动类等等游戏,在此不一一列举了。如果你已经有了一个一直梦想开发的游戏类型或感兴趣的类型,那真是太好了。如果没有,你可参考上面的类型说明,从其他游戏、或者故事小说、或者你的梦境、或者你的朋友和熟人、或者电视节目、或者电影,甚至道听途说的中获得自己的所开发游戏类型的灵感。如果你经常玩游戏,你会发现,现在市场上很多游戏类型都或多或少的借鉴了电影原作及相关的奇幻小说。如比较出名的”二战特种兵”,就是依据二战故事改编而成的游戏。还有国内比较经典的RPG游戏”金庸群侠传”就是依据金庸的小说改编而来。

游戏剧本
   当你的游戏类型确定以后,就要开始设计游戏剧本了。游戏剧本顾名思义如同电影剧本一下,有自己的故事情节发展,有高潮,有结局。一个可玩性高,成功的游戏必定有一个很深的情节内涵。能让玩者在游戏过程中和游戏结束后能感受到游戏所带来的强烈感情冲击。最终释放自己的情绪,达到娱乐与享受的目的。一本好的剧本在事故情节,描述手段和主人公的设计上是比较讲究的。

情节设计:
情节设计目的就是要唤起游戏者某种情感,让游戏者在这种情感的推动下完成某些动作,借助这些动作最终消除那种情感,让游戏者感觉到其中的快乐。比如RPG游戏有这么个小情节:开始要求游戏者到森林中找宝物,游戏者在森林中无休止的和怪物战斗,情绪开始紧张,焦虑,当这种情绪达到一定阶段,终于找到了宝物。游戏者的在战斗过程中所积累的不安情绪也得到了释放。同理上面各种类型的游戏都可有自己的发展情节和曲线。所有的情节串起来,就是一本完整的游戏剧本。这些的灵感来源也是通过电影、小说或平时知识的积累。现今的游戏公司都专门配备了写游戏剧本的人员。

描述手段:  
  游戏情节设定后,就要使用到描述手法,是倒叙法还是顺序法,还是两者结合使用,大家可依据故事的情节发展而定。顺序法是一般的方式,故事随着游戏者的出场而开始,游戏者对未来一无所知,要靠自己的智慧和勇气去探索。而倒叙法,是让游戏者一出场就处在故事的结果中,慢慢的回到过去,一步一步发现事件的真像,或者阻止事件的发生。最典型的例子是AVG游戏。现在很多游戏都是同时运用了这两种手法,比如在” 仙剑奇侠传”中开始是顺叙法,让玩者从一个未知的世界开始玩起,在找水灵珠过程中又使用倒叙法让主人公回到过去,找到事件的原因。再回到现在让故事继续发展。曲折的手法更加大了游戏的真实性。
  
主人公:
主人公是游戏的灵魂。不管是哪种类型的游戏,都会存在一个主要人物。射击类和即时战略游戏的主人公都是身临其境,以第一人称视角出现,屏幕中不出现人物形象。而RPG类、格斗类、冒险类及一些小的打飞机类游戏都是以第三人称视角出现,游戏者可选择主人公的外观,面貌。出色的主人公能使人流连于游戏世界中。游戏中设计的主人公要有自己的个性,和独特魅力。能让玩者的情绪随主人公的喜乐变化能波动,甚至以为自己就是主人公。最后提一点,我们在游戏设计中的主人公不一定要是善良的,美好的。也可以是邪恶的,或者是正邪之间的。通常邪恶的主人公更容易抓住游戏的好奇心理使游戏成功。


游戏交互模式
如果你有了自己的游戏类型,有了自己的游戏剧本。剩下就是设计怎么让用户玩了。也就是我们平常所说的游戏中和用户的交互模式。这里的交互不仅仅指简单的鼠标和键盘等物理硬件设备,还包括人物的软交互:是单人游戏,双人游戏,多人游戏,还是网络游戏。不同的交互模块将会给游戏者不同的切身体会。
   如果让游戏者用鼠标来操作游戏,我们得确认鼠标的运用规则:如行动类游戏中双击到达目的地,单击可得到相应的物品或和人对话。射击类游戏中使用左键发射子弹,右键放炸弹,而移动鼠标是游戏中的方向操作。如果使用键盘来操作游戏,我们得设定好每一个可能用到的主键,在大部分游戏中”ESE”键是用来弹出操作菜单的。方向键是控制游戏主人公的行动方向。
由于游戏者各自的背景和文化的差异,导致了游戏交互模式的变换。现在比较大型的游戏都开发了三个版本,任务版,单机版和网络版,以满足不同人群的需要。任务版一般是结果设定好了,由主人公在一定的时间和地点完成指定的任务。而单机版是由主人公一个人在未知世界中处理未知的事件,所面临的对手主要就是电脑。单机版又可分为单人,双人或多人。双人和多人是在单人的基础上增加了一个游戏伙伴,或敌或友,不同的游戏类型,你的伙伴性质都会有所变化。
网络游戏是集上面大部分交互模式为一体,在一个多元的世界中,你将有着不同类型的对手或伙伴,也会使用不同的操作设备。故事情节也将会多元化发展。所以它以其特有的魅力,在现今异常火爆。但是开发网络游戏要投入大量的人力和物力。并不是凭一个人或几个人能完成的。
   

游戏智能
  这里的游戏智能(AI)指的是能够与人对抗的思维能力,一般指的就是游戏中电脑操作的部分。游戏智能在上面的几种模式中都有所体现。特别中在单人游戏中,游戏者面临的对手就是电脑。如果游戏中的人工智能是可以预见的,那么多数玩家宁愿上网和真人对战。游戏的关键就是要既能多人对战,又具有真实的AI,这样才能吸引独自战斗的玩家的兴趣。
我们在开发过程中,并不要很深入到智能的内部,只要能按常规处理电脑所产生的随机行动,并在游戏中随着游戏者等级的提高而提高电脑的等级。这里说的常规指的是正常情况下人不能穿过阻碍物而前进,车子不能潜水。如果在游戏你正面依山建设了大量防备,然后战斗开始了,大量电脑对手能穿过山进入你的领地,把你杀个片甲不留。或者某一游戏你才玩一会儿就知道了游戏中所有关卡。相信你以后再也还会玩这种游戏了。


二、Java游戏开发技术    
有了天才的设计,当然就少不了天才的技术了。知道了游戏开发的规则,我们来看看Java游戏开发中所包含的技术要点。了解这些技术的运作和原理对开发自己的游戏将会很有帮助。

图形技术
不知道大家玩过文字MUD游戏没有,文字MUD在互联网开始可是盛极一时。可是当图形游戏一出来,文字MUD立刻黯然失色,很快的退出了互联网的历史舞台。由此可见图形技术带来的无穷魅力。在游戏中我们几乎每时每刻都会和图形打交道,一汪大海,一座山,一个人,都是由图形技术来处理。
Java 标准API支持各种图形功能技术的开发。包括:图像处理,颜色调配,2D技术处理,3D技术支持,甚至还提供了对图形硬件进行开发的API支持。而且Java本身对这些类库进行了很好的封装,我们只要由于简单的API调用就可做出任何我们想做的图形出来。由于Java程序都是在虚拟机上执行,天生以牺牲速度来换得功能上及多平台上更强大的支持,所以这一影响也反应到了图形技术上来。但是今天处理器速度一日千里的变换中,在Java 虚拟机速度不断提升中,Java图形技术强大的功能已经慢慢的崭露头角。

Java2D图形类库:
---Java 2D API提供了实现非常复杂图形的机制,包括:图形处理、图形渲染质量的控制、颜色管理和打印的全面支持,通过Java 2D API,我们可以轻松地描绘出任意的几何图形、运用不同的填色效果,对图形做旋转( rotate)、缩放( scale)、扭曲( shear)等2D 处理,还可产生特殊的光影效果,alpha效果,图像透明、裁剪、合成以及空间变换。这些都在很大的程度上加大了Java游戏带来的视觉冲击。,支持用大量图形格式处理复杂的图像。Java 2D 还为您提供了修改图像、形状和字体字符的变换能力。对图像的碰撞Java 2D还自动加入了检测功能。
Java 3D图形类库
Java 3D 用于开发三维图形的API,它在以前流行的3D图形API的基础上进行了完整的集成。以前的API 是在3D图形硬件基础之上进行开发。而Java 3D 是一种功能强大的、面向对象的 API,在高层它为开发者提供对三维实体的创建、操纵和着色等图形数据的管理,实现并超出了“3D 图形 API”所能有的功能。在低层的又与现有的三维图形系统的,如OpenGL、Direct3D 、QuickDraw3D和XGL等紧密结合。这种结构使开发者很容易用Java 3D编写自己的三维作品又不失系统的图形特性。
下面就是一幅Java 3D处理的图形。谁会想到它全是用Java API代码实现的呢?
 
   

动画技术
  一提到图形技术,我们就不能不说动画技术了。人物走到,飞机飞行,子弹发射都是由动画提供支持的。动画的本质就是运动的图形,一系列连续显示的静止图形会给我 们一种连续动画的假象。只要动画速度足够快,则分散的静止图形就 会合并成一个连续运动的流程。在Java中没有专门支持动画的类库。但是这并不影响我们开发出自己的动画场景出来。Java中提供了多线程机制,我们利用多线程能很方便的实现动画技术。而多线程就是同时开辟几个线程,让它们在各自的领域同时处理各自的任务。打个比方,我们要实现人物的攻击效果。首先我们得准备一些人物的攻击样式图片,人物的每一步动作都用一张图片代替。动作图片越细,攻击效果越逼真。然后,我们为每个人物开辟各自的线程并让每个线程处理相应的图片加载事件,并循环播放就形成了动画。而几个人物线程的组合就构成了一幅战斗场景。


多线程:
  线程也即单个的执行任务,在Java中表现了一段功能实现代码。多线程是一种能同时处理多种任务的机制。比如煮饭过程中,你边在用洗衣机洗衣服边看着小说,嘴上还吃着零食。这几个过程都是在煮饭的同一时间内处理的。我们就可以说你实现了多线程。
其实Java中的多线程简单的来理解就是在同一时间能让CPU处理很多事情。从而大大提高CPU的工作效率。多线程的设计比较简单,一步步地在程序里累加我们想做的事情就可以了
我们设想为了创建一个新线程,我们所要做的事情?很显然,我们必须指明这个线程所要执行的代码,也即上面的图片加载和循环播放实现代码。而这就是在Java中实现多线程我们所需要做的一切。Java为我们开发多线程提供类 java.lang.Thread ,这个类提供了大量的方法来方便我们控制自己的各个线程。


用户交互技术
前面谈到的游戏中使用的技术都是让用户被动接受的感观。怎样才能让你的游戏有更多的人参与进来呢?没错,把主动权交与游戏者,让他们的每一个动作影响到游戏的发展。这样才会达到你的目的。只有这样才能让游戏者切切实实感受到游戏中的乐趣。这就谈到了Java中的交互技术。
现今游戏操作交互设备以鼠标,键盘,操作杆为主流。而Java中对这些设备都提供了很好的支持。对鼠标或键盘的操作过程,对Java而言都称之为“事件”,例如:移动鼠标,点击鼠标,按下某个按键等。当游戏者在游戏中触发这些设备,Java程序都会感知到并做出相应的事件处理。是前进,后退或战斗。例如当玩家按下鼠标(无论是左,中,右键),Java将得到一个来自系统的通知Mouse_Down。,当玩家移动鼠标,将产生Mouse_Move通知,当玩家拖动鼠标,将产生Mouse_Drge通知,这里大家要注意鼠标移动和拖动是不同的系统通知。谈到事件,大家有必要了解Java中的事件机制。在Java中每一个元素或设备都有自己的监听器,当用户触发这些设备或元素,监听器就会捕捉这些动作,并调用事件处理函数来处理,然后通知系统应该做什么事情了。比如在飞机大战中:让飞机前进,游戏者操作键盘向上的方向键,键盘监听器捕捉来自用户的事件,通过分析事件类型及键盘键得知方向上箭头,事件调用处理飞机前进的代码,把飞机图片向上移动来达到控制飞机的方向目的。
在游戏设计中要注意一点,鼠标和键盘一般是一起开发到一个游戏中去的,这样可让用户有多种交互的方式选择。因为不同的游戏者有不同的操作习惯,有时候鼠标和键盘的混合应用还可加大游戏交互的强度。


声音技术
有了图形,动画,理所当然少不了声音。声音可以创造意境,触发遐想,当与虚拟图像相结合时,更加可以让整个世界充满幻觉。这一切将会大大加强游戏赋予游戏者的虚拟情感。
Java 中利用Java Sound 类库实现了声音技术的处理。在JAVA2平台之前,JAVA语言对声音的处理很有限。而现在的Java Sound支持多种音频文件格式,如WAV、AIFF、AU格式,和多种基于MIDI的歌曲文件格式。
Java Sound是一个非常高质量的32声道音频播放器和MIDI控制的声音合成器,它能播放8比特或16比特、单声道或立体声、采样率8kHz到48kHz的音频数据。并同时提供了应用程序和applet的音频支持。


网络技术
从今年网络游戏的火爆势头来看,网络游戏将会是以后游戏发展的大趋势。 比起其他语言来说,Java 语言是运用于网络环境的一种编程语言其天生俱有网络的优势.。首先它是为顺应互联网而发展起来的,用java写的小程序可无缝的和互联网上的应用程序结合。其次Java net对网络底层进行了大量的封装处理,我们再不要深入到网络的后面就能容易的写出强大的网络功能。
使用其他语言的网络编程程序员必须掌握与网络有关的大量细节,比如socket的大量函数,底层网络协议的连接过程,甚至有时候不得不对网络硬件也要有深刻的认识。而Java隐藏了连网的基层细节。Java.net包提供了所有网络编程方面的功能特性,通过Java.net包我们处理网络上的数据就像处理本地文件系统中的数据一样方便。而在同时控制多个网络连接的时候,Java内建的多线程机制很方便的实现了这一目的。

游戏引擎
   游戏的引擎就是上面所有技术的控制中心,也相当于游戏的心脏。它好比汽车的引擎,大家都知道,汽车的引擎决定着一部汽车的性能、速度、质量。赛车为什么那快、高档车为什么那么平稳,都应该归功于它们都拥有一个先进的汽车引擎。游戏也是如此,我们上面所讲到的情节、图形、声音、动画和用户交互等都是直接由引擎进行控制处理。游戏引擎在后台负责协调和管理游戏中所有相关子系统的处理。比如:图形子系统和战斗子系统的数据交换、声音子系统的播放、动画子系统的绘制、用户交互过程中的事件响应等等。所以一个游戏的引擎设计好坏,直接影响到游戏的速度、稳定性、质量和也可重用性。而且当游戏引擎设计出来了,你的游戏也差不多也就完成了大部分的编写工作,精良的引擎完全可独立于游戏各子系统技术而存在,我们在新的游戏设计中只要简单的替换掉相应的图形子系统,声音子系统等技术。糟糕的引擎只会让系统处于忙碌的调用和加载中,更不要说重用。
   在Java中开发引擎要充分利用数据和接口的原则,用面向对象的思维来编写引擎器,这样的引擎才会有高效性。下面是一个用Java编写的比较简单的引擎接口。在此接口到Manager就是游戏的引擎部分,他控制着GraphicsManager等子系统的初始化和调用工作。而每一个子系统又是一块独立的管理系统,管理着本模块技术的所有工作。



 
// 引擎控制器
public class Manager {
   
    private GraphicsManager graphicsManager;
    private SoundManager soundManager;
    private AnimationManager animationManager;
    private NetManager netManager;
    private UserManager userManager;
   
   /**
* 初始化图形、声音、动画、网络、交互子系统
*/
    public Manager () {
        
        graphicsManager = new GraphicsManager();
        soundManager = new SoundManager();
        animationManager = new AnimationManager();
        netManager = new NetManager();
        userManager = new UserManager();       
    }
   
/**
* 获取图形子系统
*/
    public GraphicsManager getGraphicsManager () {
   
        return graphicsManager;           
    };
   
/**
* 获取声音子系统
*/
    public SoundManager getSoundManager () {
   
        return soundManager;           
    };
   
/**
* 获取动画子系统
*/
    public AnimationManager getAnimationManager () {
   
        return animationManager;           
    };
/**
* 获取交互子系统
*/
    public UserManager getUserManager () {
   
        return userManager;           
    };    
   
/**
* 获取网络子系统
*/
    public NetManager getNetManager () {
   
        return netManager;           
    };
}
 


上面只是对这些技术原理做了一个大概的介绍,大家如有兴趣可参考相关的资源对这些技术更进一步的了解,我们将在系列三中用一些完整的Java例子,来感受一下这些技术的具体运用。

六、参考资料:
1.sun公司的JDK API将是你很好的参考来源。
2.Robocode 中华联盟中有不少游戏编程的资料,并提供了Robocode这个编程游戏的下载。将给你很好的支持。
3.IBM java区提供了极其完备的Java中文资料,是大家不得不去的一个地方。

1楼
不错,我从基础看到这里发现很全面,证实了游戏开发是综合开发这个理念,不知道楼主的看法呢?

电脑版 Page created in 0.0312 seconds with 2 queries.