报错信息:E/CCTMXMapInfo: [Ljava.lang.StackTraceElement;@3f6e0210
.tmx文件
.tsx文件
有大神帮帮忙吗,在这卡了好几天了
上传下调试demo和说明下cocos2dx的版本
还是新手能说一下怎么调试吗?cocos2d-andorid.jar用了好多个了都是网上下载的,报错都是报这个,地图还是加载不出来。
这些都用过
cocos2d-x-4.0也下了但是我看他不是jar包就没有用,也没有配置,这个能和Android studio一起用吗
那你还是一步步来,学学如何调试啥的,上传demo吧
能帮忙看一下吗?项目压缩包太大了上传不了
思路是从欢迎页→菜单页→战斗页
问题就是现在战斗页的地图加载不出来,一加载就报错黑屏
package com.example.pvz.layer;
import android.os.AsyncTask;
import android.view.MotionEvent;
import com.example.pvz.utils.CommonUtils;
import org.cocos2d.actions.base.CCAction;
import org.cocos2d.actions.instant.CCCallFunc;
import org.cocos2d.actions.interval.CCDelayTime;
import org.cocos2d.actions.interval.CCFadeIn;
import org.cocos2d.actions.interval.CCFadeOut;
import org.cocos2d.actions.interval.CCSequence;
import org.cocos2d.nodes.CCSprite;
import org.cocos2d.types.CGPoint;
import org.cocos2d.types.CGRect;
/**
- 欢迎页面
*/
public class WelcomeLayer extends BaseLayer {
CCSprite logo;
CCSprite nowstart;
public WelcomeLayer(){
//初始化logo
logo = CCSprite.sprite(“logo.png”);
logo.setPosition(winSize.width/2,winSize.height/2);//屏幕居中
this.addChild(logo);
//CCHide hide = CCHide.action();//隐藏 CCDelayTime delayTime = CCDelayTime.action(2);//延时2秒 //CCShow show = CCShow.action();//显示 CCFadeIn action = CCFadeIn.action(2);//淡入 CCFadeOut action2 = CCFadeOut.action(2);//淡出 CCSequence s = CCSequence.actions(action,delayTime,action2,delayTime, CCCallFunc.action(this,"showWelcome"));//先隐藏再延时2s再显示2s再隐藏调用显示欢迎页面方法
logo.runAction(s);
//异步在后台初始化数据 new AsyncTask<Void,Void,Void>(){
@Override protected Void doInBackground(Void... voids) { try{ Thread.sleep(10000); }catch (InterruptedException e){ e.printStackTrace(); } return null; }
@Override protected void onPostExecute(Void result){ nowstart.setVisible(true); setIsTouchEnabled(true); } }.execute(); }
/** * 显示欢迎页面 */ public void showWelcome(){ logo.removeSelf();//删除logo //初始化欢迎页面 CCSprite welcome = CCSprite.sprite("welcome.png"); welcome.setAnchorPoint(0,0); this.addChild(welcome);
//开始按钮 CCSprite start = CCSprite.sprite("startbutton/startbutton_01.png"); start.setPosition(winSize.width/2,winSize.height /3); this.addChild(start); //动画 CCAction animate = CommonUtils.animate("startbutton/startbutton_%02d.png",11,false); start.runAction(animate);
//初始化播完动画的开始 nowstart = CCSprite.sprite("startbutton/startbutton_11.png"); nowstart.setPosition(winSize.width/2,winSize.height /3); nowstart.setVisible(false);//先隐藏,动画播完再开始 this.addChild(nowstart); }
//点击按钮 @Override public boolean ccTouchesBegan(MotionEvent event){ CGPoint convertTouchToNodeSpace = convertTouchToNodeSpace(event);
if (CGRect.containsPoint(nowstart.getBoundingBox(),convertTouchToNodeSpace)){ CommonUtils.changeLayer(new MenuLayer()); } return super.ccTouchesBegan(event); }
}
package com.example.pvz.layer;
import com.example.pvz.utils.CommonUtils;
import org.cocos2d.menus.CCMenu;
import org.cocos2d.menus.CCMenuItemSprite;
import org.cocos2d.nodes.CCSprite;
/**
- 菜单页面
*/
public class MenuLayer extends BaseLayer {
public MenuLayer(){
//初始化背景 CCSprite sprite = CCSprite.sprite("mainback1.png"); sprite.setAnchorPoint(0,0); this.addChild(sprite);
CCMenu petmenu = CCMenu.menu(); CCMenu mailmenu = CCMenu.menu();//初始化按钮 CCMenu equipment = CCMenu.menu();
CCSprite normalMail = CCSprite.sprite("housebutton/h1.png");//默认图片 CCSprite selectedMail = CCSprite.sprite("housebutton/h1_c.png");//选中后的图片 CCSprite normalPet = CCSprite.sprite("housebutton/h2.png"); CCSprite selectedPet = CCSprite.sprite("housebutton/h2_c.png"); CCSprite normalEqu = CCSprite.sprite("housebutton/h3.png"); CCSprite selectedEqu = CCSprite.sprite("housebutton/h3_c.png");
CCMenuItemSprite item1 = CCMenuItemSprite.item(normalMail,selectedMail,this,"mailClick"); CCMenuItemSprite item2 = CCMenuItemSprite.item(normalPet,selectedPet,this,"petClick"); CCMenuItemSprite item3 = CCMenuItemSprite.item(normalEqu,selectedEqu,this,"equClick");
mailmenu.addChild(item1); mailmenu.setPosition(winSize.width/2+80,winSize.height/2+20); petmenu.addChild(item2); petmenu.setPosition(winSize.width/2-120,winSize.height/2-80); equipment.addChild(item3); equipment.setPosition(winSize.width/2+120,winSize.height/2-80);
this.addChild(mailmenu); this.addChild(petmenu); this.addChild(equipment); }
/** * 表示按钮被点击 * 必须带有Object参数这样才能反射到该方法里 */ public void mailClick(Object obj){ CommonUtils.changeLayer(new MailLayer());//切换场景 }
public void petClick(Object obj){ CommonUtils.changeLayer(new FightLayer()); }
public void equClick(Object obj){
}
}
package com.example.pvz.layer;
import org.cocos2d.layers.CCTMXTiledMap;
/**
- 战斗图层
*/
public class FightLayer extends BaseLayer {
public FightLayer(){ loadMap();
/*
//初始化背景
CCSprite sprite = CCSprite.sprite(“mainback1.png”);
sprite.setAnchorPoint(0,0);
this.addChild(sprite);
CCSprite m1 = CCSprite.sprite("m1/m1_a01.png"); m1.setPosition(winSize.width/2,winSize.height /3); this.addChild(m1); //动画 CCAction animate = CommonUtils.animate("m1/m1_a%02d.png",8,true); CCAction animate2 = CommonUtils.animate("m1/m1_w%02d.png",7,true); m1.runAction(animate); //m1.runAction(animate2);
CCSprite m2 = CCSprite.sprite("m2/m2_a01.png"); m2.setFlipX(true);//镜像翻转 m2.setPosition(winSize.width/2+150,winSize.height /3-30); this.addChild(m2); //动画 CCAction animate3 = CommonUtils.animate("m2/m2_a%02d.png",10,true); CCAction animate4 = CommonUtils.animate("m2/m2_w%02d.png",4,true); m2.runAction(animate3); //m2.runAction(animate4);
*/
}
/** * 加载地图 */ private void loadMap(){ CCTMXTiledMap map = CCTMXTiledMap.tiledMap("m.tmx"); this.addChild(map); }
}
我拿不到你使用的地图数据呀,你把你使用的地图数据xml给我就好了
TMX: unsupported compression method 解决方法
选择tiled->preference,然后将压缩选择为Base64(gzip压缩)
这个问题的原因就是默认的压缩方式和cocos2d的支持的压缩方式不一样,所以改一下压缩方式就ok了。
我那3.16版本加载的时候断言到这,应该是你的tmx cocos2dx不支持,上面是我搜到的解决方案你试下
你的tmx那边加载到的数据压缩方式标签是zstd,TMX底层那解析不支持这种格式
下面这几个我好想都试过,貌似都是一个错
我看了下gzip zlib这两种是支持的
或者无base64压缩
我都试过了,我现在怀疑我的cocos2d-android这个jar包是不是就不支持解压tmx文件
你咋用这个东西呢,用2d-x c++不香么
有些东西引擎组都不维护了
我是跟着B站上那个视频来做一个类似于植物大战僵尸的游戏的,他演示的时候就用的是cocos2d-android,一切正常,我的就GG了
目前都是只能手写坐标点hhhh
额,确实cocos教程很难找
不过你入过是初学者建议学习cocos create 现在引擎组的重心在这,社区活跃也比其他版块高,教程也都是最近的