cocos2d-android 引用tiledmap时黑屏

报错信息:E/CCTMXMapInfo: [Ljava.lang.StackTraceElement;@3f6e0210

.tmx文件

.tsx文件

有大神帮帮忙吗,在这卡了好几天了

上传下调试demo和说明下cocos2dx的版本

还是新手能说一下怎么调试吗?cocos2d-andorid.jar用了好多个了都是网上下载的,报错都是报这个,地图还是加载不出来。



这些都用过
cocos2d-x-4.0也下了但是我看他不是jar包就没有用,也没有配置,这个能和Android studio一起用吗

那你还是一步步来,学学如何调试啥的,上传demo吧

能帮忙看一下吗?项目压缩包太大了上传不了
思路是从欢迎页→菜单页→战斗页
问题就是现在战斗页的地图加载不出来,一加载就报错黑屏

    1. 欢迎页面WelcomeLayer

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);
}

}

    1. 菜单页面MemuLayer

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){
}

}

  • 战斗页面FightLayer

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);
}

}

  • m.tmx,这个网页上好像放不了xml代码只能截图了


  • mainback1.tsx

我拿不到你使用的地图数据呀,你把你使用的地图数据xml给我就好了

map.zip (96.1 KB)
是这个

TMX: unsupported compression method 解决方法
选择tiled->preference,然后将压缩选择为Base64(gzip压缩)
这个问题的原因就是默认的压缩方式和cocos2d的支持的压缩方式不一样,所以改一下压缩方式就ok了。

我那3.16版本加载的时候断言到这,应该是你的tmx cocos2dx不支持,上面是我搜到的解决方案你试下

你的tmx那边加载到的数据压缩方式标签是zstd,TMX底层那解析不支持这种格式

下面这几个我好想都试过,貌似都是一个错

我看了下gzip zlib这两种是支持的

或者无base64压缩

我都试过了,我现在怀疑我的cocos2d-android这个jar包是不是就不支持解压tmx文件:sob:

你咋用这个东西呢,用2d-x c++不香么

有些东西引擎组都不维护了

我是跟着B站上那个视频来做一个类似于植物大战僵尸的游戏的,他演示的时候就用的是cocos2d-android,一切正常,我的就GG了

目前都是只能手写坐标点hhhh

额,确实cocos教程很难找

不过你入过是初学者建议学习cocos create 现在引擎组的重心在这,社区活跃也比其他版块高,教程也都是最近的