我有一个 SAX2 XML 解析器,我想执行特定的操作。
tileFrames
列表(与每个动画元素中的frame一样多),currentTileID
列表添加字符串tileFrames
。tileFrames
列表,以便 tileAnimations
列表接收其元素,而没有专用于另一个动画元素的元素。只要我的 xml 文件中没有更多动画标签,我就希望这个场景能够执行。
现在我收到具有正确
currentTileID
但具有相同元素的对象列表,就像上次动画迭代一样。
这是我登录时得到的:
2023-04-16 14:07:30.538 25714-25714/abc.def.ghi D/tile_animations: TileAnimation{localGID=21, tileFrames=[TileFrame{tileId=42, duration=500}, TileFrame{tileId=43, duration=500}]}
2023-04-16 14:07:30.538 25714-25714/abc.def.ghi D/tile_animations: TileAnimation{localGID=22, tileFrames=[TileFrame{tileId=42, duration=500}, TileFrame{tileId=43, duration=500}]}
2023-04-16 14:07:30.538 25714-25714/abc.def.ghi D/tile_animations: TileAnimation{localGID=43, tileFrames=[TileFrame{tileId=42, duration=500}, TileFrame{tileId=43, duration=500}]}
(...)
这里是关键代码(如果我砍掉太多代码我会附上更多,我只是想简化事情):
TmxHandler.java
@Override
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
if (localName.equals("animation")) {
tileFrames.clear();
} else if (localName.equals("frame")) {
tileFrames.add(new TileFrame(Long.parseLong(atts.getValue("tileid")), Long.parseLong(atts.getValue("duration"))));
}
}
@Override
public void endElement(String namespaceURI, String localName, String qName) {
if (localName.equals("animation")) {
currentTileSet.tileAnimations.add(new TileAnimation(Long.parseLong(currentTileID), tileFrames));
} else if (localName.equals("frame")) {
}
}
TileAnimation.java
public class TileAnimation {
private long localGID;
private List<TileFrame> tileFrames;
public long getLocalGID() {
return localGID;
}
public void setLocalGID(long localGID) {
this.localGID = localGID;
}
public List<TileFrame> getTileFrames() {
return tileFrames;
}
public void setTileFrames(List<TileFrame> tileFrames) {
this.tileFrames = tileFrames;
}
public TileAnimation(long localGID, List<TileFrame> tileFrames) {
this.localGID = localGID;
this.tileFrames = tileFrames;
}
@Override
public String toString() {
return "TileAnimation{" +
"localGID=" + localGID +
", tileFrames=" + tileFrames +
'}';
}
}
这是我的 xml
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.10" tiledversion="1.10.0" orientation="orthogonal" renderorder="right-down" width="8" height="12" tilewidth="32" tileheight="32" infinite="0" nextlayerid="11" nextobjectid="1">
<tileset firstgid="1" name="RPG Nature Tileset" tilewidth="32" tileheight="32" tilecount="180" columns="20">
<image source="NatureTileset.png" width="641" height="288"/>
<tile id="21">
<animation>
<frame tileid="21" duration="1000"/>
<frame tileid="1" duration="1000"/>
<frame tileid="20" duration="1000"/>
</animation>
</tile>
<tile id="22">
<animation>
<frame tileid="22" duration="100"/>
<frame tileid="2" duration="100"/>
</animation>
</tile>
<tile id="43">
<animation>
<frame tileid="42" duration="500"/>
<frame tileid="43" duration="500"/>
</animation>
</tile>
</tileset>
<tileset firstgid="181" name="32x32_map_tile v3.1 [MARGINLESS]" tilewidth="32" tileheight="32" tilecount="667" columns="23">
<image source="32x32_map_tile v3.1 [MARGINLESS].png" width="736" height="928"/>
</tileset>
<layer id="1" name="grass" width="8" height="12">
<data encoding="csv">
41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,
41,41,142,142,142,142,41,41,
41,41,142,41,142,41,41,41,
41,41,41,142,142,41,41,41,
41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41,
41,41,41,41,41,41,41,41
</data>
</layer>
<layer id="9" name="anim1" width="8" height="12">
<data encoding="csv">
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,23,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,44,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0
</data>
</layer>
<layer id="10" name="anim2" width="8" height="12">
<data encoding="csv">
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,22,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0
</data>
</layer>
</map>
如果你需要更多的东西就问。
屏幕 颜色深度: 24 像素深度: 24 高度: 820 宽度: 360 可用高度: 820 可用宽度: 360 可用性顶部: 0 可用左: 0 窗口大小: 360x3598 (360x820) 插件 缺少插件 扩展 网页GL: 076f790265bc8796 帆布: -151063313 声音的: 8fb5fa54c9d5e0c0 字体: 202a809ae5defaa7 客户端矩形: da39a3ee5e6b4b0d 时间 区: 非洲/拉各斯 当地的: 2023 年 4 月 15 日星期六 00:44:44 GMT-0600(中部标准时间) 系统: 2023 年 4 月 16 日星期日 06:08:19 GMT-0600(中部标准时间) 知识产权 WEBRTC 104.28.155.240 JavaScript 启用 闪光 残疾人 活性剂 残疾人 JAVA 残疾人 饼干loxked209.85.255.255 启用
@Override
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
if (localName.equals("animation")) {
// Do nothing
} else if (localName.equals("frame")) {
tileFrames.add(new TileFrame(Long.parseLong(atts.getValue("tileid")), Long.parseLong(atts.getValue("duration"))));
}
}
@Override
public void endElement(String namespaceURI, String localName, String qName) {
if (localName.equals("animation")) {
currentTileSet.tileAnimations.add(new TileAnimation(Long.parseLong(currentTileID), new ArrayList<>(tileFrames)));
tileFrames.clear();
}
}