精华内容
下载资源
问答
  • 安卓游戏开发
    千次阅读
    2021-09-13 13:41:54

        每种编程入门的时候总是要先去掌握一些基础知识和框架,Android游戏开发入门也是一样的,本文所讲内容为Android游戏开发入门必知的知识,希望能为有志从事Android游戏开发的朋友提供些许帮助。

           如果你有兴趣为Android平台开发游戏,有很多你需要了解的东西。我是Light Racer,Light Racer 3D以及Wixel的开发者,这些游戏目前在Android Market上有售。我以前也开发过游戏,但Light Racer是我的第一个Android应用程序,我从中学到了很多Android游戏开发知识,也愿意与诸位分享。我甚至写了一本在线的书详细介绍了Light Racer3D的开发,内容全是教你怎样做以及有用的代码片段。如果你有过游戏开发经验,那么转移到移动平台上来将不是特别困难。你主要只需学习其架构以及API就行了。如果你是一名游戏开发新手,我总结了一张列表,上面有你必需知道的东西,供你起步用。这些知识适用于很多类型的游戏,包括动作类、策略类、模拟类和益智类。  

           Android是一个基于Java的环境。这对初学者来说是个好消息,因为相对于C++,Java被广泛认为是一门更容易上手的语言,它是移动开发的规范。Google也做了一件出色的工作,它将API文档化并提供示例代码供使用。其中有个叫做API Demos的示例几乎展示了所有API的功能。如果你熟悉Java并且用过Eclipse,要让你的第一个应用跑起来那是相当简单。如果你以前从没写过代码,在你前进路上还要学习很多,但别气馁。

           准备好

           新手上路的第一步便是获取Android SDK(软件开发工具包)。SDK里有一个核心类库,一个模拟器,一些工具和示例代码。我强烈建议使用Eclipse和Android Eclipse插件。如果你玩Android的话,Eclipse IDE对Java开发者来说很好用。如果这是你第一次开发Java项目,你可能会需要下载全套JDK,它里面包括签名和部署你的应用程序的一些工具。

           理解Android应用程序架构

           别急着一头扎进开发的海洋里,理解Android应用程序架构是很重要的。如果你不学一下,你设计出来的游戏在线下将很难调试。你将需要理解Applications、Activities、Intents以及它们怎样相互联系。Google提供了很多有用的架构信息。真正重要的是要理解为什么你的游戏需要多于一个的Activity,以及什么才是设计一个有良好用户体验的游戏。要理解这些,首先要了解什么是Activity生命周期。

           掌握生命周期

           Activity生命周期由Android操作系统来管理。你的activity创建、恢复、暂停、销毁都受操作系统的支配。正确处理这些事件是很重要的,这样应用程序才能表现良好,做用户认为正确的事。在你设计你的游戏之前了解所有这些是如何工作的是件好事,因为以后你可以为自己节省调试时间和昂贵的重新设计时间。对大多数应用来说,默认的设置将工作正常,但对于游戏,你可能需要考虑将SingleInstance标志打开。当设置为默认时,Android在它认为合适时会创建activity的新实例。对于游戏来说,你可能只需要一个游戏activity的实例。这对于你要怎样管理事务的状态有些影响,但对于我来说,这解决了一些资源管理的问题,应予以考虑。

           游戏主循环

           根据你写的游戏的类型,你可能需要也可能不需要一个主循环。如果你的游戏不依赖于时间或者它仅仅对用户所做的加以回应,并且不做任何视觉上的改变,永远等待着用户的输入,那么你就不需要主循环。如果你写的是动作类游戏或者带有动画、定时器或任何自动操作的游戏,你应该认真考虑下使用主循环。

           游戏的主循环以一个特定的顺序通常尽可能多的在每秒钟内“滴答”提醒子系统运行。你的主循环需要在它自己的线程里运行,原因是Android有一个主用户界面线程,如果你不运行自己的线程,用户界面线程将会被你的游戏所阻塞,这会导致Android操作系统无法正常的更新任务。执行的顺序通常如下:状态,输入,人工智能,物理,动画,声音,录像。

           更新状态意思是管理状态转换,例如游戏的结束、人物的选择或下一个级别。很多时候你需要在某个状态上等上几秒钟,而状态管理应该处理这种延迟,并且在时间过了之后设置成下一个状态。

           输入是指用户按下的任何键、对于滚动条的移动或者用户的触摸。在处理物理之前处理这些是很重要的,因为很多时候输入会影响到物理层,因而首先处理输入将会使游戏的反应更加良好。在Android里,输入事件从主用户界面线程而来,因此你必须写代码将输入放入缓冲区,这样你的主循环可以在需要的时刻就从缓冲区里取到它。这并非难事。首先为下一个用户输入定义一个域,然后将onKeyPressed或onTouchEvent函数设为接到一个用户动作就放到那个域里,有这两步就够了。如果对于给定游戏的状态,这是一个合法的输入操作,那么所有输入需要在那一刻做的更新操作都已经定下来了,剩下来就让物理去关心怎样响应输入吧。

           人工智能所做的类似于用户在决定下一个要“按”哪个按钮。学习怎样写人工智能程序超出了这篇文章的范围,但大体的意思是人工智能会按照用户的意图来按按钮。这些也有待物理去处理和响应吧。

           物理可能是也可能不是真正的物理。对于动作类游戏来说,关键点是要考虑到上一次更新的时间、正在更新的当前时间、用户输入以及人工智能,并且决定它们朝着什么方向发展和是否会发生冲突。对于一个你可视化地抓取一些部件并滑动它们的游戏来说,物理就是这个游戏中滑动部件或者使之放入合适的位置的部分。对于一个小游戏来说,物理即使这个游戏中决定答案是错还是对的部分。你可能将其命名为其他东西,但每个游戏都有一个作为游戏引擎的红肉部分(译者注:可能是主体部分的意思),在这篇文章里,我把这部分称为物理。

           动画并非像在游戏里放入会动的gif图片那样简单。你需要使得游戏能在恰当的时间画出每一帧。这并没有听起来那么困难。保留一些像isDancing、danceFrame和lastDanceFrameTime那样的状态域,那样动画更新便能决定是否可以切换到下一帧去了。动画更新真正做的事就那么多。真正来显示动画的变化是由录像更新来处理的。

           声音更新要处理触发声音、停止声音、音量变化以及音调变化。正常情况下当写游戏的时候,声音更新会产生一些传往声音缓冲区的字节流,但是Android能够管理自己的声音,因而你的选择将是使用SoundPool或者MediaPlayer。它们都需要小心处理以免出错,但你要知道,因为一些底层实现细节,小型、低比特率的声音文件将带来最佳的性能和稳定性。

           录像更新要考虑游戏的状态、角色的位置、分数、状态等等,并将一切画到屏幕上。如果使用主循环,你可能需要使用,并做一个“推”绘制。对于其他视图,视图本身能够调用绘制操作,主循环不必处理。SurfaceView每秒产生的帧数最多,最适合于一些有动画或屏幕上有运动部件的游戏。录像更新所要做的工作是获取游戏的状态,并及时地为这个状态绘制图像。其他的自动化操作最好由不同的更新任务来处理。

           代码看起来是什么样的?这儿有个例子。

    Java代码

    1. public void run() {   
    2.  while (isRunning) {   
    3.  while (isPaused && isRunning) {   
    4.  sleep(100);   
    5.  }   
    6.  update();   
    7.  }   
    8.  }   
    9.     
    10.  private void update() {   
    11.  updateState();   
    12.  updateInput();   
    13.  updateAI();   
    14.  updatePhysics();   
    15.  updateAnimations();   
    16.  updateSound();   
    17.  updateVideo();   
    18.  }  

           3D还是2D?

           在开始写游戏之前,你要决定是做3D的还是2D的。2D游戏有一个低得多的学习曲线,一般更容易获得良好的性能。3D游戏需要更深入的数学技能,并且如果你不在意的话会有性能问题产生。如果你打算画比方框和圆圈更复杂的图形,还需要会使用3D Studio和Maya那样的建模工具。Android支持OpenGL用来3D编程,并且在OpenGL方面有很多很好的教程可供学习。

           建立简单、高质量的方法

           上手时,要确保你整个游戏不要就用一个庞大而冗长的方法。如果你遵循我上面描述的主循环模式,这将相当简单。每个你写的方法应当完成一个非常特定的任务,并且它就应该无差错地那样做。举例来说,如果你需要洗一副纸牌,你应该写一个“shuffleCards”的方法,并且该方法就应该只做这一件事。

           这是一个适用于任何软件开发的编码实践,但对于游戏开发来说这尤为重要。在一个有状态的、实时的系统里,调试将变得非常困难。使你的方法尽量的小,一般的经验法则是每个方法有且仅有一个目的(译者注:完成且仅完成一个功能)。如果你要为一个场景用编程方式画一个背景,你可能需要一个叫做“drawBackground”的方法。诸如此类的任务能够很快完成,因而你可以按照搭积木的方法来开发你的游戏,而你能够继续添加你要的功能,并且不会使得这一切难以理解。

           效率最重要!

           性能是任何游戏的主要问题。我们的目标是使得游戏的反应越快越好,看起来越流畅越好。某些方法如Canvas.drawLine比较慢。并且要将屏幕大小的位图画到主画布上,每一帧都是代价昂贵的。如何权衡对于达到最佳性能很有必要。确保管理好你的资源,使用技巧来以最少量的CPU资源完成你的任务。如果性能不好的话,即使是最好的游戏玩起来也没劲。人们一般对于游戏卡或者响应慢几乎难以容忍。

           提示和技巧

           看一下SDK中的示例LunarLander。它使用SurfaceView,富贵吧这对于一个每秒需要处理最多帧的游戏来说是合适的。如果你要做3D,示例中有GLView可以处理3D显示的很多初始化工作。对LightRacer来说,我不得不优化把所有东西都画出来这种方法,否则帧率将会大大地降低。我只在视图初始化的时候把背景画进一个位图里一次。路径放在它们自己的位图里,随着车手的前进而更新。这两个位图在每一帧里都被画进主画布中去,车手画在顶端,到最后会有一个爆炸。这种技术使得游戏运行在一个可以玩的程度。

           如果适用的话,使得你的位图的大小精确等于你打算画到屏幕上的大小,这也是个好的实践。这么做了以后就需要缩放,可以节省CPU资源。

           在游戏中始终一致的位图配置(如RGBA8888)。这将会通过减少不同格式之间转换的时间来节省图形库的CPU时间。

           如果你决定开发3D游戏但没有3D方面的知识,你需要挑选一两本3D游戏编程方面的书并学习线性代数。你最少要理解点积、叉积、向量、单元向量、法线、矩阵和变换。这方面我遇到的最好的书是叫《3D游戏编程和计算机图形学数学》。

           声音文件要小而且低比特率。需要加载的越少,加载速度越快,游戏所需内存越少。

           声音使用OGG文件,图片使用PNG文件。

           确保释放所有媒体播放器,当Activity销毁时空出所有的资源。这能保证垃圾收集器清除了所有东西,也能保证在两次游戏开始之间没有内存泄露。

           加入Android谷歌小组,寻求社区支持。这里有人可以在开发过程中给你帮助。

           最重要的是,花时间测试再测试,确保每一小部分都如你所愿地工作。改善游戏是整个开发中最耗时最困难的部分。如果你匆匆将其推向市场,你很可能会使用户们失望,你会感到你的努力都白费了。你不可能使所有人都喜欢你写的东西,但你至少要尽量发布你最高质量的作品。

           Google在这里有帮助你上手的绝佳的文档。

           在Light Racer 3D开发日志可以找到可工作的示例代码和指导。

           想要开始Android游戏开发学习的朋友是不是已经知道需要学习哪些基础知识了?开发Android游戏的思路和重点也渐渐明确了吧?那就赶快加入Android游戏开发队伍吧。

    更多相关内容
  • Android游戏开发

    2018-12-07 15:46:43
    作者: 杜剑主编 出版社: 华南理工大学出版社 ISBN: 9787562352419 出版时间: 2017-05 版次: 1 装帧: 其他 开本: 16开
  • Android游戏开发手册(The Android Game Developer's Handbook)-2016年英文原版,0积分——Discover an all in one handbook to developing immersive and cross-platform Android games.
  • 安卓游戏开发教程

    2018-08-29 09:36:35
    实用的学习安卓游戏开发视频教程,实用的学习安卓游戏开发视频教程。
  • Android游戏开发方向游戏全程实战开发(飞行射击类游戏+RPG游戏开发)
  • android 因此,我们启动并运行了我们的Android应用程序,但是您可能想知道哪种类型的应用程序正是游戏。 我会尽力让您了解它。 下图显示了游戏架构。 Android手机上的游戏架构 在上面的架构中,您可以看到...
    android

    android

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

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

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

    用户输入

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

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

    游戏逻辑

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

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

    音讯

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

    图形

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

    我们以每秒帧数表示的FPS测量渲染。 如果我们有30FPS,则意味着我们每秒显示30张图像。 对于30 FPS的移动设备来说,这是很棒的,我们将为此目标。 稍后对此进行更多讨论。

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

    输出量

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

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

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

    不要忘记查看我们的新Android游戏ArkDroid (以下屏幕截图) 。 您的反馈将大有帮助!
    相关文章:

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

    android

    展开全文
  • Android游戏安卓游戏源码45款合集: 21点游戏源码.rar Angle v1.0.ZIP Barrage_OpenGLES.rar Billiard_2D.zip catcake-0.9.5-android.tar.gz Chess.rar Crackedcarrot.rar CrazyFootBall.zip EggGame.rar Elose-wr....
  • 精通android游戏开发

    2018-12-03 21:05:44
    精通android游戏开发
  • Android游戏开发实践指南 工业出版社出版 高清扫描版
  • Android游戏开发之旅.pdf
  • Android游戏开发大全
  • android游戏开发的具体流程.doc
  • Android 游戏开发工具包 (AGDK)

    千次阅读 2021-07-15 09:28:45
    谷歌在昨日举办的游戏开发者大会上推出了Android 游戏开发工具包 (AGDK),这是一套完整的工具和库,用于帮助开发者开发、优化和交付高质量的 Android 游戏。 下载地址:https://developer.android.com/games/agdk ...

    谷歌在昨日举办的游戏开发者大会上推出了 Android 游戏开发工具包 (AGDK),这是一套完整的工具和库,用于帮助开发者开发、优化和交付高质量的 Android 游戏。

    下载地址:https://developer.android.com/games/agdk

    据介绍,AGDK 关注性能问题,减少了 Android 生态中的碎片化问题,并旨在迎合未来操作系统更新所提供的增强功能,同时尽可能提供向后兼容性。AGDK 的特性会遵循以下三个原则:

    • 为游戏开发而构建。所有的库都使用 C 或 C++ API 进行构建和测试,并考虑性能问题
    • 减少碎片化。AGDK 工具和库适用于许多不同的 Android 版本,大多数这些功能都支持当今使用的几乎所有设备
    • 由 Android 构建,适用于 Android。未来的 Android 平台更新会增强功能,AGDK 的这些库会尽可能提供向后兼容性

    现在的版本尚处于初始阶段,专注于涵盖三个主要领域:集成工作流、提供 C/C++ 游戏库和性能优化。

     

    展开全文
  • 资源名称:Android游戏开发技术实战详解 内容简介:《Android游戏开发技术实战详解》详细讲解了Android游戏开发技术的基本知识。《Android游戏开发技术实战详解》内容新颖、知识全面、讲解详细,《Android游戏开发...
  • 安卓Android源码——基于JBox2D的安卓Android游戏开发全源码.zip
  • Android游戏开发

    2013-03-08 10:33:01
    Android游戏开发
  • Android游戏开发教程

    2020-04-02 11:38:05
    令我们惊讶的是,他维护了一个名为“ Against The Grain ”的博客,该博客讨论了Android平台的游戏开发。 从那时起,我一直在阅读他的所有文章,我必须承认,他的著作对我和我在Java Code Geeks的同事们来说是一种...
    几个月前,我们收到了来自Java开发人员Tamas Jano的电子邮件,要求加入我们的JCG合作伙伴计划。 令我们惊讶的是,他维护了一个名为“ Against The Grain ”的博客,该博客讨论了Android平台的游戏开发。 从那时起,我一直在阅读他的所有文章,我必须承认,他的著作对我和我在Java Code Geeks的同事们来说是一种灵感和动力,因此可以开始为Android平台开发我们的第一个游戏。

    通过这篇文章,我想向我们的社区介绍Tamas的工作,希望您会像我们一样受到启发和激励!

    接下来是Tamas的介绍性文章的一部分,标题为“ 一点动机,所有这些背后的想法是什么。 ”“我相信,阅读该书后,您会意识到(就像我一样)与这个人有很多共同点!

    首先,我不认识对游戏不感兴趣的程序员。 有些人喜欢节奏缓慢的人,而户外极客(是的,他们的确存在)会与任何需要所有这些反射力的类型一起走下去,而有些反射力是不会发展的。 在他们生活的某个时刻,他们可能想知道这到底是怎么做的? 做这样的事情不是很酷吗? 我很乐意那样做。

    因此,他们进入了创建自己拥有和指挥的世界的热情,推动了计算的发展。 在过去的日子里,您会在街机上看到这些家伙,在计算机实验室中闲逛,梦想着拥有一台可以在其上创建宇宙的宏伟机器。 我说的是80年代。

    许多人参加了这些课程,经历了所有与将来获得学位无关的必要工作。 有些人毕业了,并且在“跨国软件公司”工作,并有体面的工作,他们在一家跨国公司工作,知道什么。 但是这些所谓的工程师中有一部分梦想着玩游戏。 他们拥有最新的小玩意,但没有使他们能够制作游戏的一件事:时间。 工作9-5很烂,许多人有家庭或其他义务,但他们仍然考虑在旁边做项目。 不幸的是,许多人甚至从未开始过。

    有多少想法:男人……我将打造最伟大的游戏,我将变得富有而出名。 然后,他们遇到一个人,必须找到一份工作来“安顿下来”,并为他们晚上去的某个地方支付账单,以便在第二天开始崩溃。 所有这一切都通过做无聊的Web工作或在一个由经验不足的半智半熟的架构师wannabe设计的巨大的多线程分布式企业应用程序的一小部分上进行,他想成为公司的工作是因为他是实习生。

    您十年前梦想做的游戏在哪里?

    确切地说,我处在类似的情况下,虽然我在一家游戏公司做短暂的演出,但在竞争中遥遥领先。 我决定再尝试一次,我会尝试一下。 为什么? 只是为了说明问题,演示游戏的构建简单,并且您可以坐在计算机旁玩一些乐。 实际上,这就是为什么我最终选择编码器,使游戏不配置某些框架的原因(是的,这不是编程,主要是配置)。

    好吧,对吗? 我希望我是!

    正如我之前告诉您的那样, Java Code Geeks忙于为Android平台开发我们的第一款游戏。 为了从现在开始包含所有与游戏相关的文章,创建了一个名为“ Android Games ”的新类别。

    最后但并非最不重要的一点是,我们建立了一个新部门,即JCG StudiosJust Cool Games Studios ),在此我们将介绍和推广所有游戏。

    如果您通过检查我们的拳头游戏ArkDroid来支持我们,我们将非常乐意

    方舟机器人


    您不会因为年龄变大而停止比赛。 你变老是因为你停止玩了!

    拜伦


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

    展开全文
  • 安卓游戏编程入门参考书《Android游戏开发入门》,全英文,美国-Mario Zechne
  • Android中,则把Canvas当做画布,只要我们借助设置好的画笔(Paint类)就可以在画布上绘制我们想要的任何东西;另外它也是显示位图(Bitmap类)的核心类。随用户的喜好,Canvas还可设置一些关于画布的属性,比如,画布...
  • Android 游戏开发工具扩展包 (AGDE) 为您介绍 Android 游戏开发工具扩展包 (AGDE) 的主要功能、工作流和示例。
  • 请支持正版书籍,本资源只作研究使用。 吴老师的书,内容丰满,由浅入深,实例丰富,讲解详细。适合android初学者,有java基础的读者,在职开发人员等学习研究。
  • 本书以Android手机游戏的开发为主题,结合真实的游戏案例向读者详细介绍了Android平台下游戏开发的整个流程,同时在游戏开发的介绍过程中还分享了作者多年积累的开发技巧与经验。
  • 安卓Android源码——基于JBox2D的安卓Android游戏开发全源码.rar
  • 本文为大家分享了Android游戏开发之碰撞检测,供大家参考,具体内容如下 矩形碰撞 原理: 两个矩形位置 的四种情况 不是这四中情况 则碰撞 圆形碰撞 原理: 利用两个圆心之间的距离进行判定.当两个圆心的距离小于半径...
  • Android应用源码之基于JBox2D的Android游戏开发全源码.zip项目安卓应用源码下载Android应用源码之基于JBox2D的Android游戏开发全源码.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3...
  • Android游戏开发实战宝典》 pdf 图书 百度云网盘。。。。
  • 教程名称: 千锋Android游戏开发基础视频教程(10集)【】千锋Android游戏开发基础视频教程-大纲【】千锋Android游戏开发基础视频教程01~02【】千锋Android游戏开发基础视频教程03~04【】千锋Android游戏开发基础...
  • 【Android】 《Android游戏开发实战宝典》 《Android游戏开发实战宝典》

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 125,963
精华内容 50,385
关键字:

安卓游戏开发