ADM-201 dump PMP dumps pdf SSCP exam materials CBAP exam sample questions

如何用java写你的第一个安卓游戏 – 译学馆
未登录,请登录后再发表信息
最新评论 (0)
播放视频

如何用java写你的第一个安卓游戏

How to write your first Android game in Java

如果你想制作一个安卓游戏 有许多方式
最正式的方式应该是使用java
和Android studio从头开始制作
我会演示如何创建一个基础工程或是展示一个在屏幕上反弹的小精灵
以此为基础 你就可以制作一个游戏或任何你感兴趣的项目
沏一壶茶 我们来尝试一下
我假设你已经安装好了Android studio
继续 填上这些内容 我们就可以创建一个新项目了
我起名为二维游戏 你可以随便起
但要选择“Empty Activity”
因为你不需要FAB按钮等多余的东西
或是玩游戏时被XUI挡住
一旦你做完了这些 我们还要做一些修改
首先把“appcompatActivity”改为“Activity”
现在我要让游戏全屏
你可能常用以XML定义布局和视图位置的应用
我们不会用这些 所以要把这一行中setContentView的内容
改为“new GameView(this)”
这里要引用一个我们稍后会创建的类
开发一个2维游戏需要做两件事 你可能还不清楚
一个线程和一个画布
线程就像程序中的一条平行岔路
它们可以同时运行 同时执行多个任务 而不会减慢速度
并且不用一个个按顺序依次运行
所以我们可以一边处理代码 一边显示图像
还可以同时做其他事 而不会减慢速度
同时画布会显示图像
这很像真实世界中的画布
我们可以在画布表面画画 可以放置位图
还可以画矩形以及其他各种东西
我们会为每件东西创建一个类 线程用来运行画布
这样我们就可以更新图像而不用减缓其他操作的速度
SurfaceView类会拥有画布
你可以把它想象成画架
有了这些想法 接下来我们就需要创建新类了
我们会从canvas或者叫SurfaceView开始
我把它称作GameView
在窗口左边右击该应用的包名 然后选择“New” “Class”
命名为GameView
在Superclass一栏填“android.view.SurfaceView”
这里意味着从SurfaceView继承方法
换句话说 那些为了创建SurfaceView而需要做的事
我们的类也可以做到
SurfaceView是父类
Interface这一栏写“android.view.SurfaceHolder.Callback”
你应该会看到像这样的东西
每个类都有构造函数 它是用来创建该类的对象的
这是创建视图的代码 通过调用super函数
我们调用了父类SurfaceView
回调使我们能监听事件
我们要重写部分来自父类的函数
这就是说我们可以控制它们 决定它们被调用时要做什么
现在空着就可以
先把这那些放一边“炖”一会儿
我们现在来创建处理线程的类
右击 新建一个类 就像上次一样 这个类叫主线程
它的父类是Thread
再次说明 要有构造函数 它会调用super函数
本例中就是引用Thread
基本上这就像有一个洗盘子的脚本
它被叫做洗碟机
或者是一个洗衣服的脚本 它被称作妻子
但这可能会有点问题
下面一部分可能有点复杂 我们要重写run函数
这是游戏主循环所在的地方
这个循环会不断重复 每次循环中都会锁定画布
然后调用一个方法去更新角色和元素的位置
然后调用一个方法画出新的图像 这些方法都在GameView中 我们一会儿会加上
在画图之前 我们需要把画布锁定
以防多个线程同时尝试在画布上作图
setRunning函数用来设置布尔值isRunning 它是一个变量 只能为true或false
这会告诉程序已经准备好了 我们稍后会处理这里
try和catch语句块用来处理它们可能出现的错误
java在编译时需要你这么做
到目前为止一切都很好 现在我们有了创建surface或者叫canvas的类
我们也有了创造线程的类
问题是线程还没开始 所以现在程序什么也做不了
我们需要回到GameView类 把它们启动
我们要在构造函数中创建一个线程实例
记住类可以创建对象
这行代码new MainThread会创建一个新线程来运行游戏
我们会在surfaceCreated里添加代码来运行线程
然后我们在surfaceDestroyed里添加代码来停止线程
可能要多试几次才能停止 所以我们加一个带try-catch语句块的循环
为了稍后节省时间 我加上一个空的update函数 它用来运行计算过程
我已经重写了draw方法 它是用来画图像的
激动人心的部分是真正运行这个游戏以及看到它制作的过程
你可以把程序加载到手机或使用模拟器 然后点击play
这非常振奋人心 它只是一个空屏幕
但是一个有无限可能的空屏幕
我们真正想做的是在上面放一些图像
这就是我们接下来要做的
幸运的是 这很简单
我们需要做的就是在GameView中的draw方法中添加一些代码
从而能够在画布上画图
这不是最好的方法 在这里创建对象 在内存方面并不高效
代码结构也没有很好组织
高效的多的方法是创建单独的类
来处理游戏世界里所有这些不同的对象
这样也可以很好的组织代码结构
当你要在屏幕上加载东西时
只有读取大量代码后才能看到效果
这意味着一条重要消息:我们需要新类
我们从CharacterSprite类开始
正如你们所想的那样 它是用来在屏幕上显示我们的角色用的
创建这个新类 加上这些代码
这个类基本上就是显示从GameView传过来的位图
所以你需要把这些代码添加到GameView类
我要加载位图及其他资源 我用的是我先前游戏中的一张旧精灵图
它是我上学时画在笔记本上的图 叫BB
当然你可以用任何你喜欢的或你恰好现在有的图片
点击play 你应该可以在屏幕上看到位图了 真是令人激动啊
大多数好游戏都会有一些运动 这样才有意思
谢天谢地 这也非常简单
我们只需要在update方法中添加一些计算代码
所以我要在CharacterSprite类中加上update方法
它会被GameView中的update方法调用
我们也要把位图的固定坐标用变量代替
这样我们只需随时间增加y就可以让你的角色在屏幕上下移
记住x和y坐标分别是从左到右和从上到下
按下play 你的角色就会在屏幕上缓慢下移
激动人心
我们来综合一下
我不会讲述其中的细节 但这段代码会使小精灵在遇到屏幕的阻挡时反弹回来
就像以前的windows屏保一样 它有神奇的催眠作用
如果你停下视频 或者从文章中获得代码 读一遍 你就会发现 它是很有逻辑性的
你就能理解它到底做了什么 就不用我深入讲解了
按下play 你就可以看到小精灵在遇到屏幕的阻挡时会反弹回来
要表现出这些效果 你只需要把计算代码放到update方法中
把小精灵或其他图放到draw方法中
当然现在它不太像游戏 这只是一个小精灵在屏幕上移动
如果你想让它更像一个游戏 可能需要涉及到用户的输入
幸亏这处理起来也非常简单
你需要做的就是重写GameView中的onTouchEvent方法
它使你能够获得用户触摸屏幕时的坐标
然后你就可以进行各种操作了
你可以让其中一个精灵移向那个点 也可以远离那个点
或者你可以检查用户是否触摸了指定的图形元素 从而触发事件
这样你就了解了完成整个游戏的基本原理
显然 这个游戏还是很简单
如果你查看文章的话 就可以看到我做了深入钻研来加快运行速度和优化处理过程
我会告诉你如何为你的游戏增加一个FPS计数器 并且以特定的速度获取游戏性能
如果你觉得这些非常有趣 可以给我们点赞 这对我们很有帮助
如果你有问题 可以写在评论区 我会尽量回答
如果你想要完整的文章以及教程 可以查看描述中的链接
包括所有的代码和每一步的指引
你查看的时候 就会被我们的文章 测评以及特性介绍专栏吸引
因为我们是一切关于安卓的来源

发表评论

译制信息
视频概述

本视频介绍了使用java和android studio一步步完成一个小游戏的基本过程。

听录译者

收集自网络

翻译译者

[B]hugue

审核员

A

视频来源

https://www.youtube.com/watch?v=6prI4ZB_rXI

相关推荐