09_Ophone平台2D游戏引擎实现——游戏框架实例
- 格式:docx
- 大小:275.01 KB
- 文档页数:22
2D游戏引擎中图形模块的设计与实现的开题报告一、选题背景及意义:随着现代科技的不断发展,游戏逐渐成为人们休闲娱乐的主要方式之一。
而作为游戏的核心部分,游戏引擎的开发也变得越来越重要。
游戏引擎被用来提供游戏开发者所需的各种工具与资源,使得游戏开发者可以更高效地实现游戏功能。
其中,图形模块是一个非常重要的部分,它负责游戏中的各种视觉效果的实现,包括场景渲染、模型展示、粒子效果等等。
因此,在游戏引擎的开发中,图形模块的设计和实现尤其重要。
本文将介绍一种2D游戏引擎中图形模块的设计与实现方案。
通过对这一方案的研究和实践,将可以深入了解游戏引擎中图形模块的实现原理和开发技术,掌握游戏引擎开发中的一些常用方法和技巧,从而为游戏开发者提供更高效、更优秀的游戏开发工具,为游戏产业的发展做出贡献。
二、研究内容及方法:本文将研究的内容是2D游戏引擎中图形模块的设计和实现。
具体而言,研究内容包括以下几个方面:1. 绘图接口设计:绘图接口是游戏引擎中重要的组成部分,它是图形模块和其他部分之间的桥梁。
在本设计中,将采用OpenGL ES 2.0等工具实现绘图接口的设计。
2. 纹理加载和管理:纹理是图形模块中非常重要的资源,负责游戏中各种模型、场景等图像的展示。
在本设计中,将深入研究纹理的加载和管理技术。
3. 场景绘制:场景绘制是游戏引擎中最核心的功能之一,它需要管理游戏中所有物体的位置、大小、纹理等信息。
在本设计中,将研究场景绘制算法及其实现方法。
4. 粒子效果实现:粒子效果是游戏引擎中非常重要的一部分,它可以实现各种特效,为游戏增添更多的乐趣和可玩性。
在本设计中,将研究粒子效果的实现原理,并实现一些常见的粒子效果。
5. 性能优化:图形模块是游戏引擎中最消耗资源的部分之一,因此在本设计中,我们将研究并实践一些图形性能优化的技术,以提高游戏运行的效率和流畅度。
本文所采用的方法主要有文献研究、实验探究、软件开发等。
通过对相关文献的研究,可以了解到游戏引擎中图形模块的设计和实现原理,从而可以为本设计提供参考;通过实验探究和软件开发,可以深入了解游戏引擎中图形模块的实现方法,掌握游戏引擎开发中的一些常用方法和技巧。
高层游戏引擎——基于OGRE所实现的高层游戏引擎框架(6)高层游戏引擎——基于OGRE所实现的高层游戏引擎框架(6) 收藏零件组装:具体游戏层的构建过程框架搭完后需要一个具体的东西来证明我们的框架是否达到了预期目标。
综上,我们对这个框架的要求是:1、利用框架开发的开发者不必要关注框架的底层细节,不必要关注OGRE,只需要关注各个组分之间的逻辑关系和存在方式。
即满足框架良好的封装性。
2、上层逻辑允且只允许与框架打交道。
同时,框架中可以包含OGRE中无法绕开的重要组分。
3、如果是框架没有完成的功能,应该可以通过对框架的临时扩展很好的完成任务。
如果实在需要修改框架结构,接口也应该尽量避免改动。
即满足接口安全。
这里有一点例外,就是所未完成的功能是OGRE未实现的功能,因为这个情况需要交给OGRE的维护人员去扩展OGRE库或我们自己来扩展OGRE库。
除此之外,如果我们的测试没有完成既定目标,我可以认为自己失败了。
先看看我们的需求:1、建立一个室外场景。
即我们有一个地图体系。
2、有一个Player。
即我们有一个物件系统和起码一个物件。
3、有若干怪物,怪物具有一定的智能,这个智能我们将用挂接在怪物身上的脚本来处理。
即我们可以为怪物挂接怪物规则体系。
4、当Player杀死所有怪物的时候,游戏成功结束,否则当Player被杀死的时候游戏失败结束。
即我们为世界挂接世界规则体系。
首先我们建立Application类,其主要功能是管理应用程序运行时的所有重要组件的初始化和删除工作。
所有的Singleton单件都会在Application最开始的时候创建并分配堆内存,并在Application结束的时候销毁。
这个Application就类似于Ogre的总管Root。
而后是一些游戏层物件的准备工作,例如Player类、怪物类等等,并将这些类和类工厂注册到ObjectManager物件管理器里面去。
这些工作都是立足于扩展的,不会修改原有的代码。
游戏引擎开发实践作业指导书 第1章 游戏引擎基础概念 ............................................................................................................. 4 1.1 游戏引擎的定义与作用 ................................................................................................... 4 1.2 游戏引擎的发展历程 ....................................................................................................... 4 1.3 游戏引擎的主要模块 ....................................................................................................... 5 第2章 游戏引擎架构设计 ............................................................................................................. 5 2.1 常见游戏引擎架构模式 ................................................................................................... 5 2.1.1 分层架构模式 ............................................................................................................... 5 2.1.2 组件架构模式 ............................................................................................................... 6 2.1.3 MVC架构模式 ................................................................................................................ 6 2.2 游戏引擎核心模块划分 ................................................................................................... 6 2.2.1 图形渲染模块 ............................................................................................................... 6 2.2.2 物理引擎模块 ............................................................................................................... 6 2.2.3 引擎模块 ....................................................................................................................... 7 2.2.4 音频引擎模块 ............................................................................................................... 7 2.3 游戏引擎架构实例分析 ................................................................................................... 7 第3章 图形渲染技术 ..................................................................................................................... 7 3.1 图形渲染管线概述 ........................................................................................................... 7 3.1.1 顶点处理 ....................................................................................................................... 8 3.1.2 光栅化 ........................................................................................................................... 8 3.1.3 像素处理 ....................................................................................................................... 8 3.2 基本图形绘制方法 ........................................................................................................... 8 3.2.1 点的绘制 ....................................................................................................................... 8 3.2.2 线的绘制 ....................................................................................................................... 8 3.2.3 三角形的绘制 ............................................................................................................... 8 3.3 着色器与材质系统 ........................................................................................................... 8 3.3.1 着色器 ........................................................................................................................... 9 3.3.2 材质系统 ....................................................................................................................... 9 3.4 光照与阴影技术 ............................................................................................................... 9 3.4.1 光照模型 ....................................................................................................................... 9 3.4.2 阴影技术 ....................................................................................................................... 9 3.4.3 光照与阴影的优化 ....................................................................................................... 9 第4章 物理引擎与碰撞检测 ......................................................................................................... 9 4.1 物理引擎基础 ................................................................................................................... 9 4.1.1 物理引擎核心概念 ....................................................................................................... 9 4.1.2 常用物理引擎 ............................................................................................................. 10 4.1.3 物理引擎在游戏中的应用 ......................................................................................... 10 4.2 碰撞检测算法 ................................................................................................................. 10 4.2.1 碰撞检测算法概述 ..................................................................................................... 10 4.2.2 常用碰撞检测算法 ..................................................................................................... 10 4.3 刚体动力学 ..................................................................................................................... 11 4.3.1 刚体动力学基础 ......................................................................................................... 11
iOS9学习系列ReplayKit框架入门ReplayKit简介在iOS 9中,ReplayKit 是一款全新的框架,可谓是游戏开发者(开发商)的福音。
它可以让玩家更便捷地记录游戏进度或数据以及分享的功能。
除此之外更强大的是:ReplayKit为用户(玩家)提供了一个全功能的交互界面,用户可用它来编辑或制作自己的视频剪辑!ReplayKit不需要太大电量损耗和性能损耗就可以产出高清的视频记录。
ReplayKit支持使用A7芯片以上,操作系统为iOS 9或更高版本的设备。
您需要准备什么本教程要求您的Xcode版本为7.0以上,OS X为Yosemite(10.10.x)以上。
倘若您还想在您的设备上体验一下这个简易的工程,请确保您的设备可以满足ReplayKit所需要的软硬件要求,当然您还需在GitHub上下载工程源码。
启动录制ReplayKit框架提供了RPScreenRecorder类以及类单例方法sharedRecorder()供您进行游戏录制。
这个实例对象负责检查设备的记录功能,包括启动、停止以及丢弃记录,并可以选择启动麦克风让玩家录制真人语音解说!打开从GitHub下载的初始工程中GameViewController.swift文件。
在文件顶部,导入ReplayKit框架。
1. import ReplayKit接下来,在用户按下Start Recording按钮时调用GameViewController类中的startRecording(_:)这个方法开始录制。
1. func startRecording(sender: UIButton) {2. if RPScreenRecorder.sharedRecorder().available {3. RPScreenRecorder.sharedRecorder().startRecordingWithMicrophoneEnabled(true, handler: { (error:4.5. NSError?) -> Void in6. if error == nil { // Recording has started7. sender.removeTarget(self, action: "startRecording:", forControlEvents: .TouchUpInside)8. sender.addTarget(self, action: "stopRecording:", forControlEvents: .TouchUpInside)9. sender.setTitle("Stop Recording", forState: .Normal)10. sender.setTitleColor(UIColor.redColor(), forState: .Normal)11. } else {12. // Handle error13. }14. })15. } else {16. // Display UI for recording being unavailable17. }18. }跟着代码一步一步走。
Cocos2d-x⼊门教程(详细的实例和讲解)智能终端上的游戏⽬前风头正劲,试问哪个智能⼿机上没有⼏款企鹅公司出品的游戏呢!之前从未涉猎过游戏开发,但知道游戏开发前要挑选⼀款合适的游戏引擎,⾃⼰从头开始敲代码的时代已经out了。
在寻觅游戏引擎之前,我需要回答三道摆在我⾯前的选择题:1、2D引擎还是3D引擎?2、平台专⽤引擎还是跨平台引擎?3、收费引擎还是开源引擎?作为⼊门级选⼿,2D游戏显然更适合上⼿⼀些,另外适合果果这个年龄段的幼教类的游戏也多以2D游戏居多。
3D游戏本⾝也太难了,不仅要 Programming能⼒,还要3D建模能⼒,这些学习起来周期就太长了;⼀直是Ubuntu Fans,⼿头没有Mac Book,这样开发iOS程序变成⼀件糟⼼的事,在Ubuntu下搭建iOS App开发环境繁杂的很,即便是虚拟机也懒得尝试。
但从游戏体验来看,还是在iPad上玩更好⼀些,因此最好引擎能跨平台,以便后续迁移到iOS上;开源和⽤开源惯了,收费的引擎⽬前不在考虑范围之内。
综上,我要寻找的是⼀款开源的、跨平台的Mobile 2D Game Engine。
于是我找到了Cocos2d-x!Cocos2d-x是Cocos2d-iphone的C++跨平台分⽀,由于是国⼈创⽴的,在国内有着较⼤的⽤户群,引擎资料也较多,社区⼗分活跃。
国内已经出版了多本有关Cocos2d-x的中⽂书籍,⽐如《Cocos2d-x⾼级开发教程:制作⾃⼰的 “捕鱼达⼈”》、《Cocos2d-x权威指南》等都还不错。
更重要的是Cocos2d-x⾃带了丰富的例⼦,供初学者“临摹学习”,其中cocos2d-x-2.2.2/samples/Cpp /TestCpp这个例⼦⼏乎涵盖了该引擎的绝⼤多数功能。
下⾯就开启Cocos2d-x的⼊门之旅(For Android)。
试验环境:复制代码代码如下:Ubuntu 12.04.1 x86_64gcc 4.6.3javac 1.7.0_21java "1.7.0_21" HotSpot 64-bit Server VMadt-bundle-linux-x86_64-20131030.zipandroid-ndk-r9d-linux-x86_64.tar.bz2Cocos2d-x官⽹⽬前提供2.2.2稳定版以及3.0beta2版的下载(当然你也可以下载到更⽼的版本)。
高层游戏引擎——基于OGRE所实现的高层游戏引擎框架这是意念自己的毕业论文,在一个具体的实践之中,意念主要负责的是物件和GUI之外的其他游戏系统。
意念才学疏陋,望众位前辈不吝赐教。
由于代码质量不高、环境很难于配置、资源包过大等问题,意念暂先不提供代码和程序,未来有时间的时候组织一下这些曾经的代码,再向外发布。
文过三月,也有些新的想法,以后会慢慢跟大家聊的,欢迎拍砖哦^_^。
关键字与术语:游戏、游戏引擎、高层引擎、规则、场景、物件、Terrain(地形)、解释器、Application Framework(应用程序框架)、GUI(Graphics User Interface 图形用户界面)、Manager (在本文中特指管理器)、触发器、设计模式(Design Patterns)、Singleton(单件模式,一种设计模式,使某个类在某个程序的生存期内,有且只有一份实例,而且可以在任何时候得到这份实例。
)、Adapter(适配器模式,一种设计模式,将一个类的接口转换成客户希望的另外一个接口)、Factory(工厂模式,一种设计模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类)、Thanatos(死本能,代表恨与破坏的力量。
死本能投射于外,则表现为求杀的希望,表现为侵犯和仇恨的根源;如死本能外投受挫,则为“自杀倾向”,包括自我谴责,自我惩罚,对敌手的嫉妒和对权威的反抗等。
)、OGRE(Object-Oriented Graphics Rendering Engine)面向对象图形渲染引擎Abstract:The abstraction of game engine is an important question in game programming, a nd the kernel of the question is “How could we give the game engine more adaptability?” In the paper we attempt to deduce the form which our game engine must be from our daily-lives. With the help of OGRE, I completed the game engine which has the form that we have just deduced.The major questions of this paper are: First, why we make game engine? Second, how we make a game engine? The first question was answered in Part1, while the second in Part3. And the Preview gives us a theoretic conclusion to the second question.At the end of this paper, we used the game engine which has just been completed to make a simple game.The main idea of the paper is to take game engine as a combination of the high-level game engine and the low-level game engine. We use the high-level game engine to support game logic, and low-level game engine to support device and platform API.摘要:游戏引擎和框架的抽象一直是游戏制作中的一个关键问题,其核心问题是如何令抽象好的引擎具有更好的适应性。
游戏引擎技术研发及平台搭建方案设计第1章游戏引擎技术概述 (4)1.1 游戏引擎发展历程 (4)1.2 主流游戏引擎技术特点 (4)1.3 游戏引擎技术发展趋势 (5)第2章游戏引擎架构设计 (5)2.1 游戏引擎架构模式 (5)2.1.1 核心层插件式架构 (6)2.1.2 组件化架构 (6)2.1.3 微服务架构 (6)2.2 核心模块划分与功能描述 (6)2.2.1 渲染模块 (6)2.2.2 物理模块 (6)2.2.3 音频模块 (6)2.2.4 模块 (6)2.2.5 网络模块 (7)2.2.6 用户界面模块 (7)2.3 游戏引擎架构优化策略 (7)2.3.1 数据驱动设计 (7)2.3.2 通用模块抽象化 (7)2.3.3 功能优化 (7)2.3.4 跨平台支持 (7)2.3.5 模块化开发 (7)2.3.6 代码规范与文档 (7)第3章图形渲染技术 (8)3.1 图形渲染管线概述 (8)3.1.1 顶点处理 (8)3.1.2 图元组装 (8)3.1.3 光栅化 (8)3.1.4 片段处理 (8)3.1.5 输出合并 (9)3.2 着色器与材质系统 (9)3.2.1 着色器概述 (9)3.2.2 材质系统 (9)3.3 光照模型与阴影技术 (9)3.3.1 光照模型 (10)3.3.2 阴影技术 (10)3.4 场景管理与优化 (10)3.4.1 场景管理 (10)3.4.2 渲染优化 (10)第4章物理引擎与碰撞检测 (11)4.1 物理引擎原理与实现 (11)4.1.2 物理引擎原理 (11)4.1.3 物理引擎实现 (11)4.2 碰撞检测算法 (11)4.2.1 碰撞检测概述 (11)4.2.2 碰撞检测算法分类 (11)4.2.3 碰撞检测实现 (11)4.3 刚体动力学模拟 (12)4.3.1 刚体动力学概述 (12)4.3.2 刚体动力学原理 (12)4.3.3 刚体动力学实现 (12)4.4 软体动力学与布料模拟 (12)4.4.1 软体动力学概述 (12)4.4.2 软体动力学原理 (12)4.4.3 布料模拟实现 (12)第5章声音引擎与音效处理 (13)5.1 声音引擎架构设计 (13)5.1.1 音频输出模块 (13)5.1.2 音频解码与处理模块 (13)5.1.3 音频同步模块 (13)5.1.4 音频事件管理模块 (13)5.1.5 音频资源管理模块 (13)5.2 3D声音处理技术 (13)5.2.1 3D音频渲染技术 (13)5.2.2 声音传播模型 (13)5.2.3 多通道音频技术 (14)5.3 音效资源管理与优化 (14)5.3.1 音效资源分类与组织 (14)5.3.2 音效资源压缩与解压缩 (14)5.3.3 音效资源预加载与动态加载 (14)5.3.4 音效资源优化策略 (14)5.4 语音识别与交互 (14)5.4.1 语音识别技术 (14)5.4.2 语音交互设计 (14)5.4.3 语音识别引擎集成 (14)5.4.4 语音识别功能优化 (14)第6章网络通信与多人协作 (15)6.1 网络通信协议与架构 (15)6.1.1 通信协议选择 (15)6.1.2 网络架构设计 (15)6.2 多人协作模式与同步策略 (15)6.2.1 多人协作模式 (15)6.2.2 同步策略 (15)6.3 游戏服务器设计与优化 (15)6.3.2 服务器优化 (15)6.4 网络安全与数据加密 (16)6.4.1 网络安全策略 (16)6.4.2 数据加密 (16)第7章虚拟现实与增强现实技术 (16)7.1 虚拟现实技术概述 (16)7.1.1 发展历程 (16)7.1.2 关键技术 (16)7.1.3 应用现状 (17)7.2 增强现实技术概述 (17)7.2.1 发展历程 (17)7.2.2 关键技术 (17)7.2.3 应用领域 (17)7.3 VR/AR引擎关键技术研究 (17)7.3.1 实时渲染技术 (17)7.3.2 跟踪注册技术 (17)7.3.3 交互技术 (18)7.3.4 网络传输技术 (18)7.4 应用案例与前景分析 (18)7.4.1 应用案例 (18)7.4.2 前景分析 (18)第8章游戏人工智能 (18)8.1 游戏概述 (18)8.2 行为树与状态机 (19)8.2.1 行为树 (19)8.2.2 状态机 (19)8.3 导航与路径规划 (19)8.3.1 导航 (19)8.3.2 路径规划 (19)8.4 群体行为模拟 (20)第9章跨平台游戏引擎开发 (20)9.1 跨平台引擎技术概述 (20)9.2 游戏引擎适配策略 (20)9.2.1 统一渲染接口 (20)9.2.2 平台差异化处理 (20)9.2.3 中间语言与脚本 (21)9.3 功能分析与优化 (21)9.3.1 功能分析 (21)9.3.2 功能优化 (21)9.4 跨平台开发工具与生态 (21)9.4.1 开发工具 (21)9.4.2 生态体系 (21)第10章游戏引擎测试与优化 (22)10.1 游戏引擎测试方法与策略 (22)10.1.1 功能测试 (22)10.1.2 功能测试 (22)10.1.3 兼容性测试 (22)10.1.4 安全性测试 (22)10.2 功能分析与监控 (22)10.2.1 功能指标 (22)10.2.2 功能分析工具 (23)10.2.3 功能优化策略 (23)10.3 内存管理与优化 (23)10.3.1 内存管理策略 (23)10.3.2 内存泄漏检测 (23)10.3.3 内存优化 (23)10.4 游戏引擎安全与稳定性保障 (23)10.4.1 安全防护措施 (23)10.4.2 稳定性保障 (23)10.4.3 持续优化 (23)第1章游戏引擎技术概述1.1 游戏引擎发展历程游戏引擎作为游戏开发的核心技术,其发展历程与计算机图形学、硬件技术及游戏产业需求紧密相关。
通过前面八篇文章的学习,我们已经实现了一个Ophone平台的2D游戏引擎的各个模块了,我们也没有演示或者测试我们所完成的引擎是否可行,那么从这一篇文章开始,我们就通过一个简单的游戏实例来给大家演示如何使用该引擎来开发游戏,当然关于这个游戏的一些效果截图,大家可以回过去查看第一篇文章开始部分的内容。
游戏规则 在学习如何制作这个游戏之前,我们有必要对游戏的规则进行简单的介绍,要不然我们规则都不知道,又如何来做游戏呢?当然由于时间关系,这个游戏其实也只做了一小部分,实现了一些基本的功能,这有待完善,游戏规则是:有很多人开着一辆车去偷一家人的东西,由于车的声音比较大,只能将车停放在离房子很远的地方,然后小人要跑过去将房屋里的东西给偷出来放到车上,整个游戏场景为超过两屏的一个横版,车停在左边,房子再右边,玩家需要阻止这些人去偷东西,可以在屏幕的下方来发射不同的子弹和设置不同的陷阱来阻止小人,屏幕听不要显示时间,分数,家里的财产数,左边和右边则分别是不同类型的子弹和陷阱,小人也有5中,有跑步得,有乘滑轮的,有拉车的,拉车的一次可以拉很多东西等等,大家可以自由发挥,整个界面的布局如图9-1所示。
图9-1 游戏截图 大家现在对游戏的规则应该很清楚了,下面我们就开始捉着去实现这个游戏,我们将按照游戏的执行流程来进行设计。
游戏框架 开始做一个游戏之前,一般我们会根据需求文档和策划文档来构架整个游戏框架,大家可不要小看这个游戏框架的构建,一个好的游戏框架可以为后期的开发节省很多时间,所以这里我们也将游戏框架提出来单独一节介绍,首先看一下我们所完成的整个游戏所设计的文件类结构,如图9-2所示。 图9-2 文件目录结构 下面是这些文件分别对应的功能: com.yarin.Sticker包 Constant.java:游戏中所需要使用的一些常量,比如图层的标记等。 Sticker.java:游戏的Activity入口。 com.yarin.Sticker.Entity包(包含游戏的所有实体) Bullet.java:游戏中的子弹类 Stickers.java:游戏中的小偷类 com.yarin.Sticker.Screens包(包含游戏的所有场景) About.java:游戏关于界面 Help.java:游戏帮助界面 MainMenu.java:游戏的主菜单界面 Splash.java:游戏的logo界面 Set.java:游戏的设置界面 ReplaceLayer.java:用于移动图层 ReplaceSceneLayer.java:用于移动场景图层(特殊的图层移动) SceneLayer.java:游戏的场景图层 UILayer.java:游戏的界面图层 TransitionsCamera.java:操作摄像头相关的,该游戏中暂时没有使用 通过对该文件结构的介绍,大家应该可以猜到我们的整个游戏框架了,但是我们还是对该框架设计一个流程图,如图9-3所示。 图9-3 游戏流程图 对于该游戏框架中,我们需要说明一下,在帮助,关于,设置等界面之间的切换将使用图层之间的切换ReplaceLayer,而对于主菜单和游戏中界面(游戏开始项)将使用场景层移动ReplaceSceneLayer。 该游戏中我们为整个游戏定义了一个场景,然后将通过放入不同的图层来实现不同的界面,所以这个也算是该引擎的一个小小的缺陷,我们也正好利用这个游戏的实现来学习一下图层的移动如何实现。其实在稍后我们分析的时候,大家就会明白,其实ReplaceSceneLayer和ReplaceLayer都是在移动图层,只是ReplaceSceneLayer是比较特殊的图层移动,需要将游戏场景也一起移动,现在大家回想一下,我们的引擎中实现了场景scene之间的移动,但是没有实现图层Layer的移动,因此我们首先需要自己来实现一个图层的移动。
图层移动(ReplaceLayer) 大家都知道,我们的引擎中所定义的场景scene其实就是继承节点Node的,而我们的图层同样也是继承自节点的,所以要根据场景的移动来实现图层的移动就很简单,从前面的学习中我们知道可以使用MoveTo或者MoveBy来实现移动的动画效果,那么这里我们将使用MoveTo来给大家演示。 这里我们先看一下图层之间是如何移动的,如图9-4所示,表示正在由logo层移动到主界面层的动画。 图9-4 由logo层移动到主界面层 从图中可以看到,我们需要一个图层Layer来表示当前正在进入屏幕的图层,还需要一个图层表示当前正在退出屏幕的图层,由于是动画,所以我们还需要一个用来表示执行动画的时间,同时大家应该明白我们的图层移动方式可以是从左至右,由上至下或者是方向,因此我们需要一个变量来表示移动的方向。分析了所需要的数据,下面看看我们究竟如何实现,如代码清单9-1所示。
代码清单9-1:ReplaceLayer view plaincopy to clipboardprint? 1. //移动图层 2. public class ReplaceLayer { 3. //进入屏幕的图层 4. private Layer mInLayer = null; 5. //退出屏幕的图层 6. private Layer mOutLayer = null; 7. //动画事件 8. private float mDuration = .0f; 9. //方向 10. private int mOrientation = -1; 11. //动画结束之后的回调函数 12. private Callback mCallbac = new Callback() { 13. public void onDone(Action action) { 14. //结束之后需要移除已经退出屏幕的图层 15. Director.getInstance().getRunningScene().removeChild(mOutLayer, true); 16. //激活当前进入屏幕图层的事件操作 17. mInLayer.setAccelerometerEnabled(true); 18. mInLayer.setTouchEnabled(true); 19. mInLayer.setKeyEnabled(true); 20. } 21. }; 22. //构建动画 23. public static ReplaceLayer make(int orientation, float duration, Layer inLayer, Layer outLayer,int tag) { 24. return new ReplaceLayer(orientation, duration, inLayer, outLayer,tag); 25. } 26. 27. protected ReplaceLayer(int orientation, float duration, Layer inLayer, Layer outLayer,int tag) { 28. mInLayer = inLayer; 29. mOutLayer = outLayer; 30. mDuration = duration; 31. mOrientation = orientation; 32. 33. Director.getInstance().getRunningScene().addChild(mInLayer,Constant.LAYER_ORDER_Z,tag); 34. mInLayer.setPosition(Constant.SceneWidth, Constant.SceneHeight); 35. 36. mInLayer.setAccelerometerEnabled(false); 37. mInLayer.setTouchEnabled(false); 38. mInLayer.setKeyEnabled(false); 39. 40. mOutLayer.setAccelerometerEnabled(false); 41. mOutLayer.setTouchEnabled(false); 42. mOutLayer.setKeyEnabled(false); 43. 44. switch (mOrientation) { 45. case Constant.REPLACELAYER_ORIENTATION_UP: 46. replaceLayerUp(); 47. break; 48. case Constant.REPLACELAYER_ORIENTATION_DOWN: 49. replaceLayerDown(); 50. break; 51. case Constant.REPLACELAYER_ORIENTATION_LEFT: 52. replaceLayerLeft(); 53. break; 54. case Constant.REPLACELAYER_ORIENTATION_RIGHT: 55. replaceLayerRight(); 56. break; 57. } 58. } 59. //上方向 60. private void replaceLayerUp() { 61. IntervalAction outAction = MoveTo.make(mDuration, 0, 0, 0, Constant.SceneHeight); 62. mOutLayer.runAction(outAction); 63. 64. IntervalAction inAction = MoveTo.make(mDuration, 0, -Constant.SceneHeight, 0, 0); 65. inAction.setCallback(mCallbac); 66. mInLayer.runAction(inAction); 67. } 68. //下方向 69. private void replaceLayerDown() { 70. IntervalAction outAction = MoveTo.make(mDuration, 0, 0, 0, -Constant.SceneHeight); 71. mOutLayer.runAction(outAction); 72. 73. IntervalAction inAction = MoveTo.make(mDuration, 0, Constant.SceneHeight, 0, 0); 74. inAction.setCallback(mCallbac); 75. mInLayer.runAction(inAction); 76. } 77. //左方向 78. private void replaceLayerLeft() { 79. IntervalAction outAction = MoveTo.make(mDuration, 0, 0, -Constant.SceneWidth, 0); 80. mOutLayer.runAction(outAction); 81. 82. IntervalAction inAction = MoveTo.make(mDuration, Constant.SceneWidth, 0, 0, 0); 83. inAction.setCallback(mCallbac); 84. mInLayer.runAction(inAction); 85. } 86. //右方向 87. private void replaceLayerRight() {