位置: 编程技术 - 正文

我是如何从0开始,在23天里完成一款Android游戏开发的 – Part6– 第15至第17天(什么是从零开始)

编辑:rootadmin

推荐整理分享我是如何从0开始,在23天里完成一款Android游戏开发的 – Part6– 第15至第17天(什么是从零开始),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:如何从0开始赚钱,如何从0开始赚钱,从零开始怎么写,我是如何从0开始做到年入1000+万的创业笔记,从0开始,我是如何从0开始做到年入1000+万的创业笔记,从0开始,我是如何从0开始做到年入1000+万的创业笔记,内容如对您有帮助,希望把文章链接给更多的朋友!

第天: Android“后退”按钮、主菜单、固定坐标bug

还记得第天屏幕坐标和鼠标点击射击不到外星人的问题吗?是的,那都是我的错。幸运的是这让我及时发现了很多下载游戏的Android用户屏幕分辨率并不是×。在那之前我是这样直接转换触摸坐标到实际坐标:

1float x = Gdx.input.getX() - f;2float y = - Gdx.input.getY();

这不是正确的做法。简单恰当的办法是通过GDX进行转换 :

1Vector3 touchPos;2touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0);3camera.unproject(touchPos);

在Android上处理“返回”按钮

大多数网上的例子在处理“返回”按钮时都谈到重载KeyDown方法。不幸的是这种办法要求使用Stage,我没有这么做。我知道现在的代码里复制了很多Actor和Stage,但那不重要。在下一个项目里我才会使用Stage。

幸运的是,我找到了解决办法。只要在Game子类的create()函数里添加下面函数:

1Gdx.input.setCatchBackKey(true);

然后在render()方法中检查否已经按下“返回”按钮:

1if (Gdx.input.isKeyPressed(Keys.BACK))2{3 Gdx.app.exit();4}

由于render()每秒钟会被调用很多次,你可能需要一个boolean标记变量来检测“返回”按钮是否已释放。

1if (backReleased && Gdx.input.isKeyPressed(Keys.BACK))2{3 backReleased = false;4 Gdx.app.exit();5}6else7{8 backReleased = true;9}

现在可以进入游戏,进入商店菜单,然后返回主菜单。当然,菜单只显示选项,还没有真正实现功能。

使用9-patch处理动态大小的按钮和容器

译注:9-patch一个对png图片做处理的工具,能够为生成一个“*.9.png”的图片实现部分拉升。

我还学会了如何使用9-patch创建漂亮的按钮。有一次,我意识到不得不像绘制个大小不同的选项按钮,但样子基本上一模一样只有里面的内容不同。我甚至参考了Gdx按钮,但最终还是决定自己DIY一个。在我游戏里,按钮有一些特殊需求,在一个文本按钮里要结合了2张图、4个文本以及2种不同字体。

无论如何,我得画一个包括所有按钮尺寸和其他的东西的× 9-patch图片,然后写一些代码定制其他覆盖在图片上面的东西。我在构造函数里通过TextureRegion从大皮肤里提取9-patch。减掉了一个皮肤开关。

通过这种处理使我得以有各种不同的选择来填充主菜单,同时我还加入了滚动字幕给出玩法提示。我真的很喜欢这个概念,但很少有游戏使用它。有的游戏只显在一开始的时候有个提示。也许他们不想让玩家看主菜单时分心吧。

下面是购买强化道具的商店菜单:

强化道具

关于道具我又有了一些新点子。一种是可以暂时让外星人减速,另一种是在短时间内积分x5。我正在考虑移除之前商店里的“双倍积分”道具。有些玩家真的很能得高分,所以这可能是一个坏主意。

另一方面,在下次装弹前能增加射速的道具可能会大受欢迎,所以我正在加入。

我希望商店能保持只有7个道具,这样就能刚好在一个屏幕内显示。但现在我不肯定所有可能的升级……拭目以待吧。

我是如何从0开始,在23天里完成一款Android游戏开发的 – Part6– 第15至第17天(什么是从零开始)

第天:从GDX游戏中录制影片

视频地址:www.youtube.com/embed/RUypvT8I?rel=0

我曾想过在YouTube上传游戏视频,然后用recordmydesktop程序录制,但结果一团糟。由于libGDX和RMD不同步,我在屏幕上看到的是一堆零件,诸如被切掉了一半的精灵等等。我搜索了一下发现了几篇有用的文章。基本上都是将每帧做成一个PNG文件然后组成视频。可以想见这么做会耗费大量的磁盘空间,这对我不是大问题。我发现了一个很有用的帖子:

*h*4个字节的内存。在×的屏幕上,每一帧大约需要1.5MB!

同时,处理帧率(跳帧)的代码没有怎么优化。处理过程跳过了几个文件号,这没什么问题。但同时还给每帧还创建了对应的ScreenShot对象,这完全没有必要。譬如你正在录制fps的视频而游戏运行速率是fps,你花了一半的时间在创建完全用不到的对象上。

最后,FPS处理代码&#;乎没有释放像素图。所以如果你运行了很长的时间,RAM会被吃光。

所以,我从ScreenShot类里提取出了全部的FPS代码,剩下的代码只负责处理连续视频。我还注意到一些变量有初始化但从未使用过。现在ScreenShot类变得更加直观并且易于理解:

1public class ScreenShot implements Runnable2{3 private static int fileCounter = 0;4 private Pixmap pixmap;5 6 @Override7 public void run()8 {9 saveScreenshot(); } public void prepare() { getScreenshot(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false); } public void saveScreenshot() { FileHandle file = new FileHandle("/tmp/shot_"&#; String.format("%d", fileCounter&#;&#;) &#; ".png"); PixmapIO.writePNG(file, pixmap); pixmap.dispose(); } public void getScreenshot(int x, int y, int w, int h, boolean flipY) { Gdx.gl.glPixelStorei(GL.GL_PACK_ALIGNMENT, 1); pixmap = new Pixmap(w, h, Pixmap.Format.RGBA); Gdx.gl.glReadPixels(x, y, w, h, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, pixmap.getPixels()); }}

好了,全部就这么多。我在渲染循环中的每个渲染结尾加上了:

1ScreenShot worker = new ScreenShot();2worker.prepare(); // grab screenshot3executor.execute(worker); // delayed save in other thread

考虑到完整性,在Screen的子类添加了executor:

1private ExecutorService executor;2...3executor = Executors.newFixedThreadPool();

现在,在我的酷睿2已经赶不上帧率了。这是好消息,一方面因为游戏速度变慢我能够录下更好的视频,另一方面能更好地记录截图以供稍后导出视频。所以我添加了一个截图热键。在按住S键时开始录制,当你只是记录了一些有趣的片段,松开S键让PNG writer赶上进度。当CPU的负荷恢复到正常,意味着PNG都生成好了,你可以再次开始录制。

这种方式创建的视频很容易编辑。只要删除不需要的PNG文件,用剩下的压制视频即可。而且这种方法也很容易与音乐同步,因为可以随意添加或删除帧。

用截图生成YouTube视频

由于Android屏幕默认分辨率是×,而最接近YouTube的分辨率是 x。因此需要将图像缩放到× ,以保持宽高比。这样两边会多出很多未使用的面积。你可以把你的logo、广告贴上去,甚至可以并排显示两个视频。我决定用另一段视频填补空白,那是我用一台手持设备拍摄的,所以图像更小只有×。

现在,我创建了一个大小×包含了logo的静态图像。现在我把它混合进游戏,并垂直翻转。在Linux上,我使用这样的命令:

1for i in shot*png; do echo $i; convert $i -flip -filter Lanczos -resize x temp1.png; composite temp1.png back.png -geometry &#;&#; $i; done

一旦所有的图像都准备就绪,就可以运行MEncoder来导出视频。YouTube建议p的视频采用H.&#;式和以上的比特率 。他们还建议两个B帧(RGB)。这里是执行的命令:

1mencoder -mf w=:h=:fps=:type=png -ovc x -audiofile music.mp3 -oac copy -o movie.avi -xencopts bitrate=:bframes=2:subq=6:frameref=3:pass=1:nr=

这样就生成了一个质量过硬的YouTube游戏视频。在这篇文章的开始,你可以看到我的成果。至于音频,我只是提取了一些游戏的音轨并没有捕捉实际游戏中的音频。

第天:Android图标、完成道具

我喜欢Android允许(甚至建议)图标不是圆角矩形。这样可以赋予游戏自己的个性风&#;。起初,我考虑过给这游戏做一个特殊的图标,但我真的非常非常喜欢这个画着外星人像素图形的盾。我用Inkscape制作,这样就可以输出任意大小的图片(而不像在GIMP下制作的其他一些图形)。献上Drone Invaders官方图标:

丰富的道具

下面的视频显示所有收藏的强化道具:

我是如何从0开始,在天里完成一款Android游戏开发的 – Part8– 第至第天 第天:Android游戏的商业化我做这个游戏只是一个尝试,没指望它挣很多的钱。游戏可以免费下载,如果你愿意可以购买游戏里的金币。我喜欢这种类

Android游戏开发十日通(7)- 开发一个双人游戏 提要游戏需要分享才能获得快乐,想想你以前玩过的那些游戏,那些会是真正地存在你婶婶的脑海里?是独自一人躲在被窝里酣战PSP,还是和哥们在网

全网最全的Android游戏源码汇总 全网最全的Android游戏源码汇总,无需任何分、币、豆免费下载,不断持续更新中,献给那些在奋斗路上的兄弟们。。。。。Android雷电游戏源码

标签: 什么是从零开始

本文链接地址:https://www.jiuchutong.com/biancheng/371199.html 转载请保留说明!

上一篇:我是如何从0开始,在23天里完成一款Android游戏开发的 – Part7– 第18至第20天(从零开始咋样)

下一篇:我是如何从0开始,在23天里完成一款Android游戏开发的 – Part8– 第21至第23天(怎样从零开始)

  • 账面价值与计税基础一般会产生差异的是
  • 单独确认进项税额的情形
  • 工程会计税率
  • 印花税征税范围是什么
  • 消费税的计算方法有哪三种
  • 其他权益工具影响哪些报表
  • 个人收到拆迁补偿款缴税吗
  • 有限合伙企业应当
  • 银行销户余额取现怎么做分录
  • 工会福利费列支范围
  • 房地产企业利息资本化条件有哪些
  • 房产原值怎么计算房产面积
  • 一般借款资本化加权平均数
  • 未取得发票列支成本违反法律
  • 管理费用销售费用
  • 定额发票2019年规定
  • 利润表里的营业成本包括哪些
  • 出租柜台收取的服务费
  • 公司代缴个人社保费怎么做账
  • 建筑公司收到的劳务费怎么做账
  • 加工费计入成本怎么计算所得税
  • Win11 Build 22454.1000 开发者预览版发布(附更新修改已知问题+安装)
  • 公司招的兼职员工怎么报个税
  • 代收消费税计算
  • windows7旗舰版好用吗?
  • vue3自定义指令
  • 售后回购怎么做账务处理
  • 收到工程款怎么做账务处理
  • php魔术函数
  • 进项发票过期了怎么办
  • 票折怎么操作
  • api接口使用方法
  • 酒类包装物押金的增值税处理规定
  • 怎样网上抄税
  • 节日购买什么礼物发放职工
  • 累计折旧怎么做账
  • 所得税费用该怎么算
  • 管理费用的是
  • 预付账款借贷方余额
  • 保修期间免费提车可以吗
  • 装修费用进什么科目
  • 餐厅的租金是多少钱一个月
  • 过路费属于会计哪个科目
  • 首先要知道什么英语
  • 暂估收入怎么做分录
  • 新建公司需要什么
  • sql语句实例大全
  • centos7安装mysql并jdbc测试教程
  • openstack 创建云主机,计算节点磁盘不足
  • ubuntu14.4安装教程
  • pps是什么文件
  • win7系统开启无线服务
  • Ubuntu系统怎么设置root
  • 苹果MAC电脑怎么玩圣安地列斯
  • Win8系统网络SSID怎么设置?Win8设置网络SSID的方法
  • win8.1怎么设置自动关机
  • windowsxp的开始菜单
  • centos minio
  • windows关机音乐
  • 微软win8.1
  • 对象转化为字符串的几种方式
  • jquery虚拟dom
  • dos内部命令大全
  • 使用js如何创建元素
  • 简略说明本岗位最高风险的防范措施和现场处置方案
  • win安装nodejs
  • jquery.form.js下载
  • 收集和整理的区别
  • 北京税务总局
  • 国家税务局通用机打发票查询
  • 国家税务总局江西省国家税务局
  • 按时交纳党费
  • 北京增值税普通发票图片
  • 公务员中了彩票怎么领取
  • 开票信息不一致怎么回事
  • 纳税申报的期限是多少年
  • 2021年江苏省考常州职位表
  • 国税官网登录
  • 福建电子税务局社保缴费操作
  • 会计审计和税务服务属于什么税目
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设