Libgdx学习记录14——数据保存Preferences,XmlReader
在游戏过程过程中,常常需要对某些数据进行保存,以确保下次运行时能够正确读取。如游戏中的金币、道具、游戏分数、已通过的关卡等。
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的更多相关文章
- 【学习记录】C#保存数据至CSV文档 & DateTime格式模式控制解释
数据类的定义: public class Result_Display { private string id; public string ID { get { return id; } set { ...
- oracle学习之数据库数据保存成文件
常常需要将数据库中的数据生成文档,由于比较喜欢脚本的方式,所以就需要使用spool的时候进行格式设置,以下简单整理了一下oracle中进行格式设置的一些东西,一共十八条,其实常用的也就那么几个,稍后会 ...
- 学习记录 java session保存用户登录
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- libgdx学习记录2——文字显示BitmapFont
libgdx对中文支持不是太好,主要通过Hireo和ttf字库两种方式实现.本文简单介绍最基本的bitmapfont的用法. 代码如下: package com.fxb.newtest; import ...
- libgdx学习记录3——动画Animation
libgdx动画采用Animation实现,即通过帧动画实现. 代码如下: package com.fxb.newtest; import com.badlogic.gdx.ApplicationAd ...
- libgdx学习记录26——Polygon多边形碰撞检测
libgdx中Math封装了Polygon这个类,它是由多个定点进行描述实现的,在进行物体间的碰撞时,物体轮廓有时候是不规则的,这时候可以用一个多边形勾勒出其大概的轮廓,对其进行模拟. Polygon ...
- libgdx学习记录22——3d物体创建
libgdx是一个强大的游戏框架,不仅支持2d部分,同时还支持3d部分. libgdx的3d部分投影主要通过PerspectiveCamera实现. 物体的显示过程: 1. 创建远景相机,角度一般设为 ...
- libgdx学习记录20——多线程MultiThread资源处理
在libgdx中,一般的逻辑流程都在rende()函数中执行,这个函数是由opengl的渲染线程调用的,一般的图形显示和逻辑处理都在这个线程中. 一般情形下,在这个线程中处理就行了.但是当某些逻辑处理 ...
- libgdx学习记录19——图片动态打包PixmapPacker
libgdx中,opengl 1.x要求图片长宽必须为2的整次幂,一般有如下解决方法 1. 将opengl 1.x改为opengl 2.0.(libgdx 1.0版本后不支持1.x,当然不存在这个问题 ...
随机推荐
- Python+Selenium笔记(十三):Page Object设计模式
(一) 前言 简单的说就是分为2层,页面class 和测试class. 页面class:分为父类和子类(子类指具体的页面,每一个页面都创建一个类),父类中定义公有的属性和方法(操作). #对面向对象有 ...
- 【three.js练习程序】鼠标滚轮缩放
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Azure 中的 Windows 虚拟机概述
Azure 虚拟机 (VM) 是 Azure 提供的多种可缩放按需分配计算资源之一. 通常情况下,如果需要以更大的力度(相对于其他控制选项)控制计算环境,则应选择 VM. 本文介绍创建 VM 之前的注 ...
- 【转】HTTP学习---TCP和UDP协议的区别与应用
[原文]https://www.toutiao.com/i6592813624689951239/ 概述 ⊙TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICM ...
- ASCII码查看
字母对照表: ASCII可显示字符: ASCII控制字符:
- Android 生态消息推送平台介绍
一.手机厂商平台 华为消息推送服务 华为推送(Push)是为开发者提供的消息推送平台,建立了从云端到手机端的消息推送通道,使应用可以将最新信息及时通知用户,从而构筑良好的用户关系,提升用户的感知和活跃 ...
- Use MusicBrainz in iOS(三)查询专辑的完整信息
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u010962810/article/details/24066737 本文讨论下通过专辑名获取专辑的 ...
- BZOJ2460:[BJWC2011]元素(贪心,线性基)
Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石. 一般地,矿石越多则法力越 ...
- linux虚拟化课堂总结图2019_4_23
- input全选与单选(把相应的value放入隐藏域去)
框架是Jquery 需求是: 页面上有很多复选框,1.当我选择一项复选框时候 把对应的值放入到隐藏域去 2.当我反选的时候 把隐藏域对应的值删掉.3.当我全选的时候 页面上所有的选择框的值一起放到隐藏 ...