【问题标题】:Map render error slick2d [closed]地图渲染错误 slick2d [关闭]
【发布时间】:2013-02-18 23:35:57
【问题描述】:

我最近一直在用 java 编写平台游戏,当我尝试使用单独的类来存储我的地图(平铺)时遇到了问题。然后我尝试通过将地图移动到主类来修复它,但没有帮助。

这是导致问题的代码(当 world.map1.render(0,0) 被删除时,不存在问题) - 我知道我应该使用 getter 和 setter .我只是觉得他们很痛苦。

public void render(GameContainer arg0, Graphics arg1) throws SlickException {
    world.map1.render(0, 0);
}

这是主要方法

public static void main(String[] args) throws SlickException{
    AppGameContainer app = new AppGameContainer(new Game());
    app.setDisplayMode(864, 480, false);
    app.setVSync(true);
    app.start();
    playerSheet = new SpriteSheet("resources/images/link3goldstudmod.png", 64, 64);
    player = new Player(playerSheet);
    world = new World();

}

这是世界级的

import org.newdawn.slick.SlickException;
import org.newdawn.slick.tiled.TiledMap;

public class World {
    TiledMap map1;
    World() throws SlickException{
        map1 = new TiledMap("resources/maps/map1.tmx");
    }
}

编辑:我忘了发布问题/堆栈废话/无论如何。我真傻。

Mon Feb 18 16:33:58 MST 2013 INFO:Slick Build #264
Mon Feb 18 16:33:58 MST 2013 INFO:LWJGL Version: 2.8.5
Mon Feb 18 16:33:58 MST 2013 INFO:OriginalDisplayMode: 1920 x 1080 x 32 @60Hz
Mon Feb 18 16:33:58 MST 2013 INFO:TargetDisplayMode: 864 x 480 x 0 @0Hz
Mon Feb 18 16:33:58 MST 2013 INFO:Starting display 864x480
Mon Feb 18 16:33:58 MST 2013 INFO:Use Java PNG Loader = true
WARNING: Found unknown Windows version: Windows 8
Attempting to use default windows plug-in.
Loading: net.java.games.input.DirectAndRawInputEnvironmentPlugin
Mon Feb 18 16:33:59 MST 2013 INFO:Found 3 controllers
Mon Feb 18 16:33:59 MST 2013 INFO:0 : USB Receiver
Mon Feb 18 16:33:59 MST 2013 INFO:1 : USB Receiver
Mon Feb 18 16:33:59 MST 2013 INFO:2 : Logitech Speaker
Mon Feb 18 16:33:59 MST 2013 ERROR:null
java.lang.NullPointerException
    at zeldaplatform.Game.render(Game.java:36)
at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:703)
at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:456)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:361)
at zeldaplatform.Game.main(Game.java:27)
Mon Feb 18 16:33:59 MST 2013 ERROR:Game.render() failure - check the game code.
org.newdawn.slick.SlickException: Game.render() failure - check the game code.
at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:706)
at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:456)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:361)
at zeldaplatform.Game.main(Game.java:27)

这不是什么大错误,因为它编译得很好,然后控制台给了我这个。窗口显示片刻,然后消失。

【问题讨论】:

  • an error 如果您不告诉我们什么错误,您希望我们如何提供帮助?
  • 您似乎不了解对象、变量或范围。您可能想从 Oracle 的 Java 教程或一本很好的 Java 初学者书籍开始。
  • @BrianRoach 是什么让你这么认为?我不知道会发生什么,因为我已经阅读了 javadocs,并且我知道对象是什么以及它们应该用于什么。我只是匆匆写下这个问题。如果我不知道变量是什么,我就不会开始狡猾了。是的,我可以编写乒乓球游戏(无需复制/粘贴)。但是我对光滑的引擎不是很好。它给我带来了麻烦。而且很难找到教程和东西。

标签: java lwjgl slick2d slick


【解决方案1】:

这是NullPointerException正是导致 NPE 的原因之一;您尝试使用的东西没有被实例化并且是null。在这种情况下,您的 Game 类中的 worldWorld 类中的 map1

考虑到您在Game.main() 的开头实例化一个新的Game,启动它,然后继续将一个新的World 分配给所述类的static 字段(您不会发布您的@ 987654331@ 类,但这是您可以从main() 执行此操作的唯一方法,并且堆栈跟踪显示它是Game.main()),它是前者。

AppGameContainer (app) 被start() 触发,然后该线程继续调用Gamerender() 方法实例,然后再将World 实例化并分配给静态场。

不要使用 static 这样的字段;这真的不是他们的目的。您应该将这些实例(playerSheetplayerworld)传递给 Game 的构造函数,并将它们分配给私有实例变量。

...
Game myGame = new Game(playerSheet, player, world);
AppGameContainer app = new AppGameContainer(myGame);
...

【讨论】:

  • 我删除了所有静态字段,现在我得到一个 opengl“在当前线程中找不到 opengl”错误。据说唯一的解决方法是将世界级的东西添加到游戏级。但是上次我检查你应该把事情分开上课……除非我上私人课。我会试试看会发生什么
  • 没有看到/挖掘你的代码的其余部分......这是有道理的。您从 Game 类中发布的 render() 方法正在传递一个 Graphics 上下文,您没有对其进行任何操作;您需要该上下文来渲染内容(并且您永远不想存储 Graphics 上下文并重用它)。
  • 我看到你的评论并仔细查看了一些示例代码,我意识到 slick 非常挑剔。挑剔到它不会让你设置变量或对象的地步,直到你到达 init() 函数(在游戏循环之前)并且......我将我在 Game() 中拥有的东西移动到 init 并且当前程序运行良好。它显示了我的地图。 (对我来说已经足够了!)而且,谢谢。非常。虽然,我正在查看的示例代码也没有对 Graphics 上下文做任何事情。
猜你喜欢
  • 1970-01-01
  • 2013-10-23
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
  • 2022-01-14
  • 2010-11-12
  • 2015-03-12
  • 1970-01-01
相关资源
最近更新 更多