1. GameObject
GameObject是游戏内物体的基类,派生出Castle(关卡结束时的城堡)、Coin(硬币)、Spring(弹簧)、DynamicGameObject(动态物体)。
DynamicGameObject又派生出Bob(玩家角色)、Platform(用来跳跃的踏板)、Squirrel(松鼠敌人)。
这几个类型都没有任何涉及Render的函数,算是数据和表现的分离。
其中GameObject本身只有两个成员变量:Vector2 position和Rectangle bounds,三种静态物体类Castle、Coin和Spring也很简单,只有Coin多出一个成员变量float stateTime,想必是作动画计时用(当玩家角色触碰硬币后,硬币要播放一个动画)。
DynamicGameObject多出两个成员变量:速度和加速度。
Bob的有三种逻辑状态:BOB_STATE_JUMP(上升ing)、BOB_STATE_FALL(下落ing)、BOB_STATE_HIT(被小松鼠击中,即死亡状态)。
它还有一个update成员函数,在其中刷新速度、坐标、上升或下落状态的切换。还有三个成员hitSquirrel, hitPlatform, hitSpring分别用在与松鼠、踏板、弹簧发生碰撞时调用。
Platform有两种类别:PLATFORM_TYPE_STATIC(静止踏板)、PLATFORM_TYPE_MOVING(会左右移动的踏板)。
有两种逻辑状态:PLATFORM_STATE_NORMAL(普通状态)、PLATFORM_STATE_PULVERIZING(正在碎裂的状态)。
它也有一个update函数,在其中刷新速度、坐标。还有一个pulverize函数用在开始碎裂时调用(主角踩过踏板之后,踏板即开始碎裂)。
2.Game和Screen
先看Screen,它一共有以下几种具体派生类:GameScreen(游戏界面)、HelpScreen(帮助界面,还有HelpScreen2,3,4,5)、HighscoreScreen(最高分界面)、MainMenuScreen(主菜单界面)。
Game继承自ApplicationListener,有一个派生类SuperJumper。
Screen有Game game的引用,Game也有当前激活的界面Screen screen的引用。
在游戏界面需要切换回主菜单界面时,就要调用game.setScreen
Screen定义了五个虚函数,update, present, pause, resume, dispose。
而Game,拥有引擎提供的create, resume, render, resize, pause, dispose事件响应函数。
Game::create中,通过getStartScreen来初始化screen,这里的getStartScreen也是个虚函数,SuperJumper::getStartScreen里会实现该函数并返回MainMenuScreen,使游戏一开始时进入主菜单界面。
Game::render中,先调用screen.update对游戏中的物体和角色的属性进行刷新,再调用screen.present进行显示。
GameScreen(游戏界面)有一个World world的引用,在GameScreen::update中,会调用world.update来刷新整个场景,然后还会根据world.state来改变GameScreen::state的值。
而World类,就是整个游戏场景的管理者。它维护着所有GameObject类的实例,包括玩家主角、踏板、松鼠、钱币、城堡等。在World::generateLevel中会随机生成场景中的踏板、松鼠、钱币。在World::update中会刷新所有动态Obj的状态、坐标、速度等属性。
GameScreen(游戏界面)还有一个WorldRender render的引用。在GameScreen::present中调用render.render,来渲染整个场景。
GameScreen中还有一个OrthographicCamera guiCam用来渲染UI,而WorldRender中有一个OrthographicCamera cam用来渲染场景。
在处理用户输入时,superjumper的做法很简单,把鼠标点击或触屏的坐标点通过guiCam.unproject转换到UI空间坐标,然后检测这些坐标是否在指定UI的矩形范围内。
分享到:
相关推荐
libgdx demo 大全 经典android,完整的官方libgdx的demo,涉及所有模块的一个效果展示,希望能帮助学习libgdx的同学们。
#Learning LibGDX游戏开发-第二版 这是Packt发布的的代码库。 它包含从头到尾完成本书所必需的所有支持项目文件。 ##说明和导航所有代码都组织在文件夹中。 每个文件夹均以“章”开头,然后是“章号”。 例如,第2...
libgdx游乐场 libgdx-playground允许您开始使用[libGDX framework]( )。 它也可以用作开始开发游戏的模板。 基本项目结构已使用[gdx-setup.jar UI]( )创建。 下载/克隆后,您可以将其导入到您的IDE( )中: ...
libgdx_demo 导入渐变
少写,多创造 什么是TurboX? TurboX是基于libGDX的项目的支持库,其中提供了使用此库开发游戏时可能需要的常用实用程序。 实际上,这只是我在游戏中使用的通用库,但已向社区... < artifactId>turbox</ artifactId>
1.LibGdx的官方Demo 2.使用Eclipse编译 3.包含各种一般的使用示例
Libgdx 演示 - Superjumper Super Jumper 是一个非常简单的 Doodle Jump 克隆。 在这里试试 跑步 克隆存储库或下载并解压缩 ZIP 文件 将项目导入您喜欢的开发环境,运行、调试和打包!
开发demo libgdx demo 学习游戏引擎的一个初步模板
搭建开发环境的实例:libgdx demo
NULL 博文链接:https://qingfei.iteye.com/blog/1261976
libgdx-测试libgdx 的测试
Learn to design and create video games using the Java programming language and the LibGDX software library. Working through the examples in this book, you will create 12 game prototypes in a variety ...
模板libgdx 模板项目
概括 这是的,该使用进行容器和池化。 为了使Artemis更加健壮,有效... < artifactId>gdx-artemis</ artifactId> < version>0.5</ version> </ dependency> 快照 启用快照存储库 < repositories> < repository> <
LibGDX插件LibGDX的附件,简化游戏开发Gradle插件 :简化libgdx项目的设置; :使用所有资产文件名创建一个Assets类; :添加Packr任务以将JVM与游戏捆绑在一起; :将Aseprite文件导出到spritesheet。LibGDX库 :...
libgdx着色器 借助libGDX简化着色器和帧缓冲区使用的工具 libgdx-shaders受到极大启发,并通过添加Gradle支持和通过适当的资产加载来改进该项目。 一个简单的例子: // loading shaders ShaderManager ...
libGDX3DTest 一些使用 libgdx 的 3D 测试感谢提供 libGDX 3D 教程!
Box2DLights 卡勒Hameleinen的Box2DLights是2D照明框架用途用于光线投射和OpenGL ES 2.0渲染。 该库旨在与一起使用。 尝试Kalle的游戏来查看运行中的库。 特征 任意灯数 ... <dependency> <g
libgdx-食谱 学习 Libgdx 游戏开发手册
乙炔 Etyl是 (用Java制造的2D...如何开始克隆或下载导入到您喜欢的IDE 玩得开心Maven<dependency> <groupId>com.harium.etyl</groupId> <artifactId>etyl</artifactId> <version>1.4.6</version></dependency>本地罐子