libgdx开发各种记录,对客户端开发一窍不通:
1.发现libgdx开发的游戏场景有内存泄露的情况,一开始以为是某些性能问题.但是没有仔细查找原因.
后来打开jvirtualvm,查看什么对象在不停的增长.结果发现Texture 在不停的被创建.说明有地方在不停的加载贴图资源? 想不出什么原因.然后通过排除法一个stage 一个actor 的排除.最终定位在一个 "血条"的actor实现上.
不会画血条,代码是从网上copy的.
public void draw(SpriteBatch batch, float parentAlpha) { Pixmap pixmap = new Pixmap(64, 8, Format.RGBA8888); //生成一张64*8的图片 pixmap.setColor(Color.BLACK); //设置颜色为黑色 pixmap.drawRectangle(0, 0, titleWidth, pixHeight); //绘制边框 Texture pixmaptex = new Texture(pixmap); //生成图片 TextureRegion pix = new TextureRegion(pixmaptex, titleWidth, pixHeight); //切割图片 batch.draw(pix, this.getX(), this.getY() + this.titleHeight + this.margin); //绘制 }
这里每帧都创建一次Texture 并且没有销毁. 不应该每帧都 进行一次这种逻辑.而是血量发生变化才create Texture. 客户端开发应该注意这种问题.
2.我喜欢用arrayList,而libgdx大量的运用了自己实现的 Array.看了下注释.是说删除的时候如果不需要保持顺序能避免内存拷贝. 对于需要对list进行添加 删除的地方能起到一个优化作用.
3.显示FPS
@Override public void act() { super.act(); fpsLabel.setText("FPS:" + Gdx.graphics.getFramesPerSecond()); }
fps本身就是每帧就要刷新一次.写法倒是没问题.但是出于上面问题1的忧虑.我看了下 setText方法.结果发现在这里作者有一个优化过程:
public void setText (CharSequence newText) { if (newText instanceof StringBuilder) { if (text.equals(newText)) return; text.setLength(0); text.append((StringBuilder)newText); } else { if (newText == null) newText = ""; if (textEquals(newText)) return; text.setLength(0); text.append(newText); } invalidateHierarchy(); }
如果是StringBuilder对象则直接比较是否需要重新绘制.对比普通的CharSequence 比较方法有一个优化的提升.
4.中文问题
输入中文问题还没处理过,中文文件名.文件中文字符问题 有一些重写方法.
作者的一些读取文件方法采用的是ISO-8859-1 编码. 所以该重写就重写. 中文文件名 android直接不支持 .所以不要取中文的文件夹和的名称
5.读取文件夹问题.
很多人可能没这个必要.但是如果你的资源文件很多.例如一个文件夹里面有一堆的音频文件.
办法A,在代码里面一个名字一个名字的写读取方法.
办法B,读取文件夹.然后listFiles().
选择方法B的时候,你就会遇到一个读取文件夹问题.android里面读取文件夹 list()方法会返回空数组.读不到子文件夹列表.但是把文件夹读取会得到一个子文件名的字符串.然后通过分割来知道文件夹内有哪些文件.
在桌面程序导出为jar则不能读取文件夹.经过不懈的努力.我发现把文件夹放在jar同级目录.然后通过
Gdx.files.local 可以顺利读取.
6.int与float
客户端最好用浮点数计算.因为会产生微小的变化而被int给约去.遇到一个奇怪的问题,计算与预期有偏差.不过很快就排查出来是int类型约去的小数点.
7.api问题.
作者提供了部分api,最好都看看
例如
static public final int random (int range) { return random.nextInt(range + 1); }
这个就是产生 0-n 而不是0-n-1的随机数.
8.该重写的就重写
例如TmxMapLoader 不支持ImageLayer
TextureAtlas不支持根据名字前缀查找.就重写实现.
9.字体问题.
字体问题没搞明白 字体大小和颜色问题.BitmapFont 应该算是一个普通图片来显示对应文字.
相关推荐
在这个“libGDX学习记录(三) 接水滴源码”中,我们将深入探讨如何使用libGDX来构建一个简单的游戏——接水滴。这个例子可能是为了教授初学者基本的游戏逻辑、动画处理和用户交互。 在libGDX中,游戏的核心通常由`...
libGDX是一个强大的开源Java框架,专为跨平台游戏开发设计。这个压缩包"Drop.zip"包含的是一个基于libGDX的游戏项目,名为"接水滴",它提供了欢迎界面和计分系统,是一个很好的学习libGDX入门的实例。在深入探讨这个...
**libGDX学习记录(二)完整源码 水果落地** libGDX是一个开源的游戏开发框架,专为跨平台游戏设计,支持Windows、Linux、Mac OS X、Android以及HTML5。它提供了丰富的功能,包括图形渲染、音频处理、输入管理、...
LibGdx是一个强大的开源游戏开发框架,用于创建跨平台的游戏,包括Android、iOS、桌面以及WebGL等。在LibGdx中,TiledMap是一个重要的组成部分,它允许开发者使用Tiled Map Editor创建和管理2D游戏地图。TiledMap...
LibGDX是一个强大的开源游戏开发框架,它允许开发者使用Java语言构建跨平台的游戏应用。在这个名为"Klooni1010-master"的项目中,我们看到的是一个类似于经典游戏俄罗斯方块的实现,但增加了拖动组合和消除得分的...
总的来说,"libgdx-nightly-20110809.zip"是一个反映LibGDX早期开发状态的快照,它展示了该框架在游戏开发中的核心组件和结构。虽然现在有更现代的版本可用,但对于了解LibGDX的历史和发展,以及如何在早期版本中...
LibGDX纹理打包工具3.2.0是用于游戏开发的一款高效且强大的资源管理软件,主要针对LibGDX游戏框架。LibGDX是一款开源的Java游戏开发库,它提供了跨平台的游戏开发支持,包括Android、iOS、桌面系统(Windows、Mac、...
首先,我们来看"AUTHORS"、"CONTRIBUTORS"这两个文件,它们记录了LibGDX项目的主要作者和贡献者。在开源社区中,这些信息至关重要,因为它们体现了项目的社区基础和开发力量。了解这些开发者和他们的贡献,有助于...
LibGDX 是一个开源的游戏开发框架,用于创建跨平台的游戏应用。它支持Windows、Linux、Mac OS X、Android以及HTML5等平台。在 LibGDX 中实现游戏摇杆功能是游戏控制的重要一环,尤其对于移动设备上的游戏,虚拟摇杆...
《移植Java游戏开发框架LibGDX到Android平台的深度解析》 LibGDX,一个强大的开源游戏开发框架,以其跨平台特性和丰富的功能在Java开发者中广受欢迎。它允许开发者用一套代码同时创建桌面版、Android版、iOS版以及...
LibGDX是一个强大的开源游戏开发框架,用于创建跨平台的游戏。在LibGDX中,日志功能对于调试、性能分析和记录游戏运行时信息至关重要。本文将深入探讨LibGDX的日志系统及其应用。 首先,LibGDX的日志功能主要依赖于...
本项目名为"Node.js-一个GLES2自上而下的赛车游戏构建在libgdx和Box2D之上",它巧妙地将Node.js与移动游戏开发框架libgdx和物理引擎Box2D结合,为我们展示了一个独特的游戏开发范例。 首先,让我们深入了解libgdx。...
Libgdx是一个强大的开源游戏开发框架,它支持多平台开发,包括Android、iOS、桌面(Windows、Linux、Mac)以及WebGL。这个项目的目标是利用Java语言和Libgdx的强大功能,重新实现Moai-pixel-runner游戏的所有特性和...
在Android Studio中运行LibGDX的Demo,是学习和开发游戏的起点。本文将详细介绍如何在Android Studio中设置和运行这个经过验证的LibGDX Demo。 一、环境准备 首先,确保你已经安装了Android Studio,这是一个基于...
在IT行业中,LibGDX是一个广泛使用的开源游戏开发框架,主要针对Java语言,但同时也支持其他 JVM 语言如 Kotlin 和 Scala。它提供了跨平台的能力,让开发者能够一次编写,到处运行,覆盖桌面、移动设备以及网页等多...
LibGDX 是一个开源的游戏开发框架,主要支持Java语言,同时也提供对Kotlin等其他 JVM 语言的支持。这个“libgdx-boilerplate”项目,正如其标题所言,是针对LibGDX游戏开发的一个通用代码模板,旨在帮助开发者快速...
将libgdx-design-editor集成到Java项目中,首先需要确保你的开发环境配置了Java开发工具包(JDK)和Maven或Gradle构建系统。然后,可以通过添加libgdx-design-editor的依赖到项目的构建文件中,具体取决于你是使用...
通过版本控制,可以方便地管理代码变更,协同开发,并记录项目进展。 总结来说,这个项目涵盖了Java编程基础、libGDX游戏框架、网络编程、游戏设计和文档编写等多个方面,是全面锻炼和提升个人综合能力的理想平台。...
CannonGame是一款由Java编程语言开发的游戏,它充分利用了libGDX这一强大的跨平台游戏开发框架。libGDX是一个免费且开源的库,支持开发者创建桌面、移动以及网页端的游戏。在本项目中,游戏的设计灵感来源于KiloBolt...
LibGDX-Utils 该存储库包含多个用于处理日常问题的实用程序。 随意克隆或分叉它并窃取您认为有用的任何东西! 可以在以下位置找到此存储库中代码的详细说明、文章或教程:LibgdxUtils 主类,它是应用程序的入口点。 ...