`
aa87963014
  • 浏览: 154509 次
  • 性别: Icon_minigender_1
  • 来自: 布尼塔尼亚
社区版块
存档分类
最新评论

libgdx开发记录

 
阅读更多

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 应该算是一个普通图片来显示对应文字.

 

 

 

0
0
分享到:
评论

相关推荐

    libGDX学习记录(三) 接水滴源码 Drop.zip

    在这个“libGDX学习记录(三) 接水滴源码”中,我们将深入探讨如何使用libGDX来构建一个简单的游戏——接水滴。这个例子可能是为了教授初学者基本的游戏逻辑、动画处理和用户交互。 在libGDX中,游戏的核心通常由`...

    libGDX学习记录(三)项目源码 接水滴(欢迎界面及计分器) Drop.zip

    libGDX是一个强大的开源Java框架,专为跨平台游戏开发设计。这个压缩包"Drop.zip"包含的是一个基于libGDX的游戏项目,名为"接水滴",它提供了欢迎界面和计分系统,是一个很好的学习libGDX入门的实例。在深入探讨这个...

    libGDX学习记录(二)完整源码 水果落地

    **libGDX学习记录(二)完整源码 水果落地** libGDX是一个开源的游戏开发框架,专为跨平台游戏设计,支持Windows、Linux、Mac OS X、Android以及HTML5。它提供了丰富的功能,包括图形渲染、音频处理、输入管理、...

    LibGdx TiledMap地图处理工具

    LibGdx是一个强大的开源游戏开发框架,用于创建跨平台的游戏,包括Android、iOS、桌面以及WebGL等。在LibGdx中,TiledMap是一个重要的组成部分,它允许开发者使用Tiled Map Editor创建和管理2D游戏地图。TiledMap...

    libgdx游戏源码-方块填充

    LibGDX是一个强大的开源游戏开发框架,它允许开发者使用Java语言构建跨平台的游戏应用。在这个名为"Klooni1010-master"的项目中,我们看到的是一个类似于经典游戏俄罗斯方块的实现,但增加了拖动组合和消除得分的...

    libgdx-nightly-20110809.zip

    总的来说,"libgdx-nightly-20110809.zip"是一个反映LibGDX早期开发状态的快照,它展示了该框架在游戏开发中的核心组件和结构。虽然现在有更现代的版本可用,但对于了解LibGDX的历史和发展,以及如何在早期版本中...

    LibGDX纹理打包工具3.2.0

    LibGDX纹理打包工具3.2.0是用于游戏开发的一款高效且强大的资源管理软件,主要针对LibGDX游戏框架。LibGDX是一款开源的Java游戏开发库,它提供了跨平台的游戏开发支持,包括Android、iOS、桌面系统(Windows、Mac、...

    安卓Android源码——libgdx-0.9.6.zip

    首先,我们来看"AUTHORS"、"CONTRIBUTORS"这两个文件,它们记录了LibGDX项目的主要作者和贡献者。在开源社区中,这些信息至关重要,因为它们体现了项目的社区基础和开发力量。了解这些开发者和他们的贡献,有助于...

    libgdx 游戏摇杆

    LibGDX 是一个开源的游戏开发框架,用于创建跨平台的游戏应用。它支持Windows、Linux、Mac OS X、Android以及HTML5等平台。在 LibGDX 中实现游戏摇杆功能是游戏控制的重要一环,尤其对于移动设备上的游戏,虚拟摇杆...

    移植java游戏开发框架libgdx到Android平台.zip

    《移植Java游戏开发框架LibGDX到Android平台的深度解析》 LibGDX,一个强大的开源游戏开发框架,以其跨平台特性和丰富的功能在Java开发者中广受欢迎。它允许开发者用一套代码同时创建桌面版、Android版、iOS版以及...

    libgdx Logging

    LibGDX是一个强大的开源游戏开发框架,用于创建跨平台的游戏。在LibGDX中,日志功能对于调试、性能分析和记录游戏运行时信息至关重要。本文将深入探讨LibGDX的日志系统及其应用。 首先,LibGDX的日志功能主要依赖于...

    Node.js-一个GLES2自上而下的赛车游戏构建在libgdx和Box2D之上

    本项目名为"Node.js-一个GLES2自上而下的赛车游戏构建在libgdx和Box2D之上",它巧妙地将Node.js与移动游戏开发框架libgdx和物理引擎Box2D结合,为我们展示了一个独特的游戏开发范例。 首先,让我们深入了解libgdx。...

    libgdx-pixel-runner:moai pixel runner的Libgdx端口

    Libgdx是一个强大的开源游戏开发框架,它支持多平台开发,包括Android、iOS、桌面(Windows、Linux、Mac)以及WebGL。这个项目的目标是利用Java语言和Libgdx的强大功能,重新实现Moai-pixel-runner游戏的所有特性和...

    androidstudio可运行libgdx的demo

    在Android Studio中运行LibGDX的Demo,是学习和开发游戏的起点。本文将详细介绍如何在Android Studio中设置和运行这个经过验证的LibGDX Demo。 一、环境准备 首先,确保你已经安装了Android Studio,这是一个基于...

    libgdx项目,json 还原为 csd

    在IT行业中,LibGDX是一个广泛使用的开源游戏开发框架,主要针对Java语言,但同时也支持其他 JVM 语言如 Kotlin 和 Scala。它提供了跨平台的能力,让开发者能够一次编写,到处运行,覆盖桌面、移动设备以及网页等多...

    libgdx-boilerplate:LibGDX 游戏的通用代码

    LibGDX 是一个开源的游戏开发框架,主要支持Java语言,同时也提供对Kotlin等其他 JVM 语言的支持。这个“libgdx-boilerplate”项目,正如其标题所言,是针对LibGDX游戏开发的一个通用代码模板,旨在帮助开发者快速...

    libgdx-design-editor

    将libgdx-design-editor集成到Java项目中,首先需要确保你的开发环境配置了Java开发工具包(JDK)和Maven或Gradle构建系统。然后,可以通过添加libgdx-design-editor的依赖到项目的构建文件中,具体取决于你是使用...

    这是大一暑假java实训的一个项目——一个基于libGDX的联网小游戏.zip

    通过版本控制,可以方便地管理代码变更,协同开发,并记录项目进展。 总结来说,这个项目涵盖了Java编程基础、libGDX游戏框架、网络编程、游戏设计和文档编写等多个方面,是全面锻炼和提升个人综合能力的理想平台。...

    CannonGame:基于KiloBolt.com教程使用libGDX的Java游戏

    CannonGame是一款由Java编程语言开发的游戏,它充分利用了libGDX这一强大的跨平台游戏开发框架。libGDX是一个免费且开源的库,支持开发者创建桌面、移动以及网页端的游戏。在本项目中,游戏的设计灵感来源于KiloBolt...

    libgdx-utils:一些实用程序可帮助解决许多开发人员在使用 LibGDX 时遇到的基本问题

    LibGDX-Utils 该存储库包含多个用于处理日常问题的实用程序。 随意克隆或分叉它并窃取您认为有用的任何东西! 可以在以下位置找到此存储库中代码的详细说明、文章或教程:LibgdxUtils 主类,它是应用程序的入口点。 ...

Global site tag (gtag.js) - Google Analytics