解析不了map.tmx
未解决
cocos2dx的CCTMXTiledMap解析不了map.tmx
发布于 2023-03-07 10:34 259浏览
```language W/System.err: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at org.cocos2d.menus.CCMenuItem.activate(CCMenuItem.java:73) at org.cocos2d.menus.CCMenu.ccTouchesEnded(CCMenu.java:146) at org.cocos2d.events.CCTouchHandler.ccTouchesEnded(CCTouchHandler.java:74) at org.cocos2d.events.CCTouchDispatcher.update(CCTouchDispatcher.java:327) at org.cocos2d.nodes.CCDirector.onDrawFrame(CCDirector.java:667) at org.cocos2d.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1245) at org.cocos2d.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1056) Caused by: java.lang.AssertionError: TMX: unsupported compression method W/System.err: at org.cocos2d.layers.CCTMXMapInfo$CCTMXXMLParser.startElement(CCTMXMapInfo.java:308) at org.apache.harmony.xml.ExpatParser.startElement(ExpatParser.java:143) at org.apache.harmony.xml.ExpatParser.appendChars(Native Method) at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:497) at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:484) at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:309) at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:267) at org.cocos2d.layers.CCTMXMapInfo.parseXMLFile(CCTMXMapInfo.java:136) at org.cocos2d.layers.CCTMXMapInfo.<init>(CCTMXMapInfo.java:118) at org.cocos2d.layers.CCTMXMapInfo.formatWithTMXFile(CCTMXMapInfo.java:98) at org.cocos2d.layers.CCTMXTiledMap.<init>(CCTMXTiledMap.java:134) at org.cocos2d.layers.CCTMXTiledMap.tiledMap(CCTMXTiledMap.java:121) at com.example.myapplication.layer.FightLayer.loadMap(FightLayer.java:12) at com.example.myapplication.layer.FightLayer.<init>(FightLayer.java:7) at com.example.myapplication.layer.MenuLayer.click(MenuLayer.java:33) ... 8 more ``` ```language package com.example.myapplication.layer; import org.cocos2d.layers.CCTMXTiledMap; public class FightLayer extends BaseLayer{ public FightLayer(){ loadMap(); } /*加载地图 * */ private void loadMap() { CCTMXTiledMap map=CCTMXTiledMap.tiledMap("image/fight/map.tmx"); this.setPosition(0,0); this.addChild(map); } } ``` ```language package com.example.myapplication.layer; import com.example.myapplication.Utils.CommonUtils; import org.cocos2d.menus.CCMenu; import org.cocos2d.menus.CCMenuItem; import org.cocos2d.menus.CCMenuItemSprite; import org.cocos2d.nodes.CCSprite; /** * 菜单 */ public class MenuLayer extends BaseLayer{ public MenuLayer(){ CCSprite sprite=CCSprite.sprite("image/menu/main_menu_bg.jpg"); sprite.setAnchorPoint(0,0); this.addChild(sprite); CCMenu menu=CCMenu.menu(); CCSprite sprite1 = CCSprite.sprite("image/menu/start_adventure_default.png"); CCSprite sprite2 = CCSprite.sprite("image/menu/start_adventure_press.png"); CCMenuItemSprite onClick = CCMenuItemSprite.item(sprite1, sprite2, this, "click"); menu.addChild(onClick); menu.setScale(0.5f); menu.setPosition(winsize.width/2-25,winsize.height/2-110); menu.setRotation(4.5f); this.addChild(menu); } /**必须带有obj参数 * */ public void click(Object o){ CommonUtils.changeLayer(new FightLayer()); System.out.println("战斗"); } } ```
W/System.err: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at org.cocos2d.menus.CCMenuItem.activate(CCMenuItem.java:73)
at org.cocos2d.menus.CCMenu.ccTouchesEnded(CCMenu.java:146)
at org.cocos2d.events.CCTouchHandler.ccTouchesEnded(CCTouchHandler.java:74)
at org.cocos2d.events.CCTouchDispatcher.update(CCTouchDispatcher.java:327)
at org.cocos2d.nodes.CCDirector.onDrawFrame(CCDirector.java:667)
at org.cocos2d.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1245)
at org.cocos2d.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1056)
Caused by: java.lang.AssertionError: TMX: unsupported compression method
W/System.err: at org.cocos2d.layers.CCTMXMapInfo$CCTMXXMLParser.startElement(CCTMXMapInfo.java:308)
at org.apache.harmony.xml.ExpatParser.startElement(ExpatParser.java:143)
at org.apache.harmony.xml.ExpatParser.appendChars(Native Method)
at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:497)
at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:484)
at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:309)
at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:267)
at org.cocos2d.layers.CCTMXMapInfo.parseXMLFile(CCTMXMapInfo.java:136)
at org.cocos2d.layers.CCTMXMapInfo.<init>(CCTMXMapInfo.java:118)
at org.cocos2d.layers.CCTMXMapInfo.formatWithTMXFile(CCTMXMapInfo.java:98)
at org.cocos2d.layers.CCTMXTiledMap.<init>(CCTMXTiledMap.java:134)
at org.cocos2d.layers.CCTMXTiledMap.tiledMap(CCTMXTiledMap.java:121)
at com.example.myapplication.layer.FightLayer.loadMap(FightLayer.java:12)
at com.example.myapplication.layer.FightLayer.<init>(FightLayer.java:7)
at com.example.myapplication.layer.MenuLayer.click(MenuLayer.java:33)
... 8 more
package com.example.myapplication.layer;
import org.cocos2d.layers.CCTMXTiledMap;
public class FightLayer extends BaseLayer{
public FightLayer(){
loadMap();
}
/*加载地图
* */
private void loadMap() {
CCTMXTiledMap map=CCTMXTiledMap.tiledMap("image/fight/map.tmx");
this.setPosition(0,0);
this.addChild(map);
}
}
package com.example.myapplication.layer;
import com.example.myapplication.Utils.CommonUtils;
import org.cocos2d.menus.CCMenu;
import org.cocos2d.menus.CCMenuItem;
import org.cocos2d.menus.CCMenuItemSprite;
import org.cocos2d.nodes.CCSprite;
/**
* 菜单
*/
public class MenuLayer extends BaseLayer{
public MenuLayer(){
CCSprite sprite=CCSprite.sprite("image/menu/main_menu_bg.jpg");
sprite.setAnchorPoint(0,0);
this.addChild(sprite);
CCMenu menu=CCMenu.menu();
CCSprite sprite1 = CCSprite.sprite("image/menu/start_adventure_default.png");
CCSprite sprite2 = CCSprite.sprite("image/menu/start_adventure_press.png");
CCMenuItemSprite onClick = CCMenuItemSprite.item(sprite1, sprite2, this, "click");
menu.addChild(onClick);
menu.setScale(0.5f);
menu.setPosition(winsize.width/2-25,winsize.height/2-110);
menu.setRotation(4.5f);
this.addChild(menu);
}
/**必须带有obj参数
*
*/
public void click(Object o){
CommonUtils.changeLayer(new FightLayer());
System.out.println("战斗");
}
}
W/System.err: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at org.cocos2d.menus.CCMenuItem.activate(CCMenuItem.java:73)
at org.cocos2d.menus.CCMenu.ccTouchesEnded(CCMenu.java:146)
at org.cocos2d.events.CCTouchHandler.ccTouchesEnded(CCTouchHandler.java:74)
at org.cocos2d.events.CCTouchDispatcher.update(CCTouchDispatcher.java:327)
at org.cocos2d.nodes.CCDirector.onDrawFrame(CCDirector.java:667)
at org.cocos2d.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1245)
at org.cocos2d.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1056)
Caused by: java.lang.AssertionError: TMX: unsupported compression method
W/System.err: at org.cocos2d.layers.CCTMXMapInfo$CCTMXXMLParser.startElement(CCTMXMapInfo.java:308)
at org.apache.harmony.xml.ExpatParser.startElement(ExpatParser.java:143)
at org.apache.harmony.xml.ExpatParser.appendChars(Native Method)
at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:497)
at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:484)
at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:309)
at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:267)
at org.cocos2d.layers.CCTMXMapInfo.parseXMLFile(CCTMXMapInfo.java:136)
at org.cocos2d.layers.CCTMXMapInfo.<init>(CCTMXMapInfo.java:118)
at org.cocos2d.layers.CCTMXMapInfo.formatWithTMXFile(CCTMXMapInfo.java:98)
at org.cocos2d.layers.CCTMXTiledMap.<init>(CCTMXTiledMap.java:134)
at org.cocos2d.layers.CCTMXTiledMap.tiledMap(CCTMXTiledMap.java:121)
at com.example.myapplication.layer.FightLayer.loadMap(FightLayer.java:12)
at com.example.myapplication.layer.FightLayer.<init>(FightLayer.java:7)
at com.example.myapplication.layer.MenuLayer.click(MenuLayer.java:33)
... 8 more
package com.example.myapplication.layer;
import org.cocos2d.layers.CCTMXTiledMap;
public class FightLayer extends BaseLayer{
public FightLayer(){
loadMap();
}
/*加载地图
* */
private void loadMap() {
CCTMXTiledMap map=CCTMXTiledMap.tiledMap("image/fight/map.tmx");
this.setPosition(0,0);
this.addChild(map);
}
}
package com.example.myapplication.layer;
import com.example.myapplication.Utils.CommonUtils;
import org.cocos2d.menus.CCMenu;
import org.cocos2d.menus.CCMenuItem;
import org.cocos2d.menus.CCMenuItemSprite;
import org.cocos2d.nodes.CCSprite;
/**
* 菜单
*/
public class MenuLayer extends BaseLayer{
public MenuLayer(){
CCSprite sprite=CCSprite.sprite("image/menu/main_menu_bg.jpg");
sprite.setAnchorPoint(0,0);
this.addChild(sprite);
CCMenu menu=CCMenu.menu();
CCSprite sprite1 = CCSprite.sprite("image/menu/start_adventure_default.png");
CCSprite sprite2 = CCSprite.sprite("image/menu/start_adventure_press.png");
CCMenuItemSprite onClick = CCMenuItemSprite.item(sprite1, sprite2, this, "click");
menu.addChild(onClick);
menu.setScale(0.5f);
menu.setPosition(winsize.width/2-25,winsize.height/2-110);
menu.setRotation(4.5f);
this.addChild(menu);
}
/**必须带有obj参数
*
*/
public void click(Object o){
CommonUtils.changeLayer(new FightLayer());
System.out.println("战斗");
}
}
编写答案
回答问题, 请先登录
相似问题
同学这个问题是属于游戏行业了哦,和我们不是一个方向了。很早的时候我虽然做过手游,但是也都是c++主语言的,而且当时的版本和现在完全不一样,连cocoscreator都没有。
不过根据同学提供的堆栈,是在解析tmx文件时候报错的,解析失败,那是否因为该文件不正确,可以去了解下这个文件的格式规则,使用010editor之类的工具观察文件中的信息。也可以进入错误堆栈,去找到报错地方,比如通过观察源码,找到TMX: unsupported compression method报错的地方发现
表示如果不压缩没问题,如果压缩需要使用gzip或者zlib才可以哦,目前tmx文件中的内容可能采用了不识别的压缩方式。归根结底肯定还是tmx文件的问题。
同学这个问题是属于游戏行业了哦,和我们不是一个方向了。很早的时候我虽然做过手游,但是也都是c++主语言的,而且当时的版本和现在完全不一样,连cocoscreator都没有。
不过根据同学提供的堆栈,是在解析tmx文件时候报错的,解析失败,那是否因为该文件不正确,可以去了解下这个文件的格式规则,使用010editor之类的工具观察文件中的信息。也可以进入错误堆栈,去找到报错地方,比如通过观察源码,找到TMX: unsupported compression method报错的地方发现
表示如果不压缩没问题,如果压缩需要使用gzip或者zlib才可以哦,目前tmx文件中的内容可能采用了不识别的压缩方式。归根结底肯定还是tmx文件的问题。