在游戏过程过程中,常常需要对某些数据进行保存,以确保下次运行时能够正确读取。如游戏中的金币、道具、游戏分数、已通过的关卡等。

Libgdx中常用的数据保存方式有Preferences和XmlReader。

1. Perferences

Preferences常用来保存一些较短的、使用较频繁的值。

put存入值,存完之后需要flush。

实例:

         Preferences preferences = Gdx.app.getPreferences( "pre1.test" );
preferences.putString( "name", "Kitty" );
preferences.putBoolean( "visible", true );
preferences.putInteger( "age", );
preferences.flush(); String strName1 = preferences.getString( "name" );
boolean isVisible = preferences.getBoolean( "visible" );
int age1 = preferences.getInteger( "age" );

2. XmlReader

XmlReader能够读取xml文件,不过此时只能读取,不能写入。

使用Element.get()获取child或者元素的值,示例:

         try{
XmlReader xmlReader = new XmlReader( );
Element eleRoot = xmlReader.parse( Gdx.files.internal( "xml/1.xml" ) );
Element eleStu = eleRoot.getChildByName( "student" ); String strName2 = eleStu.get( "name" );
boolean isMale = eleStu.getBoolean( "male" );
int age2 = eleStu.getInt( "age" );
strShow2 = strName2 + " " + isMale + " " + age2;
}
catch(IOException e){
e.printStackTrace();
}

3. XmlWriter

XmlWriter能够将Xml的值写入到StringWriter中,然后写入到xml文件中进行保存。

其中.enimate()方法创建子元素,.text()方法插入元素值,.attribute()方法插入元素属性。

示例:

         try{
stringWriter = new StringWriter();
//stringWriter.append( "" );
XmlWriter xmlWriter = new XmlWriter( stringWriter );
xmlWriter.element("information")
.element( "person" ).attribute( "id", "0201" )
.element("name").text("Nacy").pop()
.element("hobby").text("basketball").pop()
.element("age").text("34").pop()
.pop()
.pop();
xmlWriter.close();
FileHandle file = Gdx.files.local( "set.xml" );
file.writeString( stringWriter.toString(), false );
System.out.println( stringWriter.toString() );
}
catch(IOException e){
e.printStackTrace();
}

完整代码:

 package com.fxb.newtest;

 import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter; import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Preferences;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.utils.XmlReader;
import com.badlogic.gdx.utils.XmlReader.Element;
import com.badlogic.gdx.utils.XmlWriter; public class Lib013_XmlReader1 extends ApplicationAdapter{ //XmlReader reader;
//Element element;
BitmapFont font;
String strShow1, strShow2;
SpriteBatch batch;
StringWriter stringWriter;
String configFileName = "xml/3.xml"; @Override
public void create() {
// TODO Auto-generated method stub
super.create(); font = new BitmapFont();
font.setColor( Color.BLACK );
batch = new SpriteBatch(); Preferences preferences = Gdx.app.getPreferences( "pre1.test" );
preferences.putString( "name", "Kitty" );
preferences.putBoolean( "visible", true );
preferences.putInteger( "age", 25 );
preferences.flush(); String strName1 = preferences.getString( "name" );
boolean isVisible = preferences.getBoolean( "visible" );
int age1 = preferences.getInteger( "age" );
strShow1 = strName1 + " " + isVisible + " " + age1; try{
XmlReader xmlReader = new XmlReader( );
Element eleRoot = xmlReader.parse( Gdx.files.internal( "xml/1.xml" ) );
Element eleStu = eleRoot.getChildByName( "student" ); String strName2 = eleStu.get( "name" );
boolean isMale = eleStu.getBoolean( "male" );
int age2 = eleStu.getInt( "age" );
strShow2 = strName2 + " " + isMale + " " + age2;
}
catch(IOException e){
e.printStackTrace();
} try{
stringWriter = new StringWriter();
//stringWriter.append( "" );
XmlWriter xmlWriter = new XmlWriter( stringWriter );
xmlWriter.element("information")
.element( "person" ).attribute( "id", "0201" )
.element("name").text("Nacy").pop()
.element("hobby").text("basketball").pop()
.element("age").text("34").pop()
.pop()
.pop();
xmlWriter.close();
FileHandle file = Gdx.files.local( "set.xml" );
file.writeString( stringWriter.toString(), false );
System.out.println( stringWriter.toString() );
}
catch(IOException e){
e.printStackTrace();
} } @Override
public void render() {
// TODO Auto-generated method stub
super.render();
Gdx.gl.glClearColor( 1, 1, 1, 1 );
Gdx.gl.glClear( GL10.GL_COLOR_BUFFER_BIT ); batch.begin();
font.draw( batch, strShow1, 100, 150 );
font.draw( batch, strShow2, 100, 100 );
font.drawMultiLine( batch, stringWriter.toString(), 100, 300 );
batch.end(); } @Override
public void dispose() {
// TODO Auto-generated method stub
super.dispose();
} }

运行结果:

Libgdx学习记录14——数据保存Preferences,XmlReader的更多相关文章

  1. 【学习记录】C#保存数据至CSV文档 & DateTime格式模式控制解释

    数据类的定义: public class Result_Display { private string id; public string ID { get { return id; } set { ...

  2. oracle学习之数据库数据保存成文件

    常常需要将数据库中的数据生成文档,由于比较喜欢脚本的方式,所以就需要使用spool的时候进行格式设置,以下简单整理了一下oracle中进行格式设置的一些东西,一共十八条,其实常用的也就那么几个,稍后会 ...

  3. 学习记录 java session保存用户登录

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. libgdx学习记录2——文字显示BitmapFont

    libgdx对中文支持不是太好,主要通过Hireo和ttf字库两种方式实现.本文简单介绍最基本的bitmapfont的用法. 代码如下: package com.fxb.newtest; import ...

  5. libgdx学习记录3——动画Animation

    libgdx动画采用Animation实现,即通过帧动画实现. 代码如下: package com.fxb.newtest; import com.badlogic.gdx.ApplicationAd ...

  6. libgdx学习记录26——Polygon多边形碰撞检测

    libgdx中Math封装了Polygon这个类,它是由多个定点进行描述实现的,在进行物体间的碰撞时,物体轮廓有时候是不规则的,这时候可以用一个多边形勾勒出其大概的轮廓,对其进行模拟. Polygon ...

  7. libgdx学习记录22——3d物体创建

    libgdx是一个强大的游戏框架,不仅支持2d部分,同时还支持3d部分. libgdx的3d部分投影主要通过PerspectiveCamera实现. 物体的显示过程: 1. 创建远景相机,角度一般设为 ...

  8. libgdx学习记录20——多线程MultiThread资源处理

    在libgdx中,一般的逻辑流程都在rende()函数中执行,这个函数是由opengl的渲染线程调用的,一般的图形显示和逻辑处理都在这个线程中. 一般情形下,在这个线程中处理就行了.但是当某些逻辑处理 ...

  9. libgdx学习记录19——图片动态打包PixmapPacker

    libgdx中,opengl 1.x要求图片长宽必须为2的整次幂,一般有如下解决方法 1. 将opengl 1.x改为opengl 2.0.(libgdx 1.0版本后不支持1.x,当然不存在这个问题 ...

随机推荐

  1. Net Core通用主机项目报错 程序不包含适合于入口点的静态Main

    Net Core通用主机的介绍: https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/host/generic-host?view=as ...

  2. ubuntu下给raspy pi2 编译qt5库

    交叉编译时,通常要准备mkspec, 参考: http://wiki.qt.io/Building_Qt_for_Embedded_Linux mkspec包含两个文件: qmake.conf- Th ...

  3. 使用SQL Server Management Studio操作replication时,要用机器名登录,不要用IP地址

    如果你在使用SSMS(SQL Server Management Studio)登录SQL Server时,使用的是IP地址,如下图所示: 当你操作replication时,会报错: 从上面的错误提示 ...

  4. Android图形显示之硬件抽象层Gralloc【转】

    https://blog.csdn.net/yangwen123/article/details/12192401 FrameBuffer驱动程序分析文中介绍了Linux系统下的显示驱动框架,每个显示 ...

  5. [Spark Core] Spark 实现气温统计

    0. 说明 聚合气温数据,聚合出 MAX . MIN . AVG 1. Spark Shell 实现 1.1 MAX 分步实现 # 加载文档 val rdd1 = sc.textFile(" ...

  6. 一个汇编的HelloWorld!

    花了一下午时间,感觉最坑的是,书写代码的个数和编译器的坑比较多,还各种版本的编译器! 会让人“眼花缭乱”! 主要代码 将文件保存为*.asm include io32.inc .data ;数据 sr ...

  7. [BZOJ 1135][POI2009]Lyz

    [BZOJ 1135][POI2009]Lyz 题意 初始时滑冰俱乐部有 \(1\) 到 \(n\) 号的溜冰鞋各 \(k\) 双.已知 \(x\) 号脚的人可以穿 \(x\) 到 \(x+d\) 的 ...

  8. SQL Server:INFORMATION_SCHEMA.columns 与sys.columns 与 syscolumns对比

    sys.columns视图 sys.columns是SQL Server从2005版本起引入的新的系统级视图.相关链接如下: Mapping SQL Server 2000 System Tables ...

  9. Hash Tables

    哈希表 红黑树实现的符号表可以保证对数级别的性能,但我们可以做得更好.哈希表实现的符号表提供了新的数据访问方式,插入和搜索操作可以在常数时间内完成(不支持和顺序有关的操作).所以,在很多情况下的简单符 ...

  10. tarjan【模板】缩点

    传送门:https://www.luogu.org/problemnew/show/P3387 首先呢,tarjan找一个图的强连通分量是基于对图的dfs的.这中间开了一个dfn[]代表dfs序,还有 ...