WiEngine基础
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
WiEngine基础
修改历史 (2)
前言 (2)
基本概念 (2)
坐标系 (2)
场景(Scene) (2)
节点(Node) (2)
导演(Director) (3)
层(Layer) (3)
图片(Sprite) (3)
图片集(Atlas) (4)
动作(Action) (4)
其它 (4)
示例解析 (4)
修改历史
时间原因
2010.7.12 初始版本
2010.7.17 修改了关于节点位置和relativeAnchorPoint标志的解释2010.7.27 修改了关于AtlasSprite的一些描述,主要是因为在
WiEngine 1.5.0版本中删除了AtlasSpriteManager 2010.10.24 去掉了attachInView的代码,在2.0.0中已经不需要s
前言
WiEngine参考吸取了iPhone平台著名引擎cocos2d的设计理念,因此在一些基本概念上是类似的。本文主要介绍WiEngine相关概念,如果你了解cocos2d,则会对本文有更好的理解。
我们尽量使用中文,但是有些确实不好翻译的术语我们会使用英文。
基本概念
标
Android的缺省坐标系是原点在左上角,x和y轴的正向是往右和往下。而OpenGL的坐标系是原点在左下角,x和y轴的正向是往右和往上。WiEngine采用了OpenGL的坐标系,所以要注意设置某些坐标的时候,是要相对于左下角来说的。
场 (Scene)
不管是应用还是游戏,都可以认为是由一个个界面组成的,界面之间的跳转就形成了这个应用或者游戏的操作流程。在WiEngine里,这一个个界面叫做场景。一个典型的游戏,应该是包含一个载入界面,一个菜单界面再加一个游戏界面,那么就可以划分为三个场景。WiEngine提供了场景对象,同时支持场景之间切换的各种特效。
节 (Node)
从类结构上去看,场景并不是最顶层的类,它实际上是Node的子类。节点是WiEngine中的顶层概念,它代表游戏中的某个“东西”。做个不是特别恰当1的比方,它类似于Java中
1不恰当之处在于有很多类不是Node的子类
的Object类。Node类是很多类的父类,比如菜单,比如贴图,等等。节点可以包含子节点,因此它们可以形成一个树型的结构,在游戏绘制时,它从根部开始,一直绘制完所有节点,就完成了一帧的渲染。
节点有一些比较基本,也是比较关键的概念:
l●大小:节点一般是有个大小的,可以通过setContentSize来设置一个节点有多大。大小为0也没问题,只要确实需要。
l●锚点(Anchor):锚点是相对于节点本身的坐标系来说的,通过setAnchorPercent方法设置锚点的相对位置。比如说,锚点是(0.5, 0.5), 而节点的大小是100x200, 那么这个锚点相对于本节点的坐标是(50, 100)。缺省的锚点位置是(0, 0), 但是有些不是,比如场景,比如后面要提到的Sprite, 它们的缺省锚点是(0.5, 0.5)。
l●位置:节点的位置可以通过setPosition方法设置。但是位置具体表示哪个点则受到relativeAnchorPoint标志的影响。当该标志为true时,位置和锚点是同一个点,当为false 时,位置表示节点的左下角,和锚点是不同点。这个逻辑可能理解起来有点奇怪,由于WiEngine参考了cocos2d的一些命名,所以这个标志位的名称也沿用了过来。但是我们觉得relativeAnchorPoint这个标志的名称起的有些令人费解,不排除在WiEngine的后续版本中修改该标志名称。relativeAnchorPoint不管是true还是false,一些基本操作,比如旋转,缩放等,都会根据节点锚点来进行。
导 (Director)
翻译成导演其实没错,但是感觉怪怪的,还是用Director吧。Director是单例模式的,游戏开始结束时都需要调用Director的方法进行初始化或者销毁工作。Director提供了一些管理场景的方法,比如runWithScene, pushScene, replaceScene等,通过这些API可以实现在各个场景之间切换。
也可以通过Director设置或者获取一些系统信息,比如调整一些OpenGL相关的设置,得到屏幕大小等,因此Director也是开发者和WiEngine系统间的一个桥梁。
层(Layer)
层也是节点的子类,它可以做为场景的子节点加入到场景中。所以场景也可以有多个层,可以根据需要显示不同的层,当然,你也可以不用层,这些都由你来把握。
图 (Sprite)
叫图片也许翻译的不太恰当,不过Sprite在WiEngine中主要就是代表一个图片相关资源,比如从某个PNG图片中载入的一个人物形象。Sprite是节点的子类,所以Sprite具有节点应该具有的一些特性。另外还有一个AtlasSprite,它和Sprite的区别只是图片的来源不一样,关于什么是Atlas请看下一小节。
图 (Atlas)
OpenGL对贴图的宽高尺寸有一个2的整数幂的要求,也就是长宽必须是2, 4, 8, 16, 32, 64等等。但是大部分时候图片都不是正好这个大小,这样的话每个图片都可能浪费一些内存,累积起来就会比较可观。为了节省资源,可以把若干张图片拼成一大张,这张大图片就叫做图片集。在使用时,图片集被整个载入,但是绘制的时候,可以只绘制指定的部分,这样就好像是单张图片一样了。AtlasSprite就是指这个Sprite来自于某个图片集,它一般要结合TextureAtlas使用,图片的载入工作是由TextureAtlas完成的,AtlasSprite只是指定一下绘制区域的相关坐标。
动 (Action)
游戏里经常会需要进行一些动画或者交互操作,Action为这种需求提供一种通用框架。Action说明了一个效果该怎么去做,而节点是效果的载体,通过Node.runAction()方法,可以在任意节点上执行一个Action。Action有许多子类,每个都对应于一种动作或者特效,而且多个Action还可以组合起来构成新的效果,比如同时既旋转又缩放。关于Action会有后续教程专门介绍。
WiEngine还有很多相关概念会在后续教程中介绍。做为基础教程,了解上述概念已经足够。示例解析
WiEngine SDK目前包含了一个演示程序叫WiEngineDemos。演示了WiEngine目前支持的所有特性。WiEngine的jar文件在lib目录下,加入到你的android工程后就可以使用WiEngine 了。
WiEngineDemos中的示例程序都具有一个同样的代码模式,这个模式可以说是使用WiEngine的标准模式,所以我们就随便挑一个代码来具体说明一下WiEngine的使用方式。
请先将WiEngineDemos导入到Eclipse中,然后我们打开MoveToTest.java, 首先关注onCreate 方法的前半部分:
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(youtParams.FLAG_FULLSCREEN,
youtParams.FLAG_FULLSCREEN);
mGLSurfaceView = new WYGLSurfaceView(this);
setContentView(mGLSurfaceView);