Android游戏开发–基本游戏架构

因此,我们启动并运行了我们的Android应用程序,但您可能想知道哪种类型的应用程序正是游戏。 我会尽力让您了解它。 下图显示了游戏架构。
Android手机上的游戏架构

在上面的架构中,您可以看到Android操作系统在Phone上运行,并在此之上运行一切。

在我们的案例中,输入是触摸屏,但如果手机配备了麦克风,摄像头,加速度计甚至是GPS接收器(如果配备),它可以是物理键盘。 当通过上一篇文章的“活动”中使用的“视图”触摸屏幕时,框架公开事件。

用户输入

在我们的游戏中,这是通过触摸两个定义的控制区域之一中的屏幕生成的事件。 (请参阅第1步 -彩色圆圈)。 我们的游戏引擎监视onTouch事件,每次触摸时我们都会记录坐标。 如果坐标在屏幕上定义的控制区域内,我们将指示游戏引擎采取措施。 例如,如果在指定移动我们的家伙的圆圈中发生触摸,则引擎将得到通知,并指示我们的家伙移动。 如果触摸武器控制圈,将指示装备的武器发射子弹。 所有这些转化为改变受我们的手势(即输入)影响的演员状态。

我刚刚描述了下面的游戏逻辑部分。

游戏逻辑

游戏逻辑模块负责更改游戏中参与者的状态。 演员是指每个具有状态的对象。 我们的英雄,机器人,地形,子弹,激光束等。例如,我们触摸图中的英雄控制区域的上半部分,这转化为:根据我们的运动控制器的位置计算家伙的运动速度(我们的手指)。

在上方的图像中,浅绿色的圆圈代表我们的手指触摸控制区域。 用户输入模块通知游戏引擎(游戏逻辑),并提供坐标。 dxdy是相对于控制器圆心的距离(以像素为单位)。 游戏引擎会计算必须为我们的英雄设置的新速度以及他将要移动的方向。 如果dx为正,则表示他将向右移动;如果dy为正,则他还将向上移动。

音讯

考虑到当前状态,此模块将产生声音。 由于几乎每个演员/对象都会以不同的状态发出声音,并且由于我们将运行游戏的设备仅限于几个通道(这意味着该设备一次可以播放多少个声音),因此必须决定哪个听起来很有趣。 例如,当我们想引起注意时,会听到对我们的英雄构成最大威胁的机器人,当然,我们需要为我们的武器的超棒射击声保留一个通道,因为聆听爆炸声时非常有趣。 简而言之,这就是音频。

图形

这是负责将游戏状态呈现到显示器上的模块。 这可以很简单,就像直接在从视图获得的画布上绘图一样,或者在其中绘制一个单独的图形缓冲区,然后将其传递给可以是自定义视图或OpenGL视图的视图。

我们以FPS(每秒帧数)衡量渲染。 如果我们有30FPS,则意味着我们每秒显示30张图像。 对于移动设备,每秒30 FPS很棒,因此我们将为此目标。 稍后再详细介绍。

您现在唯一想知道的是,FPS越高,动画越平滑。 想象一下有人走了,闭上你的眼睛一秒钟。 睁开眼睛后,一秒钟后您会看到该人处于该位置。 这是2FPS。 看着他们走路,但睁大眼睛,您会看到流畅的动作。 保证最低为30FPS,但可能会更高,具体取决于您的眼睛。 如果您在原始状态下有很棒的受体,则可能是80-100甚至更多。

输出量

如果我们决定产生一些声音,则输出是声音和图像以及振动的结果。

接下来,我们将设置视图,并尝试进行第一个游戏循环,该循环将从触摸屏获取输入。 我们将拥有第一个游戏引擎。

参考:来自我们的JCG合作伙伴Tamas Jano的基本游戏架构 ,来自“ Against The Grain ”博客。

不要忘记查看我们的新Android游戏 ArkDroid (以下屏幕截图) 。 您的反馈将大有帮助!
相关文章:
  • Android游戏开发教程简介
  • Android游戏开发–游戏创意
  • Android游戏开发–创建项目
  • Android游戏开发–基本游戏循环
  • Android游戏开发–使用Android显示图像
  • Android游戏开发–在屏幕上移动图像
  • Android游戏开发–游戏循环
  • Android游戏开发–测量FPS
  • Android游戏开发–雪碧动画
  • Android游戏开发–粒子爆炸
  • Android游戏开发–设计游戏实体–策略模式
  • Android游戏开发–使用位图字体
  • Android游戏开发–从Canvas切换到OpenGL ES
  • Android游戏开发–使用OpenGL ES显示图形元素(原语)
  • Android游戏开发– OpenGL纹理映射
  • Android游戏开发–设计游戏实体–状态模式
  • Android游戏文章系列

翻译自: https://www.javacodegeeks.com/2011/07/android-game-development-basic-game.html

你可能感兴趣的:(游戏,android,unity,游戏开发,java)