libgdx demo 分析:<superjumper>

本文深入探讨了游戏开发中的关键概念,如 GameObject、Game 和 Screen 的作用,以及它们如何协同工作以创建动态的游戏环境。重点介绍了 GameObject 类型、Game 和 Screen 的核心功能和交互流程,包括游戏角色的行为逻辑、游戏界面的切换以及整个游戏场景的管理。同时,文章还详细解释了如何通过屏幕更新、呈现、暂停和恢复等功能,以及游戏场景与游戏世界之间的互动,实现游戏的流畅运行和用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的矩形范围内。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值