Slick2D +平铺无负载地图 [英] Slick2D + Tiled cant load map

查看:161
本文介绍了Slick2D +平铺无负载地图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我找不到这样的问题。



我有这样的结果:

  Wed Jun 26 09:30:02 CEST 2013 INFO:Slick Build#237 
Wed Jun 26 09:30:02 CEST 2013 INFO:LWJGL版本:2.9.0
Wed 6月26日09:30:02 CEST 2013 INFO:OriginalDisplayMode:1366 x 768 x 32 @ 60Hz
Wed Jun 26 09:30:02 CEST 2013 INFO:TargetDisplayMode:640 x 480 x 0 @ 0Hz
Wed 6月26日09:30:02 CEST 2013信息:开始显示640x480
Wed Jun 26 09:30:02 CEST 2013信息:使用Java PNG Loader = true
警告:找到未知的Windows版本:Windows 7
尝试使用默认的Windows插件。
加载:net.java.games.input.DirectAndRawInputEnvironmentPlugin
Wed Jun 26 09:30:02 CEST 2013 INFO:Found 0 controllers
线程main中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1
在java.lang.String.substring(未知来源)
在org.newdawn.slick.tiled.TiledMap。< init>(TiledMap.java:106)
在org.newdawn.slick.tiled.TiledMap。< init>(TiledMap.java:90)
在SlickTest.init(SlickTest.java:24)
在org.newdawn。 slick.AppGameContainer.setup(AppGameContainer.java:393)
在org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:317)
在SlickTest.main(SlickTest.java:45)

代码:

 code> import java.util.logging.Level; 
import java.util.logging.Logger;

import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.tiled.TiledMap;

public class SlickTest extends BasicGame {
Image celownik;
private TiledMap grassMap = null;
public SlickTest(String title){
super(Graaa);
// TODO自动生成的构造函数存根
}

@Override
public void init(GameContainer gc)throws SlickException {
// celownik = new图像( cross.png);

grassMap = new TiledMap(mapa.tmx); //<<这是问题


}

@Override
public void update(GameContainer gc,int i)throws SlickException {
}

@Override
public void render(GameContainer gc,Graphics g)throws SlickException {
//grassMap.render(0,0);
//g.drawString(\"20,20);
//g.drawImage(celownik,50,50);
}

public static void main(String [] args){
try {
AppGameContainer appgc;
appgc = new AppGameContainer(new SlickTest(Simple Slick Game));
appgc.setDisplayMode(640,480,false);
appgc.start();
} catch(SlickException ex){
Logger.getLogger(SlickTest.class.getName())。log(Level.SEVERE,null,ex);
}

}
}

我使用Base64 gzip压缩,所以一切都应该可以。我找不到使我生病的因素;)。可能这个异常是不正确的库放置的结果吗?

解决方案


  • 标题可以压缩成gzip和zlib,但zlib不适用于Slick2D。



您的代码很好。这应该是一个愚蠢的错误。




  • 在项目中创建一个文件夹并复制它的地图。



然后替换:

  grassMap = new TiledMap(mapa.tmx ); 

由:

 code> grassMap = new TiledMap(folderOfYourMap / mapa.tmx); 

并替换:

  // grassMap.render(0,0); 

by:

 code> grassMap.render(0,0); 

此外,您尚未修复FPS的数量,因此您的CPU工作在100%。 / p>

要修复它,您可以添加:

  app.setVSync(true ); 

编辑:我有同样的问题,但那是因为我的IDE无法看到地图文件夹在项目中。我刚从Eclipse创建一个文件夹(从Package Explorer => New => Folder,你的项目右边的clic,并将你的地图放到这个文件夹中)。


I couldn't find problem like this anywhere.

I have such results:

Wed Jun 26 09:30:02 CEST 2013 INFO:Slick Build #237
Wed Jun 26 09:30:02 CEST 2013 INFO:LWJGL Version: 2.9.0
Wed Jun 26 09:30:02 CEST 2013 INFO:OriginalDisplayMode: 1366 x 768 x 32 @60Hz
Wed Jun 26 09:30:02 CEST 2013 INFO:TargetDisplayMode: 640 x 480 x 0 @0Hz
Wed Jun 26 09:30:02 CEST 2013 INFO:Starting display 640x480
Wed Jun 26 09:30:02 CEST 2013 INFO:Use Java PNG Loader = true
WARNING: Found unknown Windows version: Windows 7
Attempting to use default windows plug-in.
Loading: net.java.games.input.DirectAndRawInputEnvironmentPlugin
Wed Jun 26 09:30:02 CEST 2013 INFO:Found 0 controllers
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(Unknown Source)
    at org.newdawn.slick.tiled.TiledMap.<init>(TiledMap.java:106)
    at org.newdawn.slick.tiled.TiledMap.<init>(TiledMap.java:90)
    at SlickTest.init(SlickTest.java:24)
    at org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:393)
    at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:317)
    at SlickTest.main(SlickTest.java:45)

for such code:

import java.util.logging.Level;
import java.util.logging.Logger;

import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.tiled.TiledMap;

public class SlickTest extends BasicGame{
     Image celownik;
     private TiledMap grassMap = null;
    public SlickTest(String title) {
        super("Graaa");
        // TODO Auto-generated constructor stub
    }

    @Override
    public void init(GameContainer gc) throws SlickException {
        //celownik = new Image("cross.png");

        grassMap = new TiledMap("mapa.tmx");  // << this is the problem


    }

    @Override
    public void update(GameContainer gc, int i) throws SlickException {
    }

    @Override
    public void render(GameContainer gc, Graphics g) throws SlickException {
    //grassMap.render(0, 0);
        //g.drawString("r", 20,20);
        //g.drawImage(celownik, 50,50);
    }

    public static void main(String[] args) {
        try {
            AppGameContainer appgc;
            appgc = new AppGameContainer(new SlickTest("Simple Slick Game"));
            appgc.setDisplayMode(640, 480, false);
            appgc.start();
        } catch (SlickException ex) {
            Logger.getLogger(SlickTest.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
}

I use Base64 gzip compression so everything should be okay. I can't find the factor which makes me sick ;). Is it possible that this exception is consequence of incorrect libraries placement?

解决方案

  • Titled can compress into a gzip and a zlib but the zlib doesn't work with Slick2D.

Your code is good. That should be a silly mistake.

  • Create a folder inside your project and copy it your map.

then replace:

grassMap = new TiledMap("mapa.tmx");

by:

grassMap = new TiledMap("folderOfYourMap/mapa.tmx");

and replace:

//grassMap.render(0, 0);

by:

grassMap.render(0, 0);

Also, you haven't fixed your number of FPS, so your CPU work at 100%.

For fix it you can add:

app.setVSync(true);

Edit: I had the same problem but that was because my IDE wasn't able to see the maps folder in the project. I have just create the folder from Eclipse (right clic on your project from the Package Explorer => New => Folder. And past your map into this folder).

这篇关于Slick2D +平铺无负载地图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆