A. 请解释一下这些计算机专业是什么意思。
B. 动漫游戏设计主要是学什么的,我想去了解一下
主要学3DMAX、MAYA、AE等高端三维动画制作、影视合成软件操作技能,从事三维动画设计及影视后期合成工作的高技能人才。
毕业生可在动画公司、影视传媒公司、企划公司、图文设计公司、出版行业、电视台及企业宣传策划部门担任相关设计工作;还可以在动画,影视和建筑行业担任动画设计与制作及三维设计人员,面向多领域、多行业进行动画、视频及多媒体产品的开发工作。
C. 使用布局管理器与线程概念,实现动画效果。
动态的动画接口很难创建,但是核心动画通过提供如下接口使这些创建起来变得更加简单:
简单易用的高性能混合编程模型。
简单易用的高性能混合编程模型。
类似视图一样,你可以通过使用图层来创建复杂的接口。
轻量级的数据结构,它可以同时显示并让上百个图层产生动画效果。
一套简单的动画接口,可以让你的动画运行在独立的线程里面,并可以独立于主线程之外。
一旦动画配置完成并启动,核心动画完全控制并独立完成相应的动画帧。
提高应用性能。应用程序只当发生改变的时候才重绘内容。再小的应用程序也需要改变和提供布局服务层。核心动画还消除了在动画的帧速率上运行的应用程序代码。
灵活的布局管理模型。包括允许图层相对同级图层的关系来设置相应属性的位置和大小。
使用核心动画,开发人员可以为他们的应用创建动态用户界面,而无需使用低级别的图形API,如OpenGL来获取高效的动画性能。
核心动画类
核心动画类有以下分类:
提供显示内容的图层类。
动画和计时类。
布局和约束类。
事务类,在原子更新的时候组合图层类。
核心动画的基础类包含在Quartz核心框架(Quartz Core framework)里面,虽然它的其他图层类在其他框架里面定义。下图显示了核心动画的类层次结构。
图层类
图层类是核心动画的核心基础,它提供了一套抽象的概念(假如你使用过NSView或者UIView的话,你一定会对它很熟悉)。CALayer是整个图层类的基础,它是所有核心动画图层类的父类。
和视图类(NSView或UIView)一样,CALayer有自己的父图层类,同时也拥有自己子图层类的集合,它们构成了一个图层树的层次结构。图层绘制类似视图一样自底向上,并指定其几何形状相对他们superlayer,创建一个相对的局部坐标系。然而图层类通过合并变换矩阵允许你旋转、偏移、拉伸对应的图层内容。具体内容将会在后面图层(Layer)的几何和变换部分介绍。
CALayer从Application Kit和Cocoa Touch的视图类分离出来,因为没有必要为了显示内容而继承CALayer类。因为CALayer类的内容显示可以通过以下方法提供:
可以直接或者委托的方式把图层的内容属性设置为Core Graphics image。
提供直接绘制到一个Core Graphics image上下文委托。
设置所有图层所具有的可视化样式属性,比如背景颜色、不透明属性、蒙版等。Mac OS X应用同样可以通过核心图像滤镜来访问它的可视化样式属性。
继承CALayer并通过封装方法实现以上任何技术。提供图层内容描述了提供内容层可用方法。可视化样式样式属性和它们的顺序将会在图层样式属性部分详细介绍。
除了CALayer类,核心动画类同时提供了显示其他内容的类。这些类在 Mac OS X和 iOS 上有细微的差别,以下类在 Mac OS X 和 iOS 上都可用:
CAScrollLayer是CALayer的子类,简化显示图层的一部分内容。CAScrollLayer对象的滚动区域的范围在它的子图层里面定义。CAScrollLaye不提供键盘或鼠标事件处理,也不提供可见的滚动条。
CATextLayer可以方便的从字符串或字符串的内容创建一个图层类的内容。
CATiledLayer允许递增的显示大而复杂的图片。
CALayer同时管理与层关联的动画和行为。图层接受层树的插入和删除层动作,修改层的属性,或者明确的开发请求。这些行为通常会导致动画发生。见动画和图层操作的更多信息。
动画和计时类
图层的很多可视化属性是可以隐式动画的。通过简单的改变图层的可动画显示的属性,可以让图层现有属性从当前值动画渐变到新的属性值。例如设置图层的hidden属性为YES将会触发动画使层逐渐淡出。大多数动画属性拥有自己关联的默认动画, 你可以轻松地定制和替换。我们将会在后面动画属性部分列出一个完整的动画属 性列表和它们相应的默认动画。动画的属性也可以显式动画。要显式动画的属性,你需要创建核心动画类的一个实例,并指定所需的视觉效果。显式动画不会改变该属性的值,它只是用于动画显示。
核心动画的动画类使用基本的动画和关键帧动画把图层的内容和选取的属性动画的显示出来。所有核心动画的动画类都是从CAAnimation类继承而来。CAAnimation实现了CAMediaTiming协议,提供了动画的持续时间、速度、和重复计数。CAAnimation也实现了CAAction协议。该协议为图层触发一个动画动作提供了提供标准化响应。
动画类同时定义了一个使用贝塞尔曲线来描述动画改变的时间函数。例如,一个匀速时间函数(linear timing function)在动画的整个生命周期里面一直保持速度不变,,而渐缓时间函数(ease-out timing function)则在动画接近其生命周期的时候减慢速度。
核心动画额外提供了一系列抽象的和细化的动画类,比如:CATransition提供了一个图层变化的过渡效果,它能影响图层的整个内容。 动画进行的时候淡入淡出(fade)、推(push)、显露(reveal)图层的内容。这些过渡效果可以扩展到你自己定制的Core Image滤镜。
CAAnimationGroup允许一系列动画效果组合在一起,并行显示动画。
CAPropertyAnimation是一个抽象的子类,它支持动画的显示图层的关键路径中指定的属性。
CABasicAnimation简单的为图层的属性提供修改。
CAKeyframeAnimation支持关键帧动画,你可以指定的图层属性的关键路径动画,包括动画的每个阶段的价值,以及关键帧时间和计时功能的一系列值。在动画运行时,每个值被特定的插入值替代。
核心动画和Cocoa Animation同时使用这些动画类。使用动画描述,是因为这些类涉及到核心动画,这些将会在Animation Types and Timing Programming Guide有较深入的讨论。
布局管理器类
Application Kit的视图类相对于superlayer提供了经典的struts and springs定位模型。图层类兼容这个模型,同时Mac OS X上面的核心动画提供了一套更加灵活的布局管理机制,它允许开发者自己修改布局管理器。核心动画的CAConstraint类 是一个布局管理器,它可以指定子图层类限制于你指定的约束集合。每个约束 (CAConstraint类的实例封装)描述层的几何属性(左、右、顶部或底部的边缘或水平或垂直中心)的关系,关系到其同级之一的几何属性层或superlayer。
通用的布局管理器和约束性布局管理器将会在布局核心动画的图层部分讨论。
事务管理类
图层的动画属性的每一个修改必然是事务的一个部分。CATransaction是核心动画里面负责协调多个动画原子更新显示操作。事务支持嵌套使用。
核心动画支持两种事务:隐式事务和显式事务。在图层的动画属性被一个线程修改,同时该线程下次迭代的时候自动提交该修改的时候隐式事务自动创建。显式事务发生在程序在修改动画属性之前给发CATransaction送了一个开始消息,在动画属性修改之后提交该消息。
事务管理将会在后面的事务部分详细介绍。
D. uiviewanimation 在哪个线程
frame属性:可以使用该属性改变尺寸和位置
bounds:改变尺寸
center:改变视图的位置
alpha:改变视图的透明度
backgroundColor:改变视图的背景
contentStretch:改变视图内容如何拉伸
IOS封装了Core Animation来是实现动画,Core Animation的最大好处是可以帮助Mac或者iPhone的开发者减少代码量。因为如果你想用Core Image或者Open GL实现界面的动画特效,其实也是可以的,主要是非常麻烦。而用Core Animation可以极大简化开发难度和减少代码量,IOS提供的核心动画编程接口,可以让编程人员以非常简单的方式实现炫目流畅的动画效果
翻转的动画
//开始动画
[UIView beginAnimations:@“wap view” context:nil];
//设置时常
[UIView setAnimationDuration:1];
//设置动画淡入淡出
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
//设置代理
[UIView setAnimationDelegate:self];
//设置翻转方向
[UIView setAnimationTransition: forView:manImageView cache:YES];
//动画结束
[UIView commitAnimations];
旋转动画
创建一个CGAffineTransform transform对象 CGAffineTransform transform;
//设置旋转度数
transform = CGAffineTransformRotate(manImageView.transform,M_PI/6.0);
//动画开始
[UIView beginAnimations:@“rotate” context:nil ];
//动画时常
[UIView setAnimationDuration:2];
//添加代理
[UIView setAnimationDelegate:self];
//获取transform的值
[manImageView setTransform:transform];
//关闭动画
[UIView commitAnimations];
偏移动画
[UIView beginAnimations:@“move” context:nil];
[UIView setAnimationDuration:2];
[UIView setAnimationDelegate:self]; //改变它的frame的x,y的值 manImageView.frame=CGRectMake(100,100, 120,100);
[UIView commitAnimations];
翻页动画
[UIView beginAnimations:@“curlUp” context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];//指定动画曲线类型,该枚举是默认的,线性的是匀速的
//设置动画时常 [UIView setAnimationDuration:1];
[UIView setAnimationDelegate:self]; //设置翻页的方向
[UIView setAnimationTransition: forView:manImageView cache:YES];
//关闭动画
[UIView commitAnimations];
缩放动画
CGAffineTransform transform;
transform = CGAffineTransformScale(manImageView.transform,1.2,1.2);
[UIView beginAnimations:@“scale” context:nil];
[UIView setAnimationDuration:2];
[UIView setAnimationDelegate:self];
[manImageView setTransform:transform];
[UIView commitAnimations];
取反的动画效果是根据当前的动画取他的相反的动画
CGAffineTransform transform;
transform=CGAffineTransformInvert(manImageView.transform);
[UIView beginAnimations:@“Invert” context:nil];
[UIView setAnimationDuration:2];//动画时常
[UIView setAnimationDelegate:self];
[manImageView setTransform:transform];//获取改变后的view的transform [UIView commitAnimations];//关闭动画
E. 怎样实现UIView的淡入淡出特效
UIView类的很多属性都设计为动画,动画的属性是指当属性从一个值变成另外一个值时可以支持动画,同时通知UIKit需要执行什么样类型的动画,UIView对象支持动画的属性有如下几个:
frame属性:可以使用该属性改变尺寸和位置
bounds:改变尺寸
center:改变视图的位置
alpha:改变视图的透明度
backgroundColor:改变视图的背景
contentStretch:改变视图内容如何拉伸
IOS封装了Core Animation来是实现动画,Core Animation的最大好处是可以帮助Mac或者iPhone的开发者减少代码量。因为如果你想用Core Image或者Open GL实现界面的动画特效,其实也是可以的,主要是非常麻烦。而用Core Animation可以极大简化开发难度和减少代码量,IOS提供的核心动画编程接口,可以让编程人员以非常简单的方式实现炫目流畅的动画效果
翻转的动画
//开始动画
[UIView beginAnimations:@"wap view" context:nil];
//设置时常
[UIView setAnimationDuration:1];
//设置动画淡入淡出
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
//设置代理
[UIView setAnimationDelegate:self];
//设置翻转方向
[UIView setAnimationTransition: forView:manImageView cache:YES];
//动画结束
[UIView commitAnimations];
旋转动画
创建一个CGAffineTransform transform对象 CGAffineTransform transform;
//设置旋转度数
transform = CGAffineTransformRotate(manImageView.transform,M_PI/6.0);
//动画开始
[UIView beginAnimations:@"rotate" context:nil ];
//动画时常
[UIView setAnimationDuration:2];
//添加代理
[UIView setAnimationDelegate:self];
//获取transform的值
[manImageView setTransform:transform];
//关闭动画
[UIView commitAnimations];
偏移动画
[UIView beginAnimations:@"move" context:nil];
[UIView setAnimationDuration:2];
[UIView setAnimationDelegate:self]; //改变它的frame的x,y的值 manImageView.frame=CGRectMake(100,100, 120,100);
[UIView commitAnimations];
翻页动画
[UIView beginAnimations:@"curlUp" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];//指定动画曲线类型,该枚举是默认的,线性的是匀速的
//设置动画时常 [UIView setAnimationDuration:1];
[UIView setAnimationDelegate:self]; //设置翻页的方向
[UIView setAnimationTransition: forView:manImageView cache:YES];
//关闭动画
[UIView commitAnimations];
缩放动画
CGAffineTransform transform;
transform = CGAffineTransformScale(manImageView.transform,1.2,1.2);
[UIView beginAnimations:@"scale" context:nil];
[UIView setAnimationDuration:2];
[UIView setAnimationDelegate:self];
[manImageView setTransform:transform];
[UIView commitAnimations];
取反的动画效果是根据当前的动画取他的相反的动画
CGAffineTransform transform;
transform=CGAffineTransformInvert(manImageView.transform);
[UIView beginAnimations:@"Invert" context:nil];
[UIView setAnimationDuration:2];//动画时常
[UIView setAnimationDelegate:self];
[manImageView setTransform:transform];//获取改变后的view的transform [UIView commitAnimations];//关闭动画
F. Java游戏高级编程的内容简介
在第1章“配置开发环境”中,我向读者介绍了将要在整本书中使用的代码库。描述了这个库的设计,并给出了编译示例游戏的说明。可能会在游戏开发环境中使用的一些附加代码、图形和音频文件,也在本章确定了下来,还介绍了软件开发的一些流行工具。以模板的形式给出了一个演示Java游戏编程基础知识的游戏示例。
在第2章“部署框架”中,我们关注的重点是在可以安装在多种不同类型的平台上的一个框架中部署游戏。在动画线程管理技术的相关内容中,介绍了一个被广泛使用的框架接口以及applet生命周期。在对适合于游戏的不同发布而进行不同部署的选项进行了一个简要的回顾以后,给出了允许游戏部署在不同开发环境中而不需要任何修改的一个抽象层的源代码示例。
在第3章“Swing动画”中,介绍了一个基于Swing的动画库,这个动画库会在整本书中使用。这一章主要考虑的问题是动画的性能和灵活性。在介绍核心动画引擎类的源代码时简单介绍了优化权衡。
在第4章“动画库”中,介绍了通用动画任务的一个类集合。这些类提供了很多功能,例如场景管理和Sprite实现。它们也用来介绍怎样开发与核心动画引擎类互操作的游戏特定代码。
在第5章“高级图形技术”中,介绍了高级图形技术,包括硬件加速图形、多缓冲和全屏独占模式。给出了使这些技术的使用变得更加方便的可重用类和使用这些可重用类的示例游戏。对其中的每一个技术,都介绍了关于它们使用方法的一些限制。
在第6章“持久数据”中,对在各种部署框架中加载和保存游戏数据的机制进行了对比。在这个过程中还介绍了可以用于大多数游戏编程的可重用数据持久性的类库。对更加高级的持久性需求的其他选择也进行了考虑。
在第7章“游戏体系结构”中,介绍了适合于Java游戏开发的面向对象的软件体系结构的优点。使用这种体系结构的一个示例游戏是作为新游戏开发模板进行介绍的。本章还简单介绍了一下数据驱动的设计。
在第8章“A*算法”中,介绍了现在在游戏行业中最流行和最常用的一个人工智能(AI)算法的实现。本章还介绍了使用A*算法绕过障碍物寻找路径的示例。
在第9章“HTTP隧道技术”中,介绍一个可以在大部分Java游戏部署环境里常见的安全限制以内进行操作的一个联网库。本章还给出了一个示例,在这个示例中,数据在服务器和客户机之间进行传递。
在第10章“HTTP轮询机制”中,将联网库扩展以支持在线多玩家游戏。使用轮询来同步客户机和服务器上的游戏状态。在由单玩家游戏向多玩家联网游戏的转换中,介绍了我所推荐的软件体系结构的灵活性。
在第11章“HTTP Pulling机制”中,事件驱动的消息是作为轮询的另一个选择而推荐使用的。使用在前面两章中介绍的这些类,演示了这是怎样在无符号applet的安全限制以内实现的。使用这些技术进行进一步开发的一些建议已经超出了本书的范围,这里只进行简单的介绍。
本书合作站点
本书应该保持其“高级性”。为此,我专门为这本书建立了一个Web站点。从这个站点上,您能够订阅与本书相关的电子邮件列表,包括补充的指南和勘误表。您将能够测试和运行本书所介绍的示例游戏,并下载开放源代码库和用来创建这些游戏的公共领域的多媒体文件。针对老师,我已经在Creative Commons Attribution License下发布了我在讲授游戏开发课程中使用的课程提纲、幻灯片和布置给学生的作业。我也提供了我的联系方式,这样您可以将您的建议和意见反馈给我,以便我以后进行更正。
在开始阅读第1章以前,请先访问网站,并订阅Advanced Java Game Programming通知邮件列表。
IV
Java游戏高级编程
G. 动漫游戏设计都有什么课程啊
动漫设计与制作专业核心课程:
美术基础模块:设计素描、设计色彩、速写、透视
软件应用模块:Photoshop、Illustrator、Flash、3DMAX、Premiere、AfterEffect
专业基础模块:原画设计、动画剧本创作、视听语言、动画编程基础、角色、场景绘制,主要学习动漫的角色、场景的手绘和CG绘制技巧,从而能够掌握良好的动漫绘制功底。
专业核心模块:Flash二维动画设计与制作、3dmax动画设计与制作、影视后期的编辑与合成,从人物设定、建模、动画、材质等模块入手。
H. 动漫设计和制作专业主要学什么
你可以先去【绘学霸】网站找“动漫设计”板块的【免费】视频教程-【点击进入】完整入门到精通视频教程列表: www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=304&zdhhr-3y1r-416395155
想要系统的学习可以考虑报一个网络直播课,推荐CGWANG的网络课。老师讲得细,上完还可以回看,还有同类型录播课可以免费学(赠送终身VIP)。
自制能力相对较弱的话,建议还是去好点的培训机构,实力和规模在国内排名前几的大机构,推荐行业龙头:王氏教育。
王氏教育全国直营校区面授课程试听【复制后面链接在浏览器也可打开】: www.huixueba.com.cn/school/manhua?type=3&zdhhr-3y1r-416395155
在“动漫设计”领域的培训机构里,【王氏教育】是国内的老大,且没有加盟分校,都是总部直营的连锁校区。跟很多其它同类型大机构不一样的是:王氏教育每个校区都是实体面授,老师是手把手教,而且有专门的班主任从早盯到晚,爆肝式的学习模式,提升会很快,特别适合基础差的学生。
大家可以先把【绘学霸】APP下载到自己手机,方便碎片时间学习——绘学霸APP下载: www.huixueba.com.cn/Scripts/download.html
I. 简述Flash动画的原理
原始动画原理,你可能看到过幻灯片吧,就是这个原理,就是把每一张画按每秒24帧的速度放出,就能看到连续的动画.
也就是FLASH中的逐帧动画.
同样电影也是这样的原理.
19世纪20年代,英国科学家发现了人眼的“视觉暂留”现象(物体被移动后其形象在人眼视网膜上还可有约1秒的停留),揭示了连续分解的动作在快速闪现时产生活动影像的原理。
说到Flash,大家一定都很熟悉,它是macromedia公司推出的基于矢量图形的流媒体动画软件,现在Flash的应用方向已经是越来越广泛,从网络,媒体到手机彩信,它已经逐渐进入了我们的生活。学习Flash,不光可以满足你制作专业级动画的欲望,也可以对个人的发展起到很大的作用。在网页三剑客中,Flash可以说是一个非常有个性,非常独立但又和网络结合很紧密的流媒体动画制作软件。简单的操作就可以制作动感十足的动画,支持多种格式的多媒体文件置入,强大的交互功能,都是我们不可不学Flash的理由。
Flash中的动画制作方式总的分为两种,一种是类似于Fireworks中的帧动画的制作,还有就是补间动画。使用帧动画可以制作一些真实的,专业的动画效果。使用补间动画的制作方式则可以轻松创建平滑过渡的动画效果。到底哪种方式才是我们最终的选择?
知识点:Flash动画原理,帧动画的制作,补间动画的制作。Flash动画原理,帧动画的制作,补间动画的制作。如果你知道动画片是怎么回事就行了,FLASH就是利用动画片的原理.
但他把每个画面分成帧,将这些帧也就是画面快速的播放出来就成的动画.
但FLASH动画由于是高压缩的,所以文件很小,即被现在广泛使用.它还可以通过编程来控制动画的播放,使得动画的文件变小,切更容易的控制动画.
这就是FLASH动
J. 有什么关于介绍java advanced image的书
介绍你看这本书【Java游戏高级编程】网上业有下载!
Java游戏高级编程——游戏开发经典丛书
图书作者: [美]David Wallace Croft 着 彭晖 译
出版社: 清华大学出版社
ISBN: 7302110832
出版时间: 2005-8第1版
印刷时间: 2005-8第1次印刷
开 本: 16
价 格(元): 58
本书通过丰富的示例游戏,详细讲述了Java游戏高级编程方面的知识。包括部署框架、Swing动画、动画库、高级图形技术、持久性机制、游戏体系结构以及一些通信和同步技术等。
本书针对那些具有一定编程经验、渴望将自己独特的游戏设计思想变成部署实体的Java高级开发人员。
前 言
花代价所换来的一点才智,抵过别人传授的数倍不止。
—— 本杰明?富兰克林
本书针对的是那些想使用最新的高性能技术,创建面向Web和桌面的复杂2D计算机游戏的Java程序员。本书循序渐进地介绍了一个可重用的动画库,每一章都依赖于前面的一些章节。在需要说明这些主题的地方,都详细地介绍了每一个新库类的源代码,并且给出了实际使用这些类的示例游戏。免费许可使您可以直接修改和调整库代码和示例游戏,开发自己的游戏程序。
目的
本书也可取名为《现代Java游戏编程》。在以前出版的Java游戏编程的书籍中介绍的很多技术和主题,已被Java编程语言和它的高级类库所淘汰。这包括像线程管理、事件管理、图形用户界面、网络通信、持久性和部署等方面。在本书中,我对这些变更作了适当的注释,并简要地对这些技术作了一些对比。
虽然通过将每一帧中需要重绘像素的数量最小化就可以在Java中创建高速的动画,但是在最近发布的Java编程语言的1.4版中引入的新类,又提供了通过可移植方式直接访问视频硬件的方法。正如在本书中介绍的一样,即使每一帧中需要更新的像素很多,也可以实现高速的帧速率。在这里介绍了一个示例程序,用来演示在真彩色高分辨率模式中,成功地将全屏动画和显示器75Hz的刷新率同步。
尽管本书最初的设计是面向游戏,但是读者应该知道这里介绍的技术也可以用在其他应用方面,包括广告和仿真。嵌在Web页面中的动画调幅广告applet会立即闪现在您的大脑中。调幅广告可以使用强大的通用编程语言(例如Java)编写的这个事实,充分发掘它们超越动画的辅助功能的潜能,包括活动数据连接。在仿真领域,学生和科学家都可以从可视化上获益。当这些模型使用Java表示的时候,用户就可以与它们进行交互、更改参数并观察新的结果。
读者对象
本书专门针对具有丰富经验、正准备和渴望将他们独特的游戏设计思想转换为部署实体的Java开发人员。对这些读者而言,从想了解有趣的游戏特定逻辑以来,一直在学习Java编程语言和实现基本的基础结构代码。
同时,这些Java高级开发人员希望详细地了解可能会影响游戏性能的可重用库中的优化选项。在介绍游戏库和本书示例游戏中的这些源代码时,我假定读者已经掌握了一些基本的主题,例如Java编程语言、面向对象的编程(Object Oriented Programming,OOP)技术、图形用户界面(Graphical User Interface,GUI)组件库,以及一些设计模式等。
范围
本书简要(没有深入地)介绍了那些虽然必需但又不是专门用于Java游戏编程的技术。这包括通用的开放源代码开发工具和通用的标准以及应用编程接口(API),这些都是很多经验丰富的Java游戏程序员已经使用过的技术。在书中,还提供了在这些方面需要进一步阅读的参考书目。
本书介绍的很多可重用库都利用了在核心Java平台里可用的最新API、当前的J2SE 1.4版。本书没有介绍那些过时的API,例如AWT(Abstract Window Toolkit)。相反,深入地研究了应用现代API的具体技术,包括Java游戏编程用于动画设计的Swing。
除了Java 2D和Image I/O API以外,Java Media API中绝大部分API都没有在本书中介绍,因为我考虑到它们在游戏开发中会有一些限制。在游戏中使用Java 3D、JMF(Java Media Framework)或者Java Speech API,就强制玩家下载安装一个可选包和它的本地代码实现。我相信这种附加的步骤将会使很多潜在的玩家退缩,尤其是那些遇到安装问题和下载延迟问题的玩家。尽管已经对J2SE内核库的一部分进行了安装,但是Java Sound API仍然需要一个soundbank文件,这个文件对有些操作系统而言是默认包含在Java运行库环境(JRE)发布中的,而对Windows而言则不是。Java共享数据工具包(Java Shared Data Toolkit,JSDT)API,尽管也可以在网络游戏中使用,但是它们好像已经被废止了。我在游戏编程里,还没有发现确实需要使用Java高级图像(Java Advanced Imaging,JAI)的地方。
本书并没有回避将Java与平台专用代码混合的Java本地接口(JNI)API的使用,但是也不鼓励这样使用。本书中给出的所有代码都是用纯粹、可移植的Java语言编写的,它们能够在所有安装有Java虚拟机的平台上运行。作为一个开发人员,我发现不使用定制的本地库也可以实现高性能。作为一个玩家,我更加喜欢用纯Java编写的游戏,因为我不必因为安全风险而烦恼,并且我知道游戏将会运行在我喜欢的平台上,而不管这是个什么平台。
本书没有介绍使用Java 2 Micro Edition(J2ME)平台进行Java游戏开发。我希望像摩尔定律中描述的那样,硬件性能的快速发展能使J2ME很快过时。如今的手持PDA使用的微处理器的性能已经与3年以前使用的最好计算机的处理器性能一样强大了。现在在PDA上安装J2SE和运行Swing应用程序已经成为可能。如果在近几年内看到J2EE运行在手表上,我将不会感到惊奇。
在学习后面的关于多玩家联网模式的相关章节时,确实需要读者具有一些J2EE的知识。然而,这也限制使用Servlet API进行开发。更为复杂的J2EE API(例如Enterprise Java Beans(EJBs))的使用方法,本书并没有进行介绍。所有示例的网络游戏都会运行在一个简单的servlet容器以内,并且也不需要安装一个完全的应用服务器。
内容简介
在第1章“配置开发环境”中,我向读者介绍了将要在整本书中使用的代码库。描述了这个库的设计,并给出了编译示例游戏的说明。可能会在游戏开发环境中使用的一些附加代码、图形和音频文件,也在本章确定了下来,还介绍了软件开发的一些流行工具。以模板的形式给出了一个演示Java游戏编程基础知识的游戏示例。
在第2章“部署框架”中,我们关注的重点是在可以安装在多种不同类型的平台上的一个框架中部署游戏。在动画线程管理技术的相关内容中,介绍了一个被广泛使用的框架接口以及applet生命周期。在对适合于游戏的不同发布而进行不同部署的选项进行了一个简要的回顾以后,给出了允许游戏部署在不同开发环境中而不需要任何修改的一个抽象层的源代码示例。
在第3章“Swing动画”中,介绍了一个基于Swing的动画库,这个动画库会在整本书中使用。这一章主要考虑的问题是动画的性能和灵活性。在介绍核心动画引擎类的源代码时简单介绍了优化权衡。
在第4章“动画库”中,介绍了通用动画任务的一个类集合。这些类提供了很多功能,例如场景管理和Sprite实现。它们也用来介绍怎样开发与核心动画引擎类互操作的游戏特定代码。
在第5章“高级图形技术”中,介绍了高级图形技术,包括硬件加速图形、多缓冲和全屏独占模式。给出了使这些技术的使用变得更加方便的可重用类和使用这些可重用类的示例游戏。对其中的每一个技术,都介绍了关于它们使用方法的一些限制。
在第6章“持久数据”中,对在各种部署框架中加载和保存游戏数据的机制进行了对比。在这个过程中还介绍了可以用于大多数游戏编程的可重用数据持久性的类库。对更加高级的持久性需求的其他选择也进行了考虑。
在第7章“游戏体系结构”中,介绍了适合于Java游戏开发的面向对象的软件体系结构的优点。使用这种体系结构的一个示例游戏是作为新游戏开发模板进行介绍的。本章还简单介绍了一下数据驱动的设计。
在第8章“A*算法”中,介绍了现在在游戏行业中最流行和最常用的一个人工智能(AI)算法的实现。本章还介绍了使用A*算法绕过障碍物寻找路径的示例。
在第9章“HTTP隧道技术”中,介绍一个可以在大部分Java游戏部署环境里常见的安全限制以内进行操作的一个联网库。本章还给出了一个示例,在这个示例中,数据在服务器和客户机之间进行传递。
在第10章“HTTP轮询机制”中,将联网库扩展以支持在线多玩家游戏。使用轮询来同步客户机和服务器上的游戏状态。在由单玩家游戏向多玩家联网游戏的转换中,介绍了我所推荐的软件体系结构的灵活性。
在第11章“HTTP Pulling机制”中,事件驱动的消息是作为轮询的另一个选择而推荐使用的。使用在前面两章中介绍的这些类,演示了这是怎样在无符号applet的安全限制以内实现的。使用这些技术进行进一步开发的一些建议已经超出了本书的范围,这里只进行简单的介绍。