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

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. window平台搭建Hudson服务器

    1.1    环境 Microsoft Windows server 2008 x64 1.2    资源下载 TortoiseSVN-1.7.11.23600-x64-svn-1.7.8.msi h ...

  2. Oracle EBS GL 会计科目报错 GL_ACCESS_SET_LEDGERS

    1.会计科目设置后,总账中找不到对应账簿                                           2.原因是新版本系统物化视图有问题,参照metalink解决方案得知原路径 ...

  3. 转:把存储过程结果集SELECT INTO到临时表

    把存储过程结果集SELECT INTO到临时表   在开发过程中,很多时候要把结果集存放到临时表中,常用的方法有两种.   一. SELECT INTO  1. 使用select into会自动生成临 ...

  4. vue2.0模拟锚点

    在vue项目中,因为采用路由跳转,会导致无法使用常规的a标签配合ID的锚点功能. 解决办法: <a href="javascript:void(0)" @click=&quo ...

  5. python第二十九课——文件读写(readline()和readlines()的使用)

    演示readline()和readlines()的使用: #1.打开文件 f3=open(r'a.txt','r',encoding='gbk') #2.读取数据 content3=f3.readli ...

  6. BZOJ4245:[ONTAK2015]OR-XOR(贪心)

    Description 给定一个长度为n的序列a[1],a[2],...,a[n],请将它划分为m段连续的区间,设第i段的费用c[i]为该段内所有数字的异或和,则总费用为c[1] or c[2] or ...

  7. [luogu3980] 志愿者招募

    题面 ​ 又一次考试网络流爆零...... ​ 这一题一看就是网络流, 但是要怎么构图呢? 考虑到途中的一些因素, 首先, 每一种志愿者控制的区间范围为\(S_{i}\)到\(T_{i}\), 所以, ...

  8. CentOS常用命令备忘

    1. 查看进程 ps -a 杀掉进程 kill PID 2. 添加计划任务crontab -e 例如:30 21 * * * service httpd restart 每天21:30重启apache ...

  9. tusen 刷题

    //1.single number和变体 //2.lru lfu 3.给一个正整数集合,求一个和最大且能被3整除的子集.Follow up: 如果集合里有正有负 4.leetcode200-numbe ...

  10. -bash: fork: retry: Resource temporarily unavailable;centos6.5

    Last login: Wed Jun 18 14:04:11 2014 from 1.1.1.135 -bash: fork: retry: Resource temporarily unavail ...